internal float GetWreckMaxPercentile(Aircraft aircraft) { return(WreckMaxPercentile[aircraft]); }
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); }
/// <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); }
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); }
internal void AddAircraft(Aircraft aircraft) { Aircrafts.Add(aircraft); AddChild(aircraft); }