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;
}