private void HandleMovement(World.World world) { // Keyboard input if (InputManager.KeyboardState.IsKeyDown(Keys.Right) && !InputManager.KeyboardState.IsKeyDown(Keys.Left)) { if (InputManager.LastKeyboardState.IsKeyUp(Keys.Right)) { Move(world); frameCounter = 0; } HorizontalIndicatedDirection = HorizontalPlayerDirection.Right; } if (InputManager.KeyboardState.IsKeyDown(Keys.Left) && !InputManager.KeyboardState.IsKeyDown(Keys.Right)) { if (InputManager.LastKeyboardState.IsKeyUp(Keys.Left)) { Move(world); frameCounter = 0; } HorizontalIndicatedDirection = HorizontalPlayerDirection.Left; } if (InputManager.KeyboardState.IsKeyDown(Keys.Up) && !InputManager.KeyboardState.IsKeyDown(Keys.Down)) { if (InputManager.LastKeyboardState.IsKeyUp(Keys.Up)) { Move(world); frameCounter = 0; } VerticalIndicatedDirection = VerticalPlayerDirection.Up; } if (InputManager.KeyboardState.IsKeyDown(Keys.Down) && !InputManager.KeyboardState.IsKeyDown(Keys.Up)) { if (InputManager.LastKeyboardState.IsKeyUp(Keys.Down)) { Move(world); frameCounter = 0; } VerticalIndicatedDirection = VerticalPlayerDirection.Down; } if (frameCounter == frameLimit) { Move(world); } }
private void Move(World.World world) { // Convert indicated direction state to movement, Right = Positive X, Down = Positive Y int xMove = HorizontalIndicatedDirection == HorizontalPlayerDirection.Left ? -1 : HorizontalIndicatedDirection == HorizontalPlayerDirection.Right ? 1 : 0; int yMove = VerticalIndicatedDirection == VerticalPlayerDirection.Down ? 1 : VerticalIndicatedDirection == VerticalPlayerDirection.Up ? -1 : 0; // Change rotational sprite based off of player movement // Right if (xMove == 1 && yMove == 0) { Image = SpriteAtlas.PlayerRight; } // Down Right else if (xMove == 1 && yMove == 1) { Image = SpriteAtlas.PlayerBottomRight; } // Down else if (xMove == 0 && yMove == 1) { Image = SpriteAtlas.PlayerDown; } // Down Left if (xMove == -1 && yMove == 1) { Image = SpriteAtlas.PlayerBottomLeft; } // Left else if (xMove == -1 && yMove == 0) { Image = SpriteAtlas.PlayerLeft; } // Up Left else if (xMove == -1 && yMove == -1) { Image = SpriteAtlas.PlayerTopLeft; } // Up else if (xMove == 0 && yMove == -1) { Image = SpriteAtlas.PlayerUp; } // Up Right else if (xMove == 1 && yMove == -1) { Image = SpriteAtlas.PlayerTopRight; } // Player Sliding Tile newTile = world.GetTile(ContainingTile.XPosition + xMove, ContainingTile.YPosition + yMove, false); if (newTile != null) { world.GetChunk(newTile.XPosition, newTile.YPosition).IsDirty = true; world.GetChunk(ContainingTile.XPosition, ContainingTile.YPosition).IsDirty = true; newTile.tileObjects.Add(this); ContainingTile.tileObjects.Remove(this); ContainingTile = newTile; } // Reset movement direction VerticalIndicatedDirection = VerticalPlayerDirection.None; HorizontalIndicatedDirection = HorizontalPlayerDirection.None; }