예제 #1
0
        public override void Update(GameTime gametime)
        {
            if (Helper.CurrentGameStatus == GameStatus.PLAYING)
            {
                TilePlayer          player        = (TilePlayer)Game.Services.GetService(typeof(TilePlayer));
                TilePlayerTurret    playerTurret  = (TilePlayerTurret)Game.Services.GetService(typeof(TilePlayerTurret));
                List <SentryTurret> sentryTurrets = (List <SentryTurret>)Game.Services.GetService(typeof(List <SentryTurret>));

                if (player != null && playerTurret != null)
                {
                    if (State == PowerUpStatus.Deactivated && CollisionDetect(player))
                    {
                        Activate();
                    }

                    if (State == PowerUpStatus.Activated || State == PowerUpStatus.ExecuteOnce)
                    {
                        Duration += (float)gametime.ElapsedGameTime.TotalSeconds;

                        if (State != PowerUpStatus.ExecuteOnce)
                        {
                            Affect(player, playerTurret, sentryTurrets);
                        }

                        if (Duration >= MaxLifeTime)
                        {
                            State = PowerUpStatus.Depleted;
                            Deactivate(player, playerTurret, sentryTurrets);
                        }
                    }
                }

                base.Update(gametime);
            }
        }
예제 #2
0
        /// <summary>
        /// Runs when a character collides with a powerUp
        /// </summary>
        public bool OnCollision(Fixture powerUpGeom, Fixture character, Contact contant)
        {
            if (character.CollisionCategories == Category.Cat11)
            {
                //Gets the powerupstatus from geomData
                PowerUpStatus powerUpStatus = (PowerUpStatus)powerUpGeom.Body.UserData;
                waitingPowerUps.Remove(powerUpStatus);

                //Gets the charactercontroller
                CharacterController player = (CharacterController)character.Body.UserData;
                player.AddPowerUp(powerUpStatus.PowerUp);

                //Setup the powerupstatus for the player
                powerUpStatus.ElapsedTime = 0;
                powerUpStatus.Player      = player;

                //Removes the powerup from screen
                powerUpStatus.Image.DisposBoundBox();
                powerUpImg.RemovePosition(powerUpStatus.Image);

                //Sets the active powerup on the player, so it's removed by the update when time is up
                if (activePowerUps.ContainsKey(player.model.playerIndex))
                {
                    activePowerUps[player.model.playerIndex] = powerUpStatus;
                }
                else
                {
                    activePowerUps.Add(player.model.playerIndex, powerUpStatus);
                }

                return(false);
            }

            return(true);
        }
예제 #3
0
 public void Activate()
 {
     if (State == PowerUpStatus.Deactivated)
     {
         pickupSndInst.Play();
         State = PowerUpStatus.Activated;
     }
 }
예제 #4
0
 public void Activate()
 {
     if (State == PowerUpStatus.Deactivated)
     {
         Interlocked.Increment(ref Count);
         pickupSndInst.Play();
         OrbLight.Enabled = false;
         Frames.Clear();
         State = PowerUpStatus.Activated;
     }
 }
예제 #5
0
        public override void Update(GameTime gametime)
        {
            if (Helper.CurrentGameStatus == GameStatus.PLAYING)
            {
                OrbLight.Position = (CentrePos - Camera.CamPos);

                TilePlayer          player        = (TilePlayer)Game.Services.GetService(typeof(TilePlayer));
                TilePlayerTurret    playerTurret  = (TilePlayerTurret)Game.Services.GetService(typeof(TilePlayerTurret));
                List <SentryTurret> sentryTurrets = (List <SentryTurret>)Game.Services.GetService(typeof(List <SentryTurret>));

                if (player != null && playerTurret != null)
                {
                    if (State == PowerUpStatus.Deactivated && CollisionDetect(player))
                    {
                        Activate();
                    }

                    if (State == PowerUpStatus.Activated || State == PowerUpStatus.ExecuteOnce)
                    {
                        // Comment out to make effects last infinitely.
                        //Duration += (float)gametime.ElapsedGameTime.TotalSeconds;

                        attachToHUD = true;

                        if (State != PowerUpStatus.ExecuteOnce)
                        {
                            Affect(gametime, player, playerTurret, sentryTurrets);
                        }

                        if (Duration >= MaxLifeTime)
                        {
                            State = PowerUpStatus.Depleted;
                            Deactivate(player, playerTurret, sentryTurrets);
                        }
                    }

                    RunToPlayer(player);

                    // Cool Down Timer
                    if (State == PowerUpStatus.Depleted && coolDownTime <= MAX_COOLDOWN)
                    {
                        coolDownTime += (float)gametime.ElapsedGameTime.TotalSeconds;
                    }

                    UpdateHUD(gametime);
                }

                base.Update(gametime);
            }
        }
예제 #6
0
        private int defaultRadius;           // Player spotted radius.
        #endregion

        #region Constructors
        public PowerUp(Game game, Vector2 position, List <TileRef> sheetRefs,
                       int frameWidth, int frameHeight, float layerDepth,
                       float maxLifeTime, PowerUpType type, int amount, float multiplier,
                       SoundEffect pickupSnd)
            : base(game, position, sheetRefs, frameWidth, frameHeight, layerDepth)
        {
            Visible          = true;
            DrawOrder        = 100;
            this.Type        = type;
            this.MaxLifeTime = maxLifeTime;
            this.Factor      = multiplier;
            this.Amount      = amount;
            this.State       = PowerUpStatus.Deactivated;

            #region Get Default Values
            TilePlayer          player        = (TilePlayer)Game.Services.GetService(typeof(TilePlayer));
            TilePlayerTurret    playerTurret  = (TilePlayerTurret)Game.Services.GetService(typeof(TilePlayerTurret));
            List <SentryTurret> sentryTurrets = (List <SentryTurret>)Game.Services.GetService(typeof(List <SentryTurret>));

            if (player != null)
            {
                defaultMaxVelocity        = player.MaxVelocity;
                defaultPlayerAcceleration = player.Acceleration;
                defaultPlayerDeceleration = player.Deceleration;
            }

            foreach (SentryTurret turret in sentryTurrets)
            {
                if (turret != null)
                {
                    // Finds first enemy tank in list that's not NULL and takes those as default values.
                    defaultPlayerDamageRate = turret.Bullet.playerDamageRate;
                    defaultRadius           = turret.DetectRadius;
                    break;
                }
            }

            if (playerTurret != null)
            {
                defaultSentryDamageRate = playerTurret.Bullet.sentryDamageRate;
            }
            #endregion

            #region Handle Audio
            this.pickupSnd = pickupSnd;
            pickupSndInst  = this.pickupSnd.CreateInstance();
            #endregion
        }
예제 #7
0
        private void CheckCamoState(GameTime gameTime)
        {
            DisplayDurationBar(gameTime);

            if (InputEngine.IsKeyPressed(Keys.C) || InputEngine.IsButtonPressed(Buttons.X) &&
                State == PowerUpStatus.Depleted)
            {
                if (coolDownTime >= MAX_COOLDOWN)
                {
                    State        = PowerUpStatus.Activated;
                    Duration     = 0;
                    coolDownTime = 0;
                    camoSndInst.Play();
                }
            }
        }
예제 #8
0
        /// <summary>
        /// Adds new random powerup to the map insise the drop zone
        /// </summary>
        public void addPowerUpToMap()
        {
            ImageModel model = powerUpImg.AddPosition(randomDropPosition());

            model.SetBoundBox(World, 50, 50, Vector2.Zero, Category.Cat6, Category.All);
            model.BoundBox.OnCollision += OnCollision;
            powerUpImg.AnimateScale(model, 1f, 400, false);
            elapsedTime = 0;
            generateTimeToNext();

            PowerUpStatus status = new PowerUpStatus(randomPowerUp(), model);

            model.BoundBox.UserData = status;
            //model.CurrentFrame = (int)MathHelper.Clamp(status.PowerUp.imageFrame, 0f, 3f);
            waitingPowerUps.Add(status);
        }
예제 #9
0
        private void Affect(TilePlayer other, TilePlayerTurret otherTurret, List <SentryTurret> sentryTurrets)
        {
            switch (Type)
            {
            case PowerUpType.Heal:
                other.Health += Amount * (int)Factor;
                State         = PowerUpStatus.Depleted;
                break;

            case PowerUpType.DefenseBoost:
                foreach (SentryTurret turret in sentryTurrets)
                {
                    if (turret != null)
                    {
                        turret.Bullet.playerDamageRate /= (int)Factor;
                    }
                }
                State = PowerUpStatus.ExecuteOnce;
                break;

            case PowerUpType.SpeedBoost:
                // Accelerate slowly, gain more speed and stop your tracks faster!
                other.MaxVelocity *= Factor;
                //other.Acceleration = other.Acceleration * Factor;
                other.Deceleration *= Factor;
                State = PowerUpStatus.ExecuteOnce;
                break;

            case PowerUpType.ExtraDamage:
                otherTurret.Bullet.sentryDamageRate *= (int)Factor;
                State = PowerUpStatus.ExecuteOnce;
                break;

            case PowerUpType.Camouflage:
                foreach (SentryTurret turret in sentryTurrets)
                {
                    if (turret != null)
                    {
                        turret.DetectRadius = Amount * (int)Factor;
                    }
                }
                State = PowerUpStatus.ExecuteOnce;
                break;
            }
        }
예제 #10
0
        public override void Update(GameTime gameTime)
        {
            //if game is paused then no updates
            if (CurrentState != GameState.GamePause)
            {
                elapsedTime += gameTime.ElapsedGameTime.Milliseconds;
                if (elapsedTime / 1000 > random.Next(minNew, maxNew))
                {
                    addPowerUpToMap();
                }

                //Updates the powerups that havent been picked up yet
                //Removes the powerups that has layn ther to long
                int count = waitingPowerUps.Count();
                for (int i = 0; i < count; i++)
                {
                    PowerUpStatus p = waitingPowerUps[i];
                    p.ElapsedTime += gameTime.ElapsedGameTime.Milliseconds;
                    if (p.ElapsedTime / 1000 > waitMax)
                    {
                        waitingPowerUps.RemoveAt(i);
                        p.Image.DisposBoundBox();
                        powerUpImg.RemovePosition(p.Image);
                        count--;
                    }
                }

                //Updates the powerup that players has, remove then when time left if 0
                count = activePowerUps.Count();
                for (int i = 0; i < count; i++)
                {
                    var p = activePowerUps.ElementAt(i);
                    p.Value.ElapsedTime += gameTime.ElapsedGameTime.Milliseconds;
                    if (p.Value.ElapsedTime / 1000 > p.Value.PowerUp.duration)
                    {
                        p.Value.Player.RemovePowerUp(p.Value.PowerUp);
                        activePowerUps.Remove(p.Key);
                        count--;
                    }
                }
            }
        }
예제 #11
0
        private void Affect(GameTime gameTime, TilePlayer other, TilePlayerTurret otherTurret, List <SentryTurret> sentryTurrets)
        {
            switch (Type)
            {
            case PowerUpType.Heal:
                Frames.Add(new TileRef(13, 2, 0));
                other.Health += Amount * (int)Factor;
                State         = PowerUpStatus.Depleted;
                break;

            case PowerUpType.Regen:
                Frames.Add(new TileRef(13, 2, 0));
                //Duration = 0;
                RegenTimer += (float)gameTime.ElapsedGameTime.TotalSeconds;

                if (other.Health < 100 && other.Health > 0 && RegenTimer > 1)
                {
                    other.Health += Amount * (int)Factor;
                    RegenTimer    = 0;
                }
                break;

            case PowerUpType.DefenseBoost:
                Frames.Add(new TileRef(13, 1, 0));
                foreach (SentryTurret turret in sentryTurrets)
                {
                    if (turret != null)
                    {
                        turret.Bullet.playerDamageRate /= (int)Factor;
                    }
                }
                State = PowerUpStatus.ExecuteOnce;
                break;

            case PowerUpType.SpeedBoost:
                Frames.Add(new TileRef(13, 3, 0));
                other.MaxVelocity *= Factor;
                //other.Acceleration = other.Acceleration * Factor; // Immediately gain speed
                other.Deceleration *= Factor;
                other.turnSpeed    *= (Factor + (Factor / 2));
                State = PowerUpStatus.ExecuteOnce;
                break;

            case PowerUpType.ExtraDamage:
                Frames.Add(new TileRef(13, 0, 0));
                if (newRound != null)
                {
                    otherTurret.Bullet = newRound;
                }
                otherTurret.Bullet.sentryDamageRate *= (int)Factor;
                otherTurret.ShellSound = newRound.shellSoundAlt;
                State = PowerUpStatus.ExecuteOnce;
                break;

            case PowerUpType.Camouflage:
                Frames.Add(new TileRef(13, 4, 0));

                other.Alpha       = 0.5f;
                otherTurret.Alpha = 0.5f;

                foreach (SentryTurret turret in sentryTurrets)
                {
                    if (turret != null)
                    {
                        turret.DetectRadius = Amount * (int)Factor;
                    }
                }

                List <Sentry> otherTanks = (List <Sentry>)Game.Services.GetService(typeof(List <Sentry>));
                foreach (Sentry tank in otherTanks)
                {
                    if (tank != null)
                    {
                        tank.StayVisible = true;
                    }
                }

                State = PowerUpStatus.ExecuteOnce;
                break;
            }
        }
예제 #12
0
        private int defaultRadius;           // Player spotted radius.
        #endregion
        #endregion

        #region Constructors
        public PowerUp(Game game, Vector2 position, List <TileRef> sheetRefs,
                       int frameWidth, int frameHeight, float layerDepth,
                       float maxLifeTime, PowerUpType type, int amount, float multiplier,
                       SoundEffect pickupSnd, SoundEffect camoSnd, Ricochet newRound)
            : base(game, position, sheetRefs, frameWidth, frameHeight, layerDepth)
        {
            Visible           = true;
            DrawOrder         = 100;
            this.Type         = type;
            this.MaxLifeTime  = maxLifeTime;
            this.Factor       = multiplier;
            this.Amount       = amount;
            this.State        = PowerUpStatus.Deactivated;
            this.newRound     = newRound;
            BoundingRectangle = new Rectangle(
                PixelPosition.ToPoint(),
                new Point(FrameWidth / 8, FrameHeight / 8));

            #region Get Default Values
            TilePlayer          player        = (TilePlayer)Game.Services.GetService(typeof(TilePlayer));
            TilePlayerTurret    playerTurret  = (TilePlayerTurret)Game.Services.GetService(typeof(TilePlayerTurret));
            List <SentryTurret> sentryTurrets = (List <SentryTurret>)Game.Services.GetService(typeof(List <SentryTurret>));

            if (player != null)
            {
                defaultMaxVelocity        = player.MaxVelocity;
                defaultPlayerAcceleration = player.Acceleration;
                defaultPlayerDeceleration = player.Deceleration;
                defaultTurnSpeed          = player.turnSpeed;
            }

            foreach (SentryTurret turret in sentryTurrets)
            {
                if (turret != null)
                {
                    // Finds first enemy tank in list that's not NULL and takes those as default values.
                    defaultPlayerDamageRate = turret.Bullet.playerDamageRate;
                    defaultRadius           = turret.DetectRadius;
                    break;
                }
            }

            if (playerTurret != null)
            {
                defaultSentryDamageRate = playerTurret.Bullet.sentryDamageRate;
                defaultBullet           = playerTurret.Bullet;
                defaultShellSnd         = playerTurret.ShellSound;
            }
            #endregion

            #region Handle Audio
            this.pickupSnd = pickupSnd;
            pickupSndInst  = this.pickupSnd.CreateInstance();
            #endregion

            #region Setup OrbLight
            PenumbraComponent penumbra = Game.Services.GetService <PenumbraComponent>();
            penumbra.Lights.Add(OrbLight);

            switch (type)
            {
            case PowerUpType.Regen:
            case PowerUpType.Heal:
                OrbLight.Color = Color.LimeGreen;
                break;

            case PowerUpType.DefenseBoost:
                OrbLight.Color = Color.LightBlue;
                break;

            case PowerUpType.SpeedBoost:
                OrbLight.Color = Color.Orange;
                break;

            case PowerUpType.ExtraDamage:
                OrbLight.Color = Color.Red;
                break;

            case PowerUpType.Camouflage:
                OrbLight.Color = Color.Purple;
                break;

            default:
                OrbLight.Color = Color.White;
                break;
            }
            #endregion

            #region Setup Duration Bar
            if (Type == PowerUpType.Camouflage)
            {
                durationBar      = new HealthBar(game, CentrePos);
                durationBar.Name = Type.ToString();
                durationBar.txHealthBar.SetData(new[] { durationBarColor });
                AddHealthBar(durationBar);
                Health = (int)Duration;

                this.camoSnd       = camoSnd;
                camoSndInst        = this.camoSnd.CreateInstance();
                camoSndInst.Volume = 0.8f;
            }
            #endregion
        }