public Actor GetClosestActor(Vector3f origin, ActorCategory category) { const float SEARCH_RADIUS_SQ = 50.0f * 50.0f; Actor closestActor = null; float closestSqDist = Single.MaxValue; // Find scenes near the actor for (int i = 0; i < this.Scenes.Length; i++) { Scene scene = this.Scenes[i]; if (AABB.DistanceSquared(scene.BoundingBox, origin) <= SEARCH_RADIUS_SQ) { // Check distance for all actors in the this scene for (int j = 0; j < scene.Actors.Count; j++) { Actor actor = scene.Actors[j]; if (actor.AcdID == this.Me.AcdID || actor.Category == ActorCategory.ServerProp) { continue; } if (category == ActorCategory.Invalid || category == actor.Category) { float sqDist = Vector3f.DistanceSquared(origin, actor.Position); if (sqDist < closestSqDist) { closestActor = actor; closestSqDist = sqDist; } } } } } return(closestActor); }
internal Actor(int snoID, int category, int team) { Type = (ActorName)snoID; Category = (ActorCategory)category; Team = (TeamType)team; }
public Actor GetClosestActor(ActorCategory category) { return(GetClosestActor(this.Me.Position, category)); }