ACR_Traps.CreateTraps.GetNearestTrapEmitter C# (CSharp) Метод

GetNearestTrapEmitter() приватный статический Метод

private static GetNearestTrapEmitter ( CLRScriptBase script, NWScript.NWScriptEngineStructure2 loc ) : uint
script CLRScriptFramework.CLRScriptBase
loc NWScript.NWScriptEngineStructure2
Результат uint
        private static uint GetNearestTrapEmitter(CLRScriptBase script, NWLocation loc)
        {
            float nearestDist = -1.0f;
            uint nearestObject = CLRScriptBase.OBJECT_INVALID;
            Vector3 trapPos = script.GetPositionFromLocation(loc);
            foreach(uint obj in script.GetObjectsInArea(script.GetAreaFromLocation(loc)))
            {
                if(script.GetObjectType(obj) == OBJECT_TYPE_PLACEABLE &&
                   (script.GetTag(obj) == "TRAP_EMITTER" ||
                    script.GetTag(obj) == "TRAP_ORIGIN"))
                {
                    Vector3 emitterPos = script.GetPosition(obj);
                    float newDist = (trapPos.x - emitterPos.x)*(trapPos.x - emitterPos.x)+(trapPos.y - emitterPos.y)*(trapPos.y - emitterPos.y);
                    if(nearestDist < 0 || nearestDist > newDist)
                    {
                        nearestDist = newDist;
                        nearestObject = obj;
                    }
                }
            }
            if(script.GetIsObjectValid(nearestObject) == CLRScriptBase.FALSE || nearestDist > 400.0f) // 20 meters; nearestDist is squared to be cheaper
            {
                nearestObject = CLRScriptBase.OBJECT_INVALID;
            }
            return nearestObject;
        }