package de.miaurizius.jgame2d.entity; import de.miaurizius.jgame2d.core.Boot; import de.miaurizius.jgame2d.core.enums.Direction; import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.Utility; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.IOException; import java.util.logging.Level; public class Entity { GamePanel panel; public int worldX, worldY; public int speed; public BufferedImage up1, up2, down1, down2, left1, left2, right1, right2; public Direction direction; public int spriteCounter = 0; public int spriteNum = 1; public Rectangle solidArea = new Rectangle(0, 0, 48, 48); public int solidAreaDefaultX, solidAreaDefaultY; public boolean collisionOn = false; public int actionLock = 0; String[] dialogue = new String[20]; int dialogueIndex = 0; // CHARACTER STATUS public int maxLife; public int life; public Entity(GamePanel panel) { this.panel = panel; } public void setAction() {} public void speak() { if(dialogue[dialogueIndex] == null) dialogueIndex = 0; panel.ui.currentDialogue = dialogue[dialogueIndex]; dialogueIndex++; switch(panel.player.direction) { case UP -> direction = Direction.DOWN; case DOWN -> direction = Direction.UP; case LEFT -> direction = Direction.RIGHT; case RIGHT -> direction = Direction.LEFT; } } public void update() { setAction(); collisionOn = false; panel.collisionH.checkTile(this); panel.collisionH.checkObject(this, false); panel.collisionH.checkPlayer(this); 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; spriteCounter = 0; } } public void draw(Graphics graphics2d) { int screenX = worldX - panel.player.worldX + panel.player.screenX; int screenY = worldY - panel.player.worldY + panel.player.screenY; if(worldX + panel.tileSize > panel.player.worldX - panel.player.screenX && worldX - panel.tileSize < panel.player.worldX + panel.player.screenX && worldY + panel.tileSize > panel.player.worldY - panel.player.screenY && worldY - panel.tileSize < panel.player.worldY + panel.player.screenY ) { graphics2d.drawImage(parseSprite(), screenX, screenY, panel.tileSize, panel.tileSize, null); } } BufferedImage parseSprite() { return 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; }; } BufferedImage initEntitySprites(String name) { try { return Utility.scaleImage(ImageIO.read(new FileInputStream("assets/" + name + ".png")), panel.tileSize, panel.tileSize); } catch (IOException e) { Boot.logger.log(Level.SEVERE, "Could not load entity-image", e); } return null; } }