protected override void AddedToScene() { base.AddedToScene(); var bounds = VisibleBoundsWorldspace; // add the hints WreckageHint upNode = new WreckageHint("Salvage", true); WreckageHint downNode = new WreckageHint("Repair", false); upNode.AnchorPoint = CCPoint.AnchorMiddleTop; downNode.AnchorPoint = CCPoint.AnchorMiddleBottom; AddChild(upNode, -1000); AddChild(downNode, -1000); const float HINT_BORDER = 64f; upNode.Position = new CCPoint(bounds.Center.X, bounds.Size.Height - HINT_BORDER); downNode.Position = new CCPoint(bounds.Center.X, HINT_BORDER); /* * var drawNode = new CCDrawNode(); * drawNode.DrawSolidCircle(bounds.Center, 20f, CCColor4B.AliceBlue); * AddChild(drawNode, zOrder: int.MaxValue); */ WreckCarousel = new Carousel(new CCSize(bounds.Size.Width, bounds.Size.Height / 2)); WreckCarousel.SpacingFactor = 12f; WreckCarousel.ScaleFactor = 2f; WreckCarousel.MinYMod = -bounds.Size.Height / 5; WreckCarousel.AnchorPoint = CCPoint.AnchorMiddle; WreckCarousel.Position = bounds.Center; AddChild(WreckCarousel); if (DEBUG) { InitWreckage(new List <Aircraft>() { Aircraft.CreateTestAircraft(), Aircraft.CreateTestAircraft() }); } }
/// <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); }