/// <summary> /// In dieser Methode werden alle Werte aktualisiert, die nicht durch einen Controller beeinflusst werden können. /// </summary> /// <param name="gameTime">Spielzeit</param> public override void Update(GameTime gameTime) { // Update den Unerwundbarkeits-Timer wenn nötig if (IsInvincible) { invincibleTime -= (float)gameTime.ElapsedGameTime.TotalSeconds; } // Update alle aktiven PowerUps foreach (ActivePowerUp powerUp in ActivePowerUps) { powerUp.Update(gameTime); } // Werfe alle abgelaufenen PowerUps aus der Liste und führe dabei das Remove-Delegate aus ActivePowerUps.RemoveAll(delegate(ActivePowerUp powerUp) { bool timeOver = (powerUp.TimeLeft <= 0.0f); if (timeOver) { if (powerUp.Remove != null) { powerUp.Remove(this); } } return(timeOver); }); }
/// <summary> /// Fügt der Liste der aktiven PowerUps ein neues PowerUp hinzu. Dabei wird das <c>Apply</c>-Delegate des übegebenen <c>ActivePowerUp</c>s ausgelöst. /// </summary> /// <remarks> /// Wenn bereits ein gleiches <c>ActivePowerUp</c> in der Liste ist, wird dieses gelöscht ohne das <c>Remove-</c>Delegate auszulösen. /// Für weitere Informationen sollten unbedingt die Hinweise zur PowerUps-Liste <c>ActivePowerUps</c> beachtet werden. /// </remarks> /// <param name="powerUp">Das neue PowerUp</param> public void AddPowerUp(ActivePowerUp powerUp) { // Wenn ein gleiches PowerUp in der Liste ist, wird dieses gelöscht PowerUpEnum newType = powerUp.Type; ActivePowerUps.RemoveAll(delegate(ActivePowerUp p) { return(p.Type == newType); }); // Wenn das PowerUp ein Waffen-PowerUp ist, dann müssen alle anderen Waffen-PowerUps // aus der Liste entfernt werden, damit immer nur ein Waffen-PowerUp aktiv ist. if ((powerUp.Type == PowerUpEnum.MultiShot) || (powerUp.Type == PowerUpEnum.PiercingShot) || (powerUp.Type == PowerUpEnum.Rapidfire)) { ActivePowerUps.RemoveAll(delegate(ActivePowerUp p) { if ((p.Type == PowerUpEnum.MultiShot) || (p.Type == PowerUpEnum.PiercingShot) || (p.Type == PowerUpEnum.Rapidfire)) { return(true); } else { return(false); } }); } // Das neue PowerUp wird hinzugefügt und dessen Apply-Delegate ausgeführt ActivePowerUps.Add(powerUp); if (powerUp.Apply != null) { powerUp.Apply(this); } }