Exemple #1
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }


            // TODO: Add your update logic here

            if (player.Health > 0)
            {
                player.Update(gameTime);
            }

            cam.LookAt(player.Position);

            foreach (Projectile proj in Projectile.projectiles)
            {
                proj.Update(gameTime);
                foreach (Enemy en in Enemy.enemies)
                {
                    int sum = proj.Radius + en.Radius;
                    if (Vector2.Distance(proj.Postition, en.Position) < sum)
                    {
                        proj.Collided = true;
                        en.Health--;
                    }
                }
                if (Obstacle.DidCollide(proj.Postition, proj.Radius))
                {
                    proj.Collided = true;
                }
            }
            foreach (Enemy en in Enemy.enemies)
            {
                en.Update(gameTime, player.Position);

                int sum = player.Radius + en.Radius;
                if (Vector2.Distance(player.Position, en.Position) < sum && player.HealthTimer <= 0)
                {
                    player.Health--;
                    player.HealthTimer = 1.5F;
                }
            }
            Projectile
            .projectiles
            .RemoveAll(p => p.Collided);

            Enemy
            .enemies
            .RemoveAll(e => e.Health <= 0);

            base.Update(gameTime);
        }
        public void Update(GameTime gameTime, Vector2 playerPos)
        {
            float dt = (float)gameTime.ElapsedGameTime.TotalSeconds;

            // this new Vector2D points to player position
            Vector2 moveDir = playerPos - position;

            /* sitas sutrumpina vektoriaus ilgi i vieneta.
             * this makes vector length equal to one. It does not matter how long Vector was.
             * So vector points to the same position, only his length will be equal to one.
             * It makes easier to work with.
             */
            moveDir.Normalize();

            Vector2 temPos = position;

            // at the end "* dt" protects from frame drops.
            temPos += moveDir * speed * dt;

            if (!Obstacle.DidCollide(temPos, radius))
            {
                position += moveDir * speed * dt;
            }
        }
        public void Update(GameTime gameTime)
        {
            KeyboardState kState = Keyboard.GetState();
            float         dt     = (float)gameTime.ElapsedGameTime.TotalSeconds;

            if (healthTimer > 0)
            {
                healthTimer -= dt;
            }

            /// <summary>
            /// this one liner is a better version of switch statement below.
            /// Because "directions" is enum, so basically
            /// it resolves to [0, 1, 2, 3]
            /// </summary>
            animSprite = animations[(int)direction];
            //switch (direction)
            //{
            //    case Dir.Down:
            //        animSprite = animations[0];
            //        break;
            //    case Dir.Up:
            //        animSprite = animations[1];
            //        break;
            //    case Dir.Left:
            //        animSprite = animations[2];
            //        break;
            //    case Dir.Right:
            //        animSprite = animations[3];
            //        break;
            //    default:
            //        break;
            //}

            // for stopping character to always moving
            if (isMoving)
            {
                animSprite.Update(gameTime);
            }
            else
            {
                animSprite.SetFrame(1);
            }

            #region Changing direction
            // every frame will be false and only if keys are down, it will be true
            isMoving = false;
            if (kState.IsKeyDown(Keys.Right))
            {
                direction = Dir.Right;
                isMoving  = true;
            }
            if (kState.IsKeyDown(Keys.Left))
            {
                direction = Dir.Left;
                isMoving  = true;
            }
            if (kState.IsKeyDown(Keys.Up))
            {
                direction = Dir.Up;
                isMoving  = true;
            }
            if (kState.IsKeyDown(Keys.Down))
            {
                direction = Dir.Down;
                isMoving  = true;
            }
            #endregion

            if (isMoving)
            {
                // holding current player position at this particular moment
                Vector2 tempPos = position;

                switch (direction)
                {
                case Dir.Right:
                    tempPos.X += speed * dt;
                    if (!Obstacle.DidCollide(tempPos, radius))
                    {
                        position.X += speed * dt;
                    }
                    break;

                case Dir.Left:
                    tempPos.X -= speed * dt;
                    if (!Obstacle.DidCollide(tempPos, radius))
                    {
                        position.X -= speed * dt;
                    }
                    break;

                case Dir.Up:
                    tempPos.Y -= speed * dt;
                    if (!Obstacle.DidCollide(tempPos, radius))
                    {
                        position.Y -= speed * dt;
                    }
                    break;

                case Dir.Down:
                    tempPos.Y += speed * dt;
                    if (!Obstacle.DidCollide(tempPos, radius))
                    {
                        position.Y += speed * dt;
                    }
                    break;

                default:
                    break;
                }
            }

            // this makes projectile shoot once only when Space key is pressed down
            if (kState.IsKeyDown(Keys.Space) && kStateOld.IsKeyUp(Keys.Space))
            {
                Projectile.projectiles.Add(new Projectile(position, direction));
            }

            kStateOld = kState;
        }
        //=============
        // ===UPDATE===
        //=============
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            // TODO: Add your update logic here
            if (player.Health > 0)
            {
                player.Update(gameTime);
            }

            // shooting projectiles
            foreach (Projectile proj in Projectile.projectiles)
            {
                proj.Update(gameTime);
            }
            // executing all enemies updates
            foreach (Enemy en in Enemy.enemies)
            {
                en.Update(gameTime, player.Position);
            }

            // checking for enemy collision with projectiles.
            // On collision destroying enemies and projectiles
            foreach (Projectile proj in Projectile.projectiles)
            {
                foreach (Enemy en in Enemy.enemies)
                {
                    int sum = proj.Radius + en.Radius;
                    if (Vector2.Distance(proj.Position, en.Position) < sum)
                    {
                        proj.Collided = true;
                        en.Health--;
                    }
                }

                if (Obstacle.DidCollide(proj.Position, proj.Radius))
                {
                    proj.Collided = true;
                }
            }

            // checking if enemies colliding with the player
            foreach (Enemy en in Enemy.enemies)
            {
                int sum = player.Radius + en.Radius;
                if (Vector2.Distance(player.Position, en.Position) < sum && player.HealthTimer <= 0)
                {
                    player.Health--;
                    player.HealthTimer = 1.5f;
                }
            }

            // actually destroying enemies and projectiles
            Projectile.projectiles.RemoveAll(p => p.Collided == true);
            Enemy.enemies.RemoveAll(e => e.Health <= 0);

            base.Update(gameTime);
        }// end of UPDATE