internal override void ActInPlanningPhase()
        {
            // first check whether you're hurt and go scared if you are
            if (!Scared && Aircraft.Health < Aircraft.MaxHealth)
            {
                Scared = true;
            }
            // go through all aircrafts and find the closest enemy
            // (for now an enemy is everyone who isn't on your team)
            var myTeam = Aircraft.Team;
            IEnumerable <Aircraft> aircrafts;

            if (myTeam == Team.PlayerTeam)
            {
                aircrafts = Aircraft.ActiveAircraftsInLevel();
            }
            else
            {
                aircrafts = Aircraft.PlayerAircraftsInLevel();
            }
            Aircraft closestAircraft = null;

            foreach (var aircraft in aircrafts)
            {
                if (aircraft.MyState != Aircraft.State.SHOT_DOWN && aircraft != Aircraft && aircraft.Team.IsEnemy(myTeam) && aircraft.IsActive())
                {
                    // check the distance (closer is better)
                    if (closestAircraft == null ||
                        CCPoint.Distance(Aircraft.Position, aircraft.Position) < CCPoint.Distance(Aircraft.Position, closestAircraft.Position))
                    {
                        closestAircraft = aircraft;
                    }
                }
            }
            // if it is too close run away
            if (closestAircraft != null && (Scared || CCPoint.Distance(Aircraft.Position, closestAircraft.Position) < SCARE_DISTANCE))
            {
                //Console.WriteLine("FLEEING");
                Aircraft.TryToSetFlightPathHeadTo(Aircraft.Position + (Aircraft.Position - closestAircraft.Position) * 16);
            }
            // else move randomly
            else
            {
                //Console.WriteLine("Moving randomly");
                Aircraft.TryToSetFlightPathHeadTo(Constants.RandomPointBoxnear(Aircraft.Position, 1000f));
            }
        }
Exemplo n.º 2
0
        internal override void ActInPlanningPhase()
        {
            // first go through all aircrafts and find the closest enemy
            // (for now an enemy is everyone who isn't on your team)
            var myTeam = Aircraft.Team;
            IEnumerable <Aircraft> aircrafts;

            if (myTeam == Team.PlayerTeam)
            {
                aircrafts = Aircraft.ActiveAircraftsInLevel();
            }
            else
            {
                aircrafts = Aircraft.PlayerAircraftsInLevel();
            }
            Aircraft closestAircraft = null;

            foreach (var aircraft in aircrafts)
            {
                if (aircraft.MyState != Aircraft.State.SHOT_DOWN && aircraft != Aircraft && aircraft.Team.IsEnemy(myTeam) && aircraft.IsActive())
                {
                    // check the distance (closer is better)
                    if (closestAircraft == null ||
                        CCPoint.Distance(Aircraft.Position, aircraft.Position) < CCPoint.Distance(Aircraft.Position, closestAircraft.Position))
                    {
                        closestAircraft = aircraft;
                    }
                }
            }
            // set path towards where he might be at the end of the next turn
            if (closestAircraft != null)
            {
                //Console.WriteLine("Attacking!");
                Aircraft.TryToSetFlightPathHeadTo(closestAircraft.Position + (closestAircraft.VelocityVector * Constants.TURN_DURATION));
            }
        }