示例#1
0
 internal float GetWreckMaxPercentile(Aircraft aircraft)
 {
     return(WreckMaxPercentile[aircraft]);
 }
示例#2
0
        internal static Aircraft CreateFighter(int numWeapons = 2, Random rng = null)
        {
            Aircraft aircraft = new Aircraft();

            if (rng != null && ShinyCoinThrow(rng))
            {
                aircraft.Body = new BodyFighterShiny();
                // mount the wings
                var wing1 = new WingFighterShiny();
                var wing2 = new WingFighterShiny();
                aircraft.Body.MountPart(wing1);
                aircraft.Body.MountPart(wing2);
                // mount the weapons
                wing1.MountPart(new WeaponFighterShiny());
                wing2.MountPart(new WeaponFighterShiny());
                // mount the rotor
                aircraft.Body.MountPart(new RotorFighterShiny());
                // mount the rudders
                aircraft.Body.MountPart(new RudderFighterShiny());
                aircraft.Body.MountPart(new RudderFighterShiny());
            }
            else
            {
                aircraft.Body = new BodyFighter();
                // mount the wings
                var wing1 = new WingFighter();
                var wing2 = new WingFighter();
                aircraft.Body.MountPart(wing1);
                aircraft.Body.MountPart(wing2);
                // mount the weapons
                if (rng == null)
                {
                    rng = new Random();
                }
                if (numWeapons == 1)
                {
                    if (rng.NextBoolean())
                    {
                        wing1.MountPart(new WeaponFighter());
                    }
                    else
                    {
                        wing2.MountPart(new WeaponFighter());
                    }
                }
                else if (numWeapons == 2)
                {
                    wing1.MountPart(new WeaponFighter());
                    wing2.MountPart(new WeaponFighter());
                }
                // mount the rotor
                aircraft.Body.MountPart(new RotorFighter());
                // mount the rudders
                aircraft.Body.MountPart(new RudderFighter());
                aircraft.Body.MountPart(new RudderFighter());
            }
            // set the math challenges
            aircraft.WeightedChallenges = new List <Tuple <int, MathChallenge> > {
                new Tuple <int, MathChallenge>(1, new SolveChallenge(dummy: true)),
                new Tuple <int, MathChallenge>(1, new MultiplyChallenge(dummy: true))
            };
            // set the awarded powerups
            aircraft.WeightedPowerUpsAwarded = new Dictionary <PowerUp.PowerType, int> {
                { PowerUp.PowerType.HEAL, 1 }, { PowerUp.PowerType.SHIELD, 3 }, { PowerUp.PowerType.BACK_TURN, 2 }, { PowerUp.PowerType.BOOST, 3 }
            };
            return(aircraft);
        }
示例#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);
        }
示例#4
0
        internal static Aircraft CreateTestAircraft(int numWeapons = 2, bool withChallenges = true, Random rng = null)
        {
            Aircraft aircraft = new Aircraft();

            //IsManeuverPolygonDrawn = true;
            if (rng != null && ShinyCoinThrow(rng))
            {
                aircraft.Body = new TestBodyShiny();
                // mount the wings
                var wings = new TestDoubleWingShiny();
                aircraft.Body.MountPart(wings);
                // mount the rotor
                aircraft.Body.MountPart(new TestRotorShiny());
                // and the rudders
                aircraft.Body.MountPart(new TestRudderShiny());
                aircraft.Body.MountPart(new TestRudderShiny());
                wings.MountPart(new TestWeaponShiny());
                wings.MountPart(new TestWeaponShiny());
            }
            else
            {
                aircraft.Body = new TestBody();
                // mount the wings
                var wings = new TestDoubleWing();
                aircraft.Body.MountPart(wings);
                // mount the rotor
                aircraft.Body.MountPart(new TestRotor());
                // and the rudders
                aircraft.Body.MountPart(new TestRudder());
                aircraft.Body.MountPart(new TestRudder());
                //Body.MountPart(new TestEngineStrong());
                if (rng == null)
                {
                    rng = new Random();
                }
                if (numWeapons == 1)
                {
                    if (rng.NextBoolean())
                    {
                        wings.MountPart(0, new TestWeapon());
                    }
                    else
                    {
                        wings.MountPart(1, new TestWeapon());
                    }
                }
                else if (numWeapons == 2)
                {
                    wings.MountPart(new TestWeapon());
                    wings.MountPart(new TestWeapon());
                }
            }
            // set the math challenges
            if (withChallenges)
            {
                aircraft.WeightedChallenges = new List <Tuple <int, MathChallenge> > {
                    new Tuple <int, MathChallenge>(1, new MultiplyChallenge(4, 2, -20, 5, dummy: true)),
                    new Tuple <int, MathChallenge>(1, new DivideChallenge(dummy: true))
                }
            }
            ;
            // set the awarded powerups
            if (withChallenges)
            {
                aircraft.WeightedPowerUpsAwarded = new Dictionary <PowerUp.PowerType, int> {
                    { PowerUp.PowerType.HEAL, 1 }, { PowerUp.PowerType.SHIELD, 4 }, { PowerUp.PowerType.BACK_TURN, 5 }, { PowerUp.PowerType.BOOST, 5 }
                }
            }
            ;
            return(aircraft);
        }
示例#5
0
 internal void AddAircraft(Aircraft aircraft)
 {
     Aircrafts.Add(aircraft);
     AddChild(aircraft);
 }