Example #1
0
        //public void CheckForPlatformCollision(IEnumerable<IBoundable> platforms)
        //{
        //    Debug.WriteLine($"Checking collisions against {platforms.Count()} platforms");
        //    if (verticalState != VerticalMovementState.Jumping)
        //    {
        //        verticalState = VerticalMovementState.Falling;
        //        foreach (Platform platform in platforms)
        //        {
        //            if (Bounds.CollidesWith(platform.Bounds))
        //            {
        //                Position.Y = platform.Bounds.Y - 1;
        //                verticalState = VerticalMovementState.OnGround;
        //            }
        //        }
        //    }
        //}

        private void CheckForObjectCollision(GameTime gameTime, TilemapObject[] objects)
        {
            BoundingRectangle bounds;

            //check for platform object collision
            foreach (TilemapObject item in objects)
            {
                bounds = new BoundingRectangle(item.X, item.Y, item.Width, item.Height);
                if (item.Type == "Platform")
                {
                    if (verticalState != VerticalMovementState.Jumping)
                    {
                        if (Bounds.CollidesWith(bounds))
                        {
                            Position.Y = bounds.Y - 1;
                            if (Keyboard.GetState().IsKeyDown(Keys.Space))
                            {
                                verticalState = VerticalMovementState.Jumping;
                                jumpTimer     = new TimeSpan(0);
                            }
                        }
                        else
                        {
                            verticalState = VerticalMovementState.Falling;
                        }
                    }
                }
            }
        }
 private void CheckForJumpStart()
 {
     if (Input.GetKeyDown(KeyCode.W))
     {
         _rigidBody2D.AddForce(new Vector2(0.0f, Jump_Power));
         _verticalMovementState = VerticalMovementState.Rising;
         _animator.SetBool("Jumping", true);
     }
 }
 public void Initialize()
 {
     Position       = new Vector2(240, 500);
     state          = State.Idle;
     animationState = PlayerAnimState.Idle;
     verticalState  = VerticalMovementState.OnGround;
     Bounds.Width   = FRAME_WIDTH;
     Bounds.Height  = FRAME_HEIGHT;
 }
 private void HandleFalling()
 {
     if (_rigidBody2D.velocity.y >= 0.0f)
     {
         _verticalMovementState = VerticalMovementState.OnGround;
         _animator.SetBool("Falling", false);
         _animator.SetBool("Walking", _rigidBody2D.velocity.x != 0.0f);
     }
 }
Example #5
0
 public void Reset()
 {
     life           = 4;
     animationState = PlayerAnimState.Idle;
     verticalState  = VerticalMovementState.OnGround;
     spriteEffects  = SpriteEffects.None;
     color          = Color.White;
     Position       = new Vector2(200, 200);
 }
 public void Dead()
 {
     verticalState = VerticalMovementState.Dead;
     Position.Y   += 100 * PLAYER_SPEED;
     // TODO: This needs to be replaced with collision logic
     if (Position.Y > 1000)
     {
         Position.Y = 1000;
     }
 }
Example #7
0
 public void Reset()
 {
     life           = 4;
     animationState = PlayerAnimState.Idle;
     verticalState  = VerticalMovementState.OnGround;
     spriteEffects  = SpriteEffects.None;
     color          = Color.White;
     Position       = OriginalPosition;
     dead           = false;
 }
    private void CheckForJumpStart()
    {
        if (Input.GetKeyDown(KeyCode.W))
        {
            _rigidBody2D.AddForce(new Vector2(0.0f, 300.0f));
            _verticalMovementState = VerticalMovementState.Rising;
            _animator.SetBool("Jumping", true);

            SoundEffectManager.PlaySound("Jump");
        }
    }
Example #9
0
 public void CheckForPlatformCollision(IEnumerable <IBoundable> platforms)
 {
     if (verticalState != VerticalMovementState.Jumping)
     {
         verticalState = VerticalMovementState.Falling;
         foreach (Platform platform in platforms)
         {
             if (Bounds.CollidesWith(platform.Bounds))
             {
                 Position.Y    = platform.Bounds.Y - 1;
                 verticalState = VerticalMovementState.OnGround;
             }
         }
     }
 }
Example #10
0
 public void CheckForBlockCollision(IEnumerable <IBoundable> blocks)
 {
     foreach (Block block in blocks)
     {
         if ((block.Bounds.X < position.X + FRAME_WIDTH) && (position.X < (block.Bounds.X + block.Bounds.Width)) && (block.Bounds.Y < position.Y + FRAME_HEIGHT) && (position.Y < block.Bounds.Y + block.Bounds.Height))
         {
             position.Y    = block.Bounds.Y - FRAME_HEIGHT;
             verticalState = VerticalMovementState.OnGround;
         }
         else
         {
             verticalState = VerticalMovementState.Falling;
         }
     }
 }
Example #11
0
 public void CheckForPlatformCollision(IEnumerable <IBoundable> platforms)
 {
     Debug.WriteLine($"Checking collisions against {platforms.Count()} platforms");
     if (verticalState != VerticalMovementState.Jumping)
     {
         verticalState = VerticalMovementState.Falling;
         foreach (Platform platform in platforms)
         {
             if (Bounds.CollidesWith(platform.Bounds))
             {
                 Position.Y    = platform.Bounds.Y - 1;
                 verticalState = VerticalMovementState.OnGround;
             }
         }
     }
 }
Example #12
0
        public void Initialize()
        {
            // For testing purposes
            Position      = new Vector2(40, 450); // Start position could change with preference
            Health        = 200;                  // Could also change with preference
            direction     = Direction.Idle;
            verticalState = VerticalMovementState.OnGround;
            Bounds.Width  = FRAME_WIDTH;
            Bounds.Height = FRAME_HEIGHT;

            IsDead = false;
            IsHit  = false;

            flicker  = new InterpolationTimer(TimeSpan.FromSeconds(0.25), 0.0f, 1.0f);
            fade     = new InterpolationTimer(TimeSpan.FromSeconds(2), 1.0f, 0.0f);
            multiple = 1;

            Element = Element.None;
            elementalOrb.Initialize();
        }
Example #13
0
        /// <summary>
        /// checks and updates the player's vertical movement.
        /// NOTE: MEANT TO BE USED IN THE UPDATE METHOD ONLY.
        /// </summary>
        /// <param name="gameTime">the current game time.</param>
        /// <param name="keyboard">the state of the keyboard.</param>
        private void UpdateVertical(GameTime gameTime, KeyboardState keyboard)
        {
            switch (verticalState)
            {
            case VerticalMovementState.OnGround:
                Debug.WriteLine("OnGround");
                if (keyboard.IsKeyDown(Keys.Space))
                {
                    verticalState = VerticalMovementState.Jumping;
                    jumpTimer     = new TimeSpan(0);
                }
                break;

            case VerticalMovementState.Jumping:
                Debug.WriteLine("Jumping");
                jumpTimer += gameTime.ElapsedGameTime;
                // Simple jumping with platformer physics
                Position.Y -= (250 / (float)jumpTimer.TotalMilliseconds);
                if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                {
                    verticalState = VerticalMovementState.Falling;
                }
                break;

            case VerticalMovementState.Falling:
                Position.Y += PLAYER_SPEED;
                Debug.WriteLine("Falling");

                // TODO: This needs to be replaced with collision logic
                if (Position.Y >= 300)
                {
                    Position.Y = 299;
                }
                break;
            }
        }
    private void Start()
    {
        _starsCollected = 0;

        _facingRight = true;
        _verticalMovementState = VerticalMovementState.OnGround;
    }
        private void Reset()
        {
            _facingRight = (_transform.localScale.x > 0.0f);
            _verticalMovementState = VerticalMovementState.OnGround;

            _lockMovement = false;
            _isMoving = false;

            _activeGateType = GateType.None;
            _gateCenterX = 0.0f;
            _enteringGate = false;

            _activeTool = null;
        }
Example #16
0
        public void Update(GameTime gameTime)
        {
            var keyboard = Keyboard.GetState();

            if (Position.Y > 522)
            {
                dead = true;
                game.victory.AnnounceVictory();
            }

            if (Position.X < -game.offset.X)
            {
                Position.X = -game.offset.X + 12;
            }
            if (Position.X > game.graphics.PreferredBackBufferWidth - game.offset.X)
            {
                Position.X = game.graphics.PreferredBackBufferWidth - game.offset.X;
            }
            // Vertical movement
            switch (verticalState)
            {
            case VerticalMovementState.OnGround:
                if (keyboard.IsKeyDown(jump))
                {
                    verticalState = VerticalMovementState.Jumping;
                    jumpTimer     = new TimeSpan(0);
                }
                break;

            case VerticalMovementState.Jumping:
                jumpTimer += gameTime.ElapsedGameTime;
                // Simple jumping with platformer physics
                Position.Y -= (450 / (float)jumpTimer.TotalMilliseconds);
                if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                {
                    verticalState = VerticalMovementState.Falling;
                }
                break;

            case VerticalMovementState.Falling:
                Position.Y += speed;
                break;
            }


            // Horizontal movement
            if (keyboard.IsKeyDown(left))
            {
                if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                {
                    animationState = PlayerAnimState.JumpingLeft;
                }
                else
                {
                    animationState = PlayerAnimState.WalkingLeft;
                }
                Position.X -= speed;
            }
            else if (keyboard.IsKeyDown(right))
            {
                if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                {
                    animationState = PlayerAnimState.JumpingRight;
                }
                else
                {
                    animationState = PlayerAnimState.WalkingRight;
                }
                Position.X += speed;
            }
            else
            {
                animationState = PlayerAnimState.Idle;
            }

            // Apply animations
            switch (animationState)
            {
            case PlayerAnimState.Idle:
                currentFrame   = 0;
                animationTimer = new TimeSpan(0);
                break;

            case PlayerAnimState.JumpingLeft:
                spriteEffects = SpriteEffects.FlipHorizontally;
                currentFrame  = 7;
                break;

            case PlayerAnimState.JumpingRight:
                spriteEffects = SpriteEffects.None;
                currentFrame  = 7;
                break;

            case PlayerAnimState.WalkingLeft:
                animationTimer += gameTime.ElapsedGameTime;
                spriteEffects   = SpriteEffects.FlipHorizontally;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > FRAME_RATE * 2)
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;

            case PlayerAnimState.WalkingRight:
                animationTimer += gameTime.ElapsedGameTime;
                spriteEffects   = SpriteEffects.None;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > FRAME_RATE * 2)
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;
            }
        }
Example #17
0
        public void Update(GameTime gameTime)
        {
            //Movement
            KeyboardState keyboard = Keyboard.GetState();
            float         delta    = (float)gameTime.ElapsedGameTime.TotalSeconds;

            Bounds.X = Position.X;
            Bounds.Y = Position.Y;

            // So the player can't go backwards, would need to change as they
            // progress through the levels
            if (Position.X < 40)
            {
                Position.X = 40;
            }

            // Vertical movement
            switch (verticalState)
            {
            case VerticalMovementState.OnGround:
                if (keyboard.IsKeyDown(Keys.Up))
                {
                    verticalState = VerticalMovementState.Jumping;
                    jumpTimer     = new TimeSpan(0);
                }
                if (keyboard.IsKeyDown(Keys.Up) && oldState.IsKeyUp(Keys.Up))
                {
                    verticalState = VerticalMovementState.DoubleJump;
                    jumpTimer     = new TimeSpan(0);
                }
                break;

            case VerticalMovementState.Jumping:
                jumpTimer += gameTime.ElapsedGameTime;
                // Simple jumping and start fallings right after
                Position.Y -= (600 / (float)jumpTimer.TotalMilliseconds);
                if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                {
                    verticalState = VerticalMovementState.Falling;
                }
                break;

            case VerticalMovementState.DoubleJump:
                jumpTimer += gameTime.ElapsedGameTime;
                // Simple jumping and start fallings right after
                Position.Y -= (900 / (float)jumpTimer.TotalMilliseconds);
                if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                {
                    verticalState = VerticalMovementState.Falling;
                }
                break;

            case VerticalMovementState.Falling:
                Position.Y += delta * FALL_SPEED;
                // Come back to the ground
                if (Position.Y > 450)
                {
                    Position.Y    = 450;
                    verticalState = VerticalMovementState.OnGround;
                }
                break;
            }

            if (IsHit)
            {
                // for when the player collides with the enenmy
                Position.X -= 200 * delta;
                direction   = Direction.East;

                if (flicker.TimeElapsed.TotalSeconds >= 0.20)
                {
                    flicker.Stop();
                    flicker  = new InterpolationTimer(TimeSpan.FromSeconds(0.25), 0.0f, 1.0f);
                    IsHit    = false;
                    multiple = 1.0f;
                }
                else
                {
                    if (!flicker.IsRunning)
                    {
                        flicker.Start();
                    }

                    if (flicker.IsRunning)
                    {
                        flicker.Update(gameTime.ElapsedGameTime);
                    }

                    multiple = flicker.CurrentValue;
                }
            }

            if (IsDead)
            {
                if (fade.TimeElapsed.TotalSeconds >= 1.75)
                {
                    fade.Stop();
                    multiple = 0;
                }

                if (!fade.IsRunning && multiple != 0)
                {
                    fade.Start();
                }
                else if (multiple != 0)
                {
                    if (fade.IsRunning)
                    {
                        fade.Update(gameTime.ElapsedGameTime);
                    }

                    multiple = fade.CurrentValue;
                }
            }

            if (keyboard.IsKeyDown(Keys.Left))
            {
                if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                {
                    direction = Direction.West;
                }
                else
                {
                    direction = Direction.West;
                }
                Position.X -= delta * PLAYER_SPEED;
            }
            else if (keyboard.IsKeyDown(Keys.Right))
            {
                if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                {
                    direction = Direction.East;
                }
                else
                {
                    direction = Direction.East;
                }
                Position.X += delta * PLAYER_SPEED;
            }
            else
            {
                direction = Direction.Idle;
            }

            if (keyboard.IsKeyDown(Keys.K) && !oldState.IsKeyDown(Keys.K))
            {
                UpdateHealth(Health);
            }

            // Elemental Orb Activate and Update
            if (keyboard.IsKeyDown(Keys.Space) && !oldState.IsKeyDown(Keys.Space) && elementalOrb.State == ElementalOrb.ActiveState.Idle)
            {
                Vector2 orbVelocity = new Vector2(1, 0);
                switch (direction)
                {
                case Direction.East:
                    orbVelocity = new Vector2(1, 0);
                    break;

                case Direction.West:
                    orbVelocity = new Vector2(-1, 0);
                    break;

                case Direction.Idle:
                    orbVelocity = new Vector2(1, 0);
                    break;
                }

                elementalOrb.Attack(Position, orbVelocity, Element);
                SetDamage(game.GameState, Element);
            }
            elementalOrb.Update(gameTime);
            if (keyboard.IsKeyDown(Keys.LeftAlt) && !oldState.IsKeyDown(Keys.LeftAlt) && elementalOrb.State == ElementalOrb.ActiveState.Idle)
            {
                CycleElement();
            }
            oldState = keyboard;
        }
        private void HandleNormalVerticalMovement()
        {
            if ((_rigidBody2D.velocity.y < Fall_Velocity_Threshold) && (_verticalMovementState != VerticalMovementState.Falling)) { StartFalling(); }
            if (_rigidBody2D.velocity.y > Normal_Jump_Max_Vertical_Velocity)
            {
                _rigidBody2D.velocity = new Vector2(_rigidBody2D.velocity.x, Normal_Jump_Max_Vertical_Velocity);
            }

            switch (_verticalMovementState)
            {
                case VerticalMovementState.OnGround: CheckForJumpStart(); break;
                case VerticalMovementState.Falling: HandleFalling(); break;
            }

            if ((PickaxeHasGripped) && (_verticalMovementState == VerticalMovementState.Falling))
            {
                _rigidBody2D.velocity = new Vector2(_rigidBody2D.velocity.x, 0.0f);
                _rigidBody2D.gravityScale = 0.0f;
                _verticalMovementState = VerticalMovementState.OnGround;
                _animator.SetBool("Pickaxe", true);
            }
            else if ((_rigidBody2D.gravityScale != 1.0f) && ((!PickaxeHasGripped) || (_verticalMovementState == VerticalMovementState.Rising)))
            {
                _animator.SetBool("Pickaxe", false);
                _rigidBody2D.gravityScale = 1.0f;
            }

            if (_verticalMovementState != VerticalMovementState.OnGround) { _isMoving = true; }
        }
Example #19
0
        /// <summary>
        /// Update the sprite, moving and animating it
        /// </summary>
        /// <param name="gameTime">The GameTime object</param>
        public void Update(GameTime gameTime)
        {
            KeyboardState keyboard = Keyboard.GetState();
            float         delta    = (float)gameTime.ElapsedGameTime.TotalSeconds;


            // Vertical movement
            switch (verticalState)
            {
            case VerticalMovementState.OnGround:
                if (keyboard.IsKeyDown(Keys.Space))
                {
                    verticalState = VerticalMovementState.Jumping;
                    jumpTimer     = new TimeSpan(0);
                }
                break;

            case VerticalMovementState.Jumping:
                jumpTimer += gameTime.ElapsedGameTime;
                // Simple jumping with platformer physics
                position.Y -= (350 / (float)jumpTimer.TotalMilliseconds);
                if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                {
                    verticalState = VerticalMovementState.Falling;
                }
                break;

            case VerticalMovementState.Falling:
                position.Y += speed;
                //collision logic
                if (position.Y > 351)
                {
                    position.Y    = 351;
                    verticalState = VerticalMovementState.OnGround;
                }
                break;
            }

            // Horizontal movement
            if (keyboard.IsKeyDown(Keys.Left))
            {
                state       = State.West;
                position.X -= delta * PLAYER_SPEED;
            }
            else if (keyboard.IsKeyDown(Keys.Right))
            {
                state       = State.East;
                position.X += delta * PLAYER_SPEED;
            }
            else
            {
                state = State.Idle;
            }

            // Update the player animation timer when the player is moving
            if (state != State.Idle)
            {
                timer += gameTime.ElapsedGameTime;
            }

            // Determine the frame should increase.  Using a while
            // loop will accomodate the possiblity the animation should
            // advance more than one frame.
            while (timer.TotalMilliseconds > ANIMATION_FRAME_RATE)
            {
                // increase by one frame
                frame++;
                // reduce the timer by one frame duration
                timer -= new TimeSpan(0, 0, 0, 0, ANIMATION_FRAME_RATE);
            }

            // Keep the frame within bounds (there are four frames)
            frame %= 4;

            //Will need to comment this out for project 4
            if (position.X < 0)
            {
                //position.X = game.GetWidth() - FRAME_WIDTH;
                position.X = 0;
            }
            if (position.X + FRAME_WIDTH >= 1390)
            {
                position.X = 1390 - FRAME_WIDTH;
            }

            //Ensures the player falls off the blocks
            if ((position.X > 170 && position.X < 550) && (position.Y + FRAME_HEIGHT <= 300))
            {
                verticalState = VerticalMovementState.Falling;
            }
            if ((position.X > 720 && position.X < 995) && (position.Y + FRAME_HEIGHT <= 300))
            {
                verticalState = VerticalMovementState.Falling;
            }
            if ((position.X < 995 && position.X > 1165) && (position.Y + FRAME_HEIGHT <= 300))
            {
                verticalState = VerticalMovementState.Falling;
            }
            if ((position.X > 1165) && (position.Y + FRAME_HEIGHT <= 300))
            {
                verticalState = VerticalMovementState.Falling;
            }
        }
 public void Hit()
 {
     verticalState = VerticalMovementState.Hit;
     jumpTimer     = TimeSpan.Zero;
     Position     -= new Vector2(-10, 70);
 }
Example #21
0
        /// <summary>
        /// Updates the player, applying movement and physics
        /// </summary>
        /// <param name="gameTime">The GameTime object</param>
        public void Update(GameTime gameTime)
        {
            var keyboard = Keyboard.GetState();

            if (gameState == 0)
            {
                // Vertical movement
                switch (verticalState)
                {
                case VerticalMovementState.OnGround:
                    if (keyboard.IsKeyDown(Keys.Space))
                    {
                        verticalState = VerticalMovementState.Jumping;
                        jumpTimer     = new TimeSpan(0);
                    }
                    break;

                case VerticalMovementState.Jumping:
                    jumpTimer += gameTime.ElapsedGameTime;
                    // Simple jumping with platformer physics
                    Position.Y -= (250 / (float)jumpTimer.TotalMilliseconds);
                    if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                    {
                        verticalState = VerticalMovementState.Falling;
                    }
                    if (playerBounce == 1)
                    {
                        jumpTimer    = new TimeSpan(0);
                        Position.Y  -= (250 / (float)jumpTimer.TotalMilliseconds);
                        playerBounce = 0;
                    }
                    if (Position.X - 16 < 0)
                    {
                        Position.X = 16;
                    }
                    if (Position.X + 20 > 1600)
                    {
                        Position.X = 1580;
                    }
                    break;

                case VerticalMovementState.Falling:
                    Position.Y += speed;
                    // TODO: This needs to be replaced with collision logic
                    if (Position.Y > 1000)
                    {
                        Position.Y = 1000;
                    }
                    if (Position.X - 16 < 0)
                    {
                        Position.X = 16;
                    }
                    if (Position.X + 20 > 1600)
                    {
                        Position.X = 1580;
                    }
                    break;
                }


                // Horizontal movement
                if (keyboard.IsKeyDown(Keys.Left))
                {
                    if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                    {
                        animationState = PlayerState.JumpingLeft;
                    }
                    else
                    {
                        animationState = PlayerState.WalkingLeft;
                    }
                    Position.X -= speed;
                    if (Position.X - 16 < 0)
                    {
                        Position.X = 16;
                    }
                }
                else if (keyboard.IsKeyDown(Keys.Right))
                {
                    if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                    {
                        animationState = PlayerState.JumpingRight;
                    }
                    else
                    {
                        animationState = PlayerState.WalkingRight;
                    }
                    Position.X += speed;
                    if (Position.X - 16 < 0)
                    {
                        Position.X = 16;
                    }
                    if (Position.X + 20 > 1600)
                    {
                        Position.X = 1580;
                    }
                }
                else
                {
                    animationState = PlayerState.Idle;
                }
            }
            if (Position.X >= 1556 && Position.Y <= 349) //if player gets to the end of the level, they win!
            {
                gameState = 1;
                speed     = 0;
            }


            // Apply animations
            switch (animationState)
            {
            case PlayerState.Idle:
                currentFrame   = 0;
                animationTimer = new TimeSpan(0);
                break;

            case PlayerState.JumpingLeft:
                spriteEffects = SpriteEffects.FlipHorizontally;
                currentFrame  = 7;
                break;

            case PlayerState.JumpingRight:
                spriteEffects = SpriteEffects.None;
                currentFrame  = 7;
                break;

            case PlayerState.WalkingLeft:
                animationTimer += gameTime.ElapsedGameTime;
                spriteEffects   = SpriteEffects.FlipHorizontally;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > (FRAME_RATE * 2 - (FRAME_RATE * 0.05)))           //this slight adjustment fixes the issue of seeing a small blip of frame 11 pop up
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;

            case PlayerState.WalkingRight:
                animationTimer += gameTime.ElapsedGameTime;
                spriteEffects   = SpriteEffects.None;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > (FRAME_RATE * 2 - (FRAME_RATE * 0.05)))
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;
            }
        }
        public void Update(GameTime gameTime)
        {
            //Movement
            KeyboardState keyboard = Keyboard.GetState();
            float         delta    = (float)gameTime.ElapsedGameTime.TotalSeconds;

            Bounds.X = Position.X;
            Bounds.Y = Position.Y;

            if (Position.X < 250)
            {
                Position.X = 250;
            }

            // Vertical movement
            switch (verticalState)
            {
            case VerticalMovementState.OnGround:
                if (keyboard.IsKeyDown(Keys.Up))
                {
                    verticalState = VerticalMovementState.Jumping;
                    jumpTimer     = new TimeSpan(0);
                }
                break;

            case VerticalMovementState.Jumping:
                jumpTimer += gameTime.ElapsedGameTime;
                // Simple jumping with platformer physics
                Position.Y -= (600 / (float)jumpTimer.TotalMilliseconds);
                if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                {
                    verticalState = VerticalMovementState.Falling;
                }
                break;

            case VerticalMovementState.Falling:
                Position.Y += delta * PLAYER_SPEED;
                // TODO: This needs to be replaced with collision logic
                if (Position.Y > 500)
                {
                    Position.Y    = 500;
                    verticalState = VerticalMovementState.OnGround;
                }
                break;

            case VerticalMovementState.Hit:
                jumpTimer += gameTime.ElapsedGameTime;
                // Simple jumping with platformer physics
                Position.Y -= (350 / (float)jumpTimer.TotalMilliseconds);
                if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                {
                    verticalState = VerticalMovementState.Falling;
                }
                break;
            }

            if (verticalState == VerticalMovementState.Hit)
            {
                Position.X    -= 100 * delta;
                animationState = PlayerAnimState.JumpingLeft;
            }
            else if (keyboard.IsKeyDown(Keys.Left))
            {
                if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                {
                    animationState = PlayerAnimState.JumpingLeft;
                }
                else
                {
                    state          = State.West;
                    animationState = PlayerAnimState.WalkingLeft;
                }
                Position.X -= delta * PLAYER_SPEED;
            }
            else if (keyboard.IsKeyDown(Keys.Right))
            {
                if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                {
                    animationState = PlayerAnimState.JumpingRight;
                }
                else
                {
                    state          = State.East;
                    animationState = PlayerAnimState.WalkingRight;
                }
                Position.X += delta * PLAYER_SPEED;
            }
            else
            {
                state          = State.Idle;
                animationState = PlayerAnimState.Idle;
            }

            // Apply animations
            switch (animationState)
            {
            case PlayerAnimState.Idle:
                currentFrame   = 0;
                animationTimer = new TimeSpan(0);
                break;

            case PlayerAnimState.JumpingLeft:
                currentFrame = 7;
                break;

            case PlayerAnimState.JumpingRight:
                currentFrame = 7;
                break;

            case PlayerAnimState.WalkingLeft:
                animationTimer += gameTime.ElapsedGameTime;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > FRAME_RATE * 2)
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;

            case PlayerAnimState.WalkingRight:
                animationTimer += gameTime.ElapsedGameTime;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > FRAME_RATE * 2)
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;
            }

            // update animation timer when the player is moving
            if (animationState != PlayerAnimState.Idle)
            {
                animationTimer += gameTime.ElapsedGameTime;
            }

            // Check if animation should increase by more than one frame
            while (animationTimer.TotalMilliseconds > FRAME_RATE)
            {
                // increase frame
                frame++;
                // Decrease the timer by one frame duration
                animationTimer -= new TimeSpan(0, 0, 0, 0, FRAME_RATE);
            }

            frame   %= 4;
            oldState = keyboard;
        }
 protected virtual void CheckForJumpStart()
 {
     if ((!_lockMovement) && (Input.GetKeyDown(KeyCode.W)))
     {
         if (CurrentGame.GameData.ActiveTool == ToolType.SuperJump)
         {
             _rigidBody2D.AddForce(new Vector2(0.0f, Super_Jump_Power));
             CurrentGame.UseSuperJump();
         }
         else
         {
             _rigidBody2D.AddForce(new Vector2(0.0f, Jump_Power));
         }
         _verticalMovementState = VerticalMovementState.Rising;
         _animator.SetBool("Jumping", true);
     }
 }
 private void Start()
 {
     _verticalMovementState = VerticalMovementState.OnGround;
 }
Example #25
0
        /// <summary>
        /// Updates the player, applying movement and physics
        /// </summary>
        /// <param name="gameTime">The GameTime object</param>
        public void Update(GameTime gameTime)
        {
            var keyboard = Keyboard.GetState();

            if (gameState == 0)
            {
                // Vertical movement
                switch (verticalState)
                {
                case VerticalMovementState.OnGround:
                    if (keyboard.IsKeyDown(Keys.Space))
                    {
                        verticalState = VerticalMovementState.Jumping;
                        jumpTimer     = new TimeSpan(0);
                    }
                    break;

                case VerticalMovementState.Jumping:
                    jumpTimer += gameTime.ElapsedGameTime;
                    // Simple jumping with platformer physics
                    Position.Y -= (250 / (float)jumpTimer.TotalMilliseconds);
                    if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                    {
                        verticalState = VerticalMovementState.Falling;
                    }
                    if (playerBounce == 1)
                    {
                        jumpTimer    = new TimeSpan(0);
                        Position.Y  -= (250 / (float)jumpTimer.TotalMilliseconds);
                        playerBounce = 0;
                    }
                    if (Position.X - 16 < 0)
                    {
                        Position.X = 16;
                    }
                    if (Position.X + 20 > 2100)
                    {
                        Position.X = 2100;
                    }
                    break;

                case VerticalMovementState.Falling:
                    Position.Y += speed;
                    if (Position.X - 16 < 0)
                    {
                        Position.X = 16;
                    }
                    if (Position.X + 20 > 2100)
                    {
                        Position.X = 2100;
                    }

                    break;
                }

                // Horizontal movement
                if (keyboard.IsKeyDown(Keys.Left))
                {
                    if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                    {
                        animationState = PlayerState.JumpingLeft;
                    }
                    else
                    {
                        animationState = PlayerState.WalkingLeft;
                    }
                    Position.X -= speed;

                    /*
                     * if (Position.X - 16 < 0)
                     * {
                     *  Position.X = 16;
                     * }*/
                }
                else if (keyboard.IsKeyDown(Keys.Right))
                {
                    if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                    {
                        animationState = PlayerState.JumpingRight;
                    }
                    else
                    {
                        animationState = PlayerState.WalkingRight;
                    }
                    Position.X += speed;
                    if (Position.X - 16 < 0)
                    {
                        Position.X = 16;
                    }
                    if (Position.X + 20 > 2100)
                    {
                        Position.X = 2100;
                    }
                }
                else
                {
                    animationState = PlayerState.Idle;
                }
            }
            if (Position.X >= 2090 && Position.Y <= 1500) //if player gets to the end of the level, they win!
            {
                gameState = 1;
                speed     = 0;
            }
            if (Position.Y > 1870)
            {
                gameState = 3;
            }

            // Apply animations
            switch (animationState)
            {
            case PlayerState.Idle:
                currentFrame   = 0;
                animationTimer = new TimeSpan(0);
                break;

            case PlayerState.JumpingLeft:
                spriteEffects = SpriteEffects.FlipHorizontally;
                currentFrame  = 7;
                break;

            case PlayerState.JumpingRight:
                spriteEffects = SpriteEffects.None;
                currentFrame  = 7;
                break;

            case PlayerState.WalkingLeft:
                animationTimer += gameTime.ElapsedGameTime;
                spriteEffects   = SpriteEffects.FlipHorizontally;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > FRAME_RATE * 2)
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;

            case PlayerState.WalkingRight:
                animationTimer += gameTime.ElapsedGameTime;
                spriteEffects   = SpriteEffects.None;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > FRAME_RATE * 2)
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;
            }
        }
 private void StartFalling()
 {
     _verticalMovementState = VerticalMovementState.Falling;
     _animator.SetBool("Falling", true);
     _animator.SetBool("Jumping", false);
 }
        protected virtual void Reset()
        {
            _facingRight = (_transform.localScale.x > 0.0f);
            _verticalMovementState = VerticalMovementState.OnGround;
            _isMoving = false;

            _invincibilityEffect.SetActive(false);
            _animator.SetBool("Jetpack", false);
            _animator.SetBool("Extinguisher", false);
            _animator.SetBool("Walking", false);
            _animator.SetBool("Pickaxe", false);
            _rigidBody2D.gravityScale = 1.0f;
            _lockMovement = false;

            PickaxeHasGripped = false;

            CurrentGame.DeactivateTool();
        }
Example #28
0
        /// <summary>
        /// Updates the player, applying movement and physics
        /// </summary>
        /// <param name="gameTime">The GameTime object</param>
        public void Update(GameTime gameTime)
        {
            var keyboard = Keyboard.GetState();

            // Vertical movement
            switch (verticalState)
            {
            case VerticalMovementState.OnGround:
                if (keyboard.IsKeyDown(Keys.Space))
                {
                    verticalState = VerticalMovementState.Jumping;
                    jumpTimer     = new TimeSpan(0);
                }
                break;

            case VerticalMovementState.Jumping:
                jumpTimer += gameTime.ElapsedGameTime;
                // Simple jumping with platformer physics
                Position.Y -= (250 / (float)jumpTimer.TotalMilliseconds);
                if (jumpTimer.TotalMilliseconds >= JUMP_TIME)
                {
                    verticalState = VerticalMovementState.Falling;
                }
                break;

            case VerticalMovementState.Falling:
                Position.Y += speed;
                // TODO: This needs to be replaced with collision logic
                if (Position.Y > 500)
                {
                    Position.Y = 500;
                }
                break;
            }


            // Horizontal movement
            if (keyboard.IsKeyDown(Keys.Left))
            {
                if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                {
                    animationState = PlayerAnimState.JumpingLeft;
                }
                else
                {
                    animationState = PlayerAnimState.WalkingLeft;
                }
                Position.X -= speed;
            }
            else if (keyboard.IsKeyDown(Keys.Right))
            {
                if (verticalState == VerticalMovementState.Jumping || verticalState == VerticalMovementState.Falling)
                {
                    animationState = PlayerAnimState.JumpingRight;
                }
                else
                {
                    animationState = PlayerAnimState.WalkingRight;
                }
                Position.X += speed;
            }
            else
            {
                animationState = PlayerAnimState.Idle;
            }

            // Apply animations
            switch (animationState)
            {
            case PlayerAnimState.Idle:
                currentFrame   = 0;
                animationTimer = new TimeSpan(0);
                break;

            case PlayerAnimState.JumpingLeft:
                spriteEffects = SpriteEffects.FlipHorizontally;
                currentFrame  = 7;
                break;

            case PlayerAnimState.JumpingRight:
                spriteEffects = SpriteEffects.None;
                currentFrame  = 7;
                break;

            case PlayerAnimState.WalkingLeft:
                animationTimer += gameTime.ElapsedGameTime;
                spriteEffects   = SpriteEffects.FlipHorizontally;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > FRAME_RATE * 2)
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;

            case PlayerAnimState.WalkingRight:
                animationTimer += gameTime.ElapsedGameTime;
                spriteEffects   = SpriteEffects.None;
                // Walking frames are 9 & 10
                if (animationTimer.TotalMilliseconds > FRAME_RATE * 2)
                {
                    animationTimer = new TimeSpan(0);
                }
                currentFrame = (int)Math.Floor(animationTimer.TotalMilliseconds / FRAME_RATE) + 9;
                break;
            }
        }
Example #29
0
        public void Update(GameTime gameTime)
        {
            var keyboard = Keyboard.GetState();

            //walking left and right
            if (keyboard.IsKeyDown(Keys.Left))
            {
                if (jumping || falling)
                {
                    animationState = PlayerAnimState.JumpingLeft;
                }
                else
                {
                    animationState = PlayerAnimState.WalkingLeft;
                }
                Position.X -= playerSpeed;
            }
            else if (keyboard.IsKeyDown(Keys.Right))
            {
                if (jumping || falling)
                {
                    animationState = PlayerAnimState.JumpingRight;
                }
                else
                {
                    animationState = PlayerAnimState.WalkingRight;
                }
                Position.X += playerSpeed;
            }
            else
            {
                animationState = PlayerAnimState.Idle;
            }

            //jumping and falling
            if (jumping)
            {
                jumpTime += gameTime.ElapsedGameTime;
                // Simple jumping with platformer physics
                Position.Y -= (250 / (float)jumpTime.TotalMilliseconds);
                if (jumpTime.TotalMilliseconds >= JUMP_HEIGHT)
                {
                    jumping       = false;
                    falling       = true;
                    verticalState = VerticalMovementState.Falling;
                }
            }
            if (falling)
            {
                Position.Y += playerSpeed;
                // TODO: This needs to be replaced with collision logic
                if (Position.Y > 400)
                {
                    Position.Y    = 400;
                    falling       = false;
                    verticalState = VerticalMovementState.OnGround;
                }
            }

            if (!jumping && !falling && keyboard.IsKeyDown(Keys.Up))
            {
                jumping       = true;
                jumpTime      = new TimeSpan(0);
                verticalState = VerticalMovementState.Jumping;
                if (!soundHasPlayed)
                {
                    jumpSFX.Play();
                    soundHasPlayed = false;
                }
            }



            bounds.X = Position.X;
            bounds.Y = Position.Y;

            //frames may change depending on sprite sheet
            switch (animationState)
            {
            case PlayerAnimState.Idle:

                currentFrame = 0;
                animateTime  = new TimeSpan(0);

                break;

            case PlayerAnimState.JumpingLeft:
                spriteEffects = SpriteEffects.FlipHorizontally;
                currentFrame  = 3;
                break;

            case PlayerAnimState.JumpingRight:
                spriteEffects = SpriteEffects.None;
                currentFrame  = 3;
                break;

            case PlayerAnimState.WalkingLeft:
                animateTime  += gameTime.ElapsedGameTime;
                spriteEffects = SpriteEffects.FlipHorizontally;

                if (animateTime.TotalMilliseconds > FRAME * 2)
                {
                    animateTime = new TimeSpan(0);
                }
                currentFrame = (int)animateTime.TotalMilliseconds / FRAME + 2;
                break;

            case PlayerAnimState.WalkingRight:
                animateTime  += gameTime.ElapsedGameTime;
                spriteEffects = SpriteEffects.None;

                if (animateTime.TotalMilliseconds > FRAME * 2)
                {
                    animateTime = new TimeSpan(0);
                }
                currentFrame = (int)animateTime.TotalMilliseconds / FRAME + 2;
                break;
            }

            //staying in the screen
            if (bounds.X < 0)
            {
                bounds.X   = 0;
                Position.X = 0;
            }
            if (bounds.X > game.GraphicsDevice.Viewport.Width - bounds.Width)
            {
                bounds.X   = game.GraphicsDevice.Viewport.Width - bounds.Width;
                Position.X = game.GraphicsDevice.Viewport.Width - bounds.Width;
            }
            if (bounds.Y < 0)
            {
                bounds.Y   = 0;
                Position.Y = 0;
            }
            //if (bounds.Y > groundLevel)
            //{
            //    bounds.Y = groundLevel;
            //    Position.Y = groundLevel;
            //}
        }