|
| 1 | +package main.java.com.khomsi.game.entity; |
| 2 | + |
| 3 | +import main.java.com.khomsi.game.main.GamePanel; |
| 4 | +import main.java.com.khomsi.game.main.KeyHandler; |
| 5 | + |
| 6 | +import javax.imageio.ImageIO; |
| 7 | +import java.awt.*; |
| 8 | +import java.awt.image.BufferedImage; |
| 9 | +import java.io.IOException; |
| 10 | +import java.util.Objects; |
| 11 | + |
| 12 | +public class Player extends Entity { |
| 13 | + GamePanel gamePanel; |
| 14 | + KeyHandler keyHandler; |
| 15 | + |
| 16 | + public Player(GamePanel gamePanel, KeyHandler keyHandler) { |
| 17 | + this.gamePanel = gamePanel; |
| 18 | + this.keyHandler = keyHandler; |
| 19 | + setDefaultValues(); |
| 20 | + getPlayerImage(); |
| 21 | + } |
| 22 | + |
| 23 | + public void setDefaultValues() { |
| 24 | + x = 100; |
| 25 | + y = 100; |
| 26 | + speed = 3; |
| 27 | + direction = "down"; |
| 28 | + } |
| 29 | + |
| 30 | + public void getPlayerImage() { |
| 31 | + try { |
| 32 | + up = ImageIO.read(Objects.requireNonNull( |
| 33 | + getClass().getResourceAsStream("/player/boy_up.png"))); |
| 34 | + |
| 35 | + up1 = ImageIO.read(Objects.requireNonNull( |
| 36 | + getClass().getResourceAsStream("/player/boy_up_1.png"))); |
| 37 | + |
| 38 | + up2 = ImageIO.read(Objects.requireNonNull( |
| 39 | + getClass().getResourceAsStream("/player/boy_up_2.png"))); |
| 40 | + |
| 41 | + down = ImageIO.read(Objects.requireNonNull( |
| 42 | + getClass().getResourceAsStream("/player/boy_down.png"))); |
| 43 | + |
| 44 | + down1 = ImageIO.read(Objects.requireNonNull( |
| 45 | + getClass().getResourceAsStream("/player/boy_down_1.png"))); |
| 46 | + |
| 47 | + down2 = ImageIO.read(Objects.requireNonNull( |
| 48 | + getClass().getResourceAsStream("/player/boy_down_2.png"))); |
| 49 | + |
| 50 | + left = ImageIO.read(Objects.requireNonNull( |
| 51 | + getClass().getResourceAsStream("/player/boy_left.png"))); |
| 52 | + |
| 53 | + left1 = ImageIO.read(Objects.requireNonNull( |
| 54 | + getClass().getResourceAsStream("/player/boy_left_1.png"))); |
| 55 | + |
| 56 | + left2 = ImageIO.read(Objects.requireNonNull( |
| 57 | + getClass().getResourceAsStream("/player/boy_left_2.png"))); |
| 58 | + |
| 59 | + right = ImageIO.read(Objects.requireNonNull( |
| 60 | + getClass().getResourceAsStream("/player/boy_right.png"))); |
| 61 | + |
| 62 | + right1 = ImageIO.read(Objects.requireNonNull( |
| 63 | + getClass().getResourceAsStream("/player/boy_right_1.png"))); |
| 64 | + |
| 65 | + right2 = ImageIO.read(Objects.requireNonNull( |
| 66 | + getClass().getResourceAsStream("/player/boy_right_2.png"))); |
| 67 | + |
| 68 | + } catch (IOException e) { |
| 69 | + System.err.println("Error on getting player images!"); |
| 70 | + e.printStackTrace(); |
| 71 | + } |
| 72 | + } |
| 73 | + |
| 74 | + //This method updates player's coordinates |
| 75 | + public void update() { |
| 76 | + //to avoid moving the character without pressing buttons |
| 77 | + if (keyHandler.upPressed || keyHandler.downPressed || |
| 78 | + keyHandler.leftPressed || keyHandler.rightPressed) { |
| 79 | + |
| 80 | + //use else if to avoid diagonal movement, if it's not needed, use just if |
| 81 | + if (keyHandler.upPressed) { |
| 82 | + direction = "up"; |
| 83 | + y -= speed; |
| 84 | + } else if (keyHandler.downPressed) { |
| 85 | + direction = "down"; |
| 86 | + y += speed; |
| 87 | + } else if (keyHandler.leftPressed) { |
| 88 | + direction = "left"; |
| 89 | + x -= speed; |
| 90 | + } else if (keyHandler.rightPressed) { |
| 91 | + direction = "right"; |
| 92 | + x += speed; |
| 93 | + } |
| 94 | + |
| 95 | + //changing sprites, depends on nums |
| 96 | + spriteCounter++; |
| 97 | + if (spriteCounter <= 13 - speed) { |
| 98 | + spriteNum = 1; |
| 99 | + } |
| 100 | + if (spriteCounter > 13 && spriteCounter <= 24) { |
| 101 | + spriteNum = 2; |
| 102 | + } |
| 103 | + if (spriteCounter > 24) { |
| 104 | + spriteCounter = 0; |
| 105 | + } |
| 106 | + } else { |
| 107 | + standCounter++; |
| 108 | + if (standCounter == 24) { |
| 109 | + spriteNum = 3; // Idle sprite |
| 110 | + standCounter = 0; |
| 111 | + } |
| 112 | + } |
| 113 | + } |
| 114 | + |
| 115 | + public void draw(Graphics2D graphics2D) { |
| 116 | + |
| 117 | + BufferedImage image = null; |
| 118 | + switch (direction) { |
| 119 | + case "up" -> { |
| 120 | + if (spriteNum == 1) image = up1; |
| 121 | + if (spriteNum == 2) image = up2; |
| 122 | + if (spriteNum == 3) image = up; |
| 123 | + } |
| 124 | + case "down" -> { |
| 125 | + if (spriteNum == 1) image = down1; |
| 126 | + if (spriteNum == 2) image = down2; |
| 127 | + if (spriteNum == 3) image = down; |
| 128 | + } |
| 129 | + case "left" -> { |
| 130 | + if (spriteNum == 1) image = left1; |
| 131 | + if (spriteNum == 2) image = left2; |
| 132 | + if (spriteNum == 3) image = left; |
| 133 | + } |
| 134 | + case "right" -> { |
| 135 | + if (spriteNum == 1) image = right1; |
| 136 | + if (spriteNum == 2) image = right2; |
| 137 | + if (spriteNum == 3) image = right; |
| 138 | + } |
| 139 | + } |
| 140 | + graphics2D.drawImage(image, x, y, GamePanel.TILE_SIZE, GamePanel.TILE_SIZE, null); |
| 141 | + } |
| 142 | +} |
0 commit comments