/// <summary> /// Dient zur Erstellung besonderer Ereignisse während einer Welle, z.B. das Auftauchen eines Mutterschiffs. /// </summary> /// <param name="gameTime">Spielzeit</param> public void SpecialEvent(GameTime gameTime) { // Verringere Cooldown-Zeit if (mothershipCooldownRemaining > 0) { mothershipCooldownRemaining = mothershipCooldownRemaining - gameTime.ElapsedGameTime.TotalMilliseconds; } // Kein Cooldown muss abgewartet werden und es wurden noch nicht alle potenziellen Mutterschiffe berechnet if ((mothershipCooldownRemaining <= 0) && (mothershipWaveCounter <= WaveCounter)) { // Kein abgelaufener Mutterschiff-Cooldown; berechne ob und wann das nächste Mutterschiff auftaucht if (!mothershipCooldownActive) { mothershipsPerWaveRemaining--; // Mutterschiff wird erscheinen; Cooldown wird gesetzt if (random.Next(101) <= mothershipProbability) { mothershipCooldownRemaining = mothershipCooldownMinimum + random.Next(mothershipCooldownMaximum - mothershipCooldownMinimum + 1); mothershipCooldownActive = true; } // Kein Mutterschiff wird erscheinen; sofern alle Mutterschiffe dieser Welle berechnet wurden, wird der Mutterschiff-Wellenzähler erhöht else { if (mothershipsPerWaveRemaining <= 0) { mothershipWaveCounter++; mothershipsPerWaveRemaining = mothershipsPerWave; } } } // Abgelaufener Mutterschiff-Cooldown; erzeuge Mutterschiff else { Vector2[] formation = { GameItemConstants.MothershipPosition }; WaveGenerator.CreateWave(BehaviourEnum.MothershipMovement, formation, DifficultyLevel.EasyDifficulty); mothershipCooldownActive = false; // Sofern alle Mutterschiffe dieser Welle berechnet wurden, wird der Mutterschiff-Wellenzähler erhöht if (mothershipsPerWaveRemaining <= 0) { mothershipWaveCounter++; mothershipsPerWaveRemaining = mothershipsPerWave; } } } }
/// <summary> /// Erzeugt eine neue Welle, d.h. eine Liste von Aliens, die durch einen Controller gesteuert werden. /// Die Abfolge der Wellen ist hier anhand des WaveCounters festgelegt. /// </summary> /// <param name="gameTime">Spielzeit</param> public LinkedList <IGameItem> NextWave(GameTime gameTime) { LinkedList <IGameItem> wave = null; if (WaveCounter == 0) { wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.SkullFormation, DifficultyLevel.EasyDifficulty); } else if (WaveCounter == 1) { wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.BlockFormation, DifficultyLevel.EasyDifficulty); } else if (WaveCounter == 2) { wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.ArrowFormation, DifficultyLevel.EasyDifficulty); } else if (WaveCounter == 3) { wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.InfinityFormation, DifficultyLevel.MediumDifficulty); } else if (WaveCounter == 4) { wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.TriangleFormation, DifficultyLevel.MediumDifficulty); } else if (WaveCounter == 5) { wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.CircleFormation, DifficultyLevel.MediumDifficulty); } else if (WaveCounter == 6) { wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.SkullFormation, DifficultyLevel.HardDifficulty); } else if (WaveCounter == 7) { wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.BlockFormation, DifficultyLevel.HardDifficulty); } else if (WaveCounter == 8) { wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, FormationGenerator.ArrowFormation, DifficultyLevel.HardDifficulty); } else { int rnd = random.Next(6); Vector2[] formation; if (rnd == 0) { formation = FormationGenerator.SkullFormation; } else if (rnd == 1) { formation = FormationGenerator.BlockFormation; } else if (rnd == 2) { formation = FormationGenerator.CircleFormation; } else if (rnd == 3) { formation = FormationGenerator.TriangleFormation; } else if (rnd == 4) { formation = FormationGenerator.ArrowFormation; } else { formation = FormationGenerator.InfinityFormation; } wave = WaveGenerator.CreateWave(BehaviourEnum.BlockMovement, formation, DifficultyLevel.HardDifficulty); } WaveCounter++; return(wave); }