package de.miaurizius.jgame2d.entity; import de.miaurizius.jgame2d.core.Boot; import de.miaurizius.jgame2d.core.Direction; import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.KeyHandler; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.util.logging.Level; public class Player extends Entity { GamePanel panel; KeyHandler keyH; public final int screenX; public final int screenY; public int hasKey = 0; public Player(GamePanel panel, KeyHandler keyH) { this.panel = panel; this.keyH = keyH; screenX = panel.screenWidth/2 - panel.tileSize/2; screenY = panel.screenHeight/2 - panel.tileSize/2; solidArea = new Rectangle(); solidArea.x = 12; solidArea.y = 20; solidAreaDefaultX = solidArea.x; solidAreaDefaultY = solidArea.y; solidArea.width = 24; solidArea.height = 24; setDefaultValues(); getPlayerImage(); } public void setDefaultValues() { worldX = panel.tileSize * 23; worldY = panel.tileSize * 21; speed = 4; direction = Direction.DOWN; } public void getPlayerImage() { try { up1 = ImageIO.read(new FileInputStream("assets/player/boy_up_1.png")); up2 = ImageIO.read(new FileInputStream("assets/player/boy_up_2.png")); down1 = ImageIO.read(new FileInputStream("assets/player/boy_down_1.png")); down2 = ImageIO.read(new FileInputStream("assets/player/boy_down_2.png")); left1 = ImageIO.read(new FileInputStream("assets/player/boy_left_1.png")); left2 = ImageIO.read(new FileInputStream("assets/player/boy_left_2.png")); right1 = ImageIO.read(new FileInputStream("assets/player/boy_right_1.png")); right2 = ImageIO.read(new FileInputStream("assets/player/boy_right_2.png")); } catch (IOException e) { Boot.logger.log(Level.SEVERE, "Could not load image", e); } } public void update() { //Move player if(keyH.upPressed || keyH.downPressed || keyH.leftPressed || keyH.rightPressed) { if(keyH.upPressed) direction = Direction.UP; else if(keyH.downPressed) direction = Direction.DOWN; else if(keyH.leftPressed) direction = Direction.LEFT; else if(keyH.rightPressed) direction = Direction.RIGHT; // CHECK TILE COLLISION collisionOn = false; panel.collisionH.checkTile(this); int objIndex = panel.collisionH.checkObject(this, true); pickObject(objIndex); if(!collisionOn) { switch (direction) { case UP -> worldY -= speed; case DOWN -> worldY += speed; case LEFT ->worldX -= speed; case RIGHT -> worldX += speed; } } spriteCounter++; if(spriteCounter > 12) { if(spriteNum == 1) spriteNum = 2; else if(spriteNum == 2) spriteNum = 1; else spriteNum = 0; } } } public void pickObject(int index) { if(index == 999) return; switch(panel.obj[index].name.toLowerCase()) { case "key": panel.playSE(1); hasKey++; panel.obj[index] = null; panel.ui.showMessage("You got a key!"); break; case "door": if(hasKey > 0) { panel.playSE(3); panel.obj[index] = null; hasKey--; panel.ui.showMessage("You opened the door!"); } else panel.ui.showMessage("You need a key!"); break; case "boots": panel.playSE(2); speed += 1; panel.obj[index] = null; panel.ui.showMessage("Speed up!"); break; case "chest": panel.ui.gameFinished = true; panel.stopMusic(); panel.playSE(4); break; } } public void draw(Graphics2D graphics2d) { BufferedImage image = switch (direction) { case UP -> (spriteNum == 1) ? up1 : up2; case DOWN -> (spriteNum == 1) ? down1 : down2; case LEFT -> (spriteNum == 1) ? left1 : left2; case RIGHT -> (spriteNum == 1) ? right1 : right2; }; graphics2d.drawImage(image, screenX, screenY, panel.tileSize, panel.tileSize, null); } }