90 lines
2.9 KiB
Java
90 lines
2.9 KiB
Java
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;
|
|
|
|
public Entity(GamePanel panel) {
|
|
this.panel = panel;
|
|
}
|
|
|
|
public void setAction() {}
|
|
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;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
}
|