Exemplo n.º 1
0
        /// <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);
            });
        }
Exemplo n.º 2
0
        /// <summary>
        /// Setzt den Spieler zurück, wenn er ein Leben verloren hat.
        /// </summary>
        public void Reset()
        {
            //PowerUpList leeren, dabei Remove ausführen
            foreach (ActivePowerUp powerUp in ActivePowerUps)
            {
                powerUp.Remove(this);
            }
            ActivePowerUps.Clear();

            //Spielerwerte zurücksetzen
            Hitpoints = GameItemConstants.PlayerHitpoints;
            Weapon    = GameItemConstants.PlayerWeapon;
            Velocity  = GameItemConstants.PlayerVelocity;
            Position  = GameItemConstants.PlayerPosition;

            // Spieler für kurze Zeit unverwundbar machen
            invincibleTime = GameItemConstants.PlayerInvincibleTime;
        }
Exemplo n.º 3
0
        /// <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);
            }
        }