Ejemplo n.º 1
0
        private static HostileUnitSearchResult SearchForNearest <T, TS>(GameActorsManager <T, TS> unitsManager, GameUnit attacker)
            where TS : GameActor
        {
            HostileUnitSearchResult result = new HostileUnitSearchResult
            {
                GameUnit = null,
                Distance = float.MaxValue
            };

            foreach (var currentGameObject in unitsManager.GetRegistered().Where(
                         u => u.ActorAttributes.Team != attacker.ActorAttributes.Team && u.LifeState == GameActor.UnitLifeState.LIVING)
                     )
            {
                float currentDistance = Vector3.Distance(
                    attacker.Transform.localPosition,
                    currentGameObject.Transform.localPosition
                    );

                if (currentDistance > result.Distance)
                {
                    continue;
                }

                result.Distance = currentDistance;
                result.GameUnit = currentGameObject;
            }

            return(result);
        }
Ejemplo n.º 2
0
        public GameActor GetNearestHostileUnit(GameUnit attacker)
        {
            HostileUnitSearchResult nearestHostileUnit     = SearchForNearest(_unitsManager, attacker);
            HostileUnitSearchResult nearestHostileBuilding = SearchForNearest(_buildingsManager, attacker);

            if (nearestHostileUnit.Distance <= nearestHostileBuilding.Distance)
            {
                return(nearestHostileUnit.GameUnit);
            }
            else
            {
                return(nearestHostileBuilding.GameUnit);
            }
        }