Пример #1
0
 internal void RemoveSquadron(Squadron squadron)
 {
     foreach (var entry in squadron.AircraftsWithRelPositions)
     {
         RemoveAircraft(entry.Key);
     }
     Squadrons.Remove(squadron);
     ActiveSquadrons.Remove(squadron);
 }
Пример #2
0
        internal void AddSquadron(Squadron squadron, CCPoint position, float CCdirection)
        {
            squadron.Leader.Position = position;
            squadron.Leader.RotateTo(CCdirection);
            // rotate all formation positions correctly around the leader and set everyone to their positions
            float angle = Constants.CCDegreesToMathRadians(CCdirection);

            foreach (var entry in squadron.AircraftsWithRelPositions)
            {
                var formationPoint = CCPoint.RotateByAngle(entry.Value, CCPoint.Zero, angle);
                entry.Key.Position = position + formationPoint;
                entry.Key.RotateTo(CCdirection);
                AddAircraft(entry.Key);
            }
            squadron.GenerateWayPoint();
            Squadrons.Add(squadron);
        }
Пример #3
0
        /// <summary>
        /// Returned Squadron can be null!
        /// </summary>
        /// <param name="zoneNum"></param>
        /// <returns></returns>
        internal Squadron GenerateSquadron(int zoneNum, Random rng)
        {
            Squadron newSquadron = null;

            switch (zoneNum)
            {
            case 0:
            {
                // no squadrons are present in the first zone
            }
            break;

            case 1:
            {
                // second zone: potatos and bats
                switch (rng.Next(4))
                {
                case 0:
                {
                    // create a peaceful Potato
                    var leader = Aircraft.CreatePotato(rng: rng);
                    leader.AI   = new PeacefulFleeingAI();
                    newSquadron = new Squadron();
                    newSquadron.AddAircraft(leader, CCPoint.Zero);
                }
                break;

                case 1:
                {
                    // create a non-peaceful Potato
                    var leader = Aircraft.CreatePotato(true, rng: rng);
                    leader.AI   = new StandardAI();
                    newSquadron = new Squadron();
                    newSquadron.AddAircraft(leader, CCPoint.Zero);
                }
                break;

                case 2:
                {
                    // create a bat
                    var leader = Aircraft.CreateBat(rng: rng);
                    leader.AI   = new StandardAI();
                    newSquadron = new Squadron();
                    newSquadron.AddAircraft(leader, CCPoint.Zero);
                }
                break;

                case 3:
                {
                    // create a 3-potato squad
                    var leader = Aircraft.CreatePotato(true, rng);
                    var ally1  = Aircraft.CreatePotato(rng: rng);
                    var ally2  = Aircraft.CreatePotato(rng: rng);
                    leader.AI   = new StandardAI();
                    ally1.AI    = new PeacefulFleeingAI();
                    ally2.AI    = new PeacefulFleeingAI();
                    newSquadron = new Squadron();
                    newSquadron.AddAircraft(leader, CCPoint.Zero);
                    newSquadron.AddAircraft(ally1, new CCPoint(-90f, 145f));
                    newSquadron.AddAircraft(ally2, new CCPoint(-90f, -145f));
                }
                break;
                }
            }
            break;

            case 2:
            {
                // third zone: TestAircrafts and Balloons
                switch (rng.Next(3))
                {
                case 0:
                {
                    // create a lone TestAircraft
                    var leader = Aircraft.CreateTestAircraft(rng: rng);
                    leader.AI   = new StandardAI();
                    newSquadron = new Squadron();
                    newSquadron.AddAircraft(leader, CCPoint.Zero);
                }
                break;

                case 1:
                {
                    // create a Balloon
                    var leader = Aircraft.CreateBalloon(true, rng: rng);
                    leader.AI   = new StandardAI();
                    newSquadron = new Squadron();
                    newSquadron.AddAircraft(leader, CCPoint.Zero);
                }
                break;

                case 2:
                {
                    // create a squad of 3 TestAircrafts
                    newSquadron = new Squadron();
                    Aircraft[] planes = new Aircraft[3];
                    for (int i = 0; i < 3; i++)
                    {
                        int weaponNum = rng.Next(3);
                        planes[i]    = Aircraft.CreateTestAircraft(weaponNum, rng: rng);
                        planes[i].AI = weaponNum != 0 ? (AI)(new StandardAI()) : (AI)(new PeacefulFleeingAI());
                    }
                    newSquadron.AddAircraft(planes[0], CCPoint.Zero);
                    newSquadron.AddAircraft(planes[1], new CCPoint(-250f, 255f));
                    newSquadron.AddAircraft(planes[2], new CCPoint(-250f, -255f));
                }
                break;
                }
            }
            break;

            case 3:
            {
                // fourth zone: Fighters and BigBombers
                switch (rng.Next(5))
                {
                case 0:
                case 1:
                {
                    // create a lone Fighter
                    var leader = Aircraft.CreateFighter(rng: rng);
                    leader.AI   = new StandardAI();
                    newSquadron = new Squadron();
                    newSquadron.AddAircraft(leader, CCPoint.Zero);
                }
                break;

                case 2:
                {
                    // create a Fighter Squad of 2 Fighters
                    var leader = Aircraft.CreateFighter(rng: rng);
                    leader.AI = new StandardAI();
                    var plane2 = Aircraft.CreateFighter(rng: rng);
                    plane2.Team = Team.EnemyTeam;
                    plane2.AI   = new StandardAI();
                    newSquadron = new Squadron();
                    newSquadron.AddAircraft(leader, new CCPoint(0, 270f));
                    newSquadron.AddAircraft(plane2, new CCPoint(0, -270f));
                }
                break;

                case 3:
                {
                    // create a squad of a BigBomber and some Fighters
                    newSquadron = new Squadron();
                    newSquadron.AddAircraft(Aircraft.CreateBigBomber(rng: rng), CCPoint.Zero);
                    int        fighterCount = rng.Next(5) == 0 ? 4 : 2;
                    Aircraft[] fighter      = new Aircraft[fighterCount];
                    for (int i = 0; i < fighterCount; i++)
                    {
                        fighter[i]    = Aircraft.CreateFighter(rng: rng);
                        fighter[i].AI = new StandardAI();
                    }
                    if (fighterCount >= 2)
                    {
                        newSquadron.AddAircraft(fighter[0], new CCPoint(330f, 255f));
                        newSquadron.AddAircraft(fighter[1], new CCPoint(330f, -255f));
                    }
                    if (fighterCount == 4)
                    {
                        newSquadron.AddAircraft(fighter[2], new CCPoint(-330f, 255f));
                        newSquadron.AddAircraft(fighter[3], new CCPoint(-330f, -255f));
                    }
                }
                break;
                }
            }
            break;

            case 4:
            default:        // this is also the default case because this is the last zone
            {
                // fifth zone: Jets, Jets and more Jets
                var leader = Aircraft.CreateJet(rng);
                leader.Team = Team.EnemyTeam;
                leader.AI   = leader.TotalParts.OfType <WingAngel>().Any() ? (AI)(new PeacefulFleeingAI()) : new StandardAI();      // angels should flee
                newSquadron = new Squadron();
                newSquadron.AddAircraft(leader, CCPoint.Zero);
            }
            break;
            }
            if (newSquadron != null)
            {
                newSquadron.MinR = ZoneEndRadii[zoneNum - 1];
                newSquadron.MaxR = (zoneNum < ZoneEndRadii.Length ? ZoneEndRadii[zoneNum] : float.PositiveInfinity);
            }
            return(newSquadron);
        }