Files
JGame2D/src/de/miaurizius/jgame2d/entity/Player.java
2025-11-28 14:56:10 +01:00

139 lines
4.6 KiB
Java

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);
}
}