141 lines
4.4 KiB
Java
141 lines
4.4 KiB
Java
package de.miaurizius.jgame2d.entity;
|
|
|
|
import de.miaurizius.jgame2d.core.*;
|
|
|
|
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() {
|
|
up1 = initPlayerImage("boy_up_1");
|
|
up2 = initPlayerImage("boy_up_2");
|
|
down1 = initPlayerImage("boy_down_1");
|
|
down2 = initPlayerImage("boy_down_2");
|
|
left1 = initPlayerImage("boy_left_1");
|
|
left2 = initPlayerImage(("boy_left_2"));
|
|
right1 = initPlayerImage(("boy_right_1"));
|
|
right2 = initPlayerImage(("boy_right_2"));
|
|
}
|
|
|
|
public BufferedImage initPlayerImage(String name) {
|
|
try {
|
|
return Utility.scaleImage(ImageIO.read(new FileInputStream("assets/player/" + name + ".png")), panel.tileSize, panel.tileSize);
|
|
} catch (IOException e) {
|
|
Boot.logger.log(Level.SEVERE, "Could not load player-image", e);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
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, null);
|
|
}
|
|
|
|
}
|