Пример #1
0
        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);
        }
Пример #2
0
 internal Actor(int snoID, int category, int team)
 {
     Type     = (ActorName)snoID;
     Category = (ActorCategory)category;
     Team     = (TeamType)team;
 }
Пример #3
0
 public Actor GetClosestActor(ActorCategory category)
 {
     return(GetClosestActor(this.Me.Position, category));
 }