src/main/java/fr/reminy/pokemon_discord/game/entity/Character.java
package fr.reminy.pokemon_discord.game.entity;
import fr.reminy.pokemon_discord.game.GameObject;
import fr.reminy.pokemon_discord.game.data.Direction;
import fr.reminy.pokemon_discord.game.map.event.Event;
import fr.reminy.pokemon_discord.game.data.Location;
import fr.reminy.pokemon_discord.game.map.tile.TileType;
import fr.reminy.pokemon_discord.game.img.SpriteSheet;
import java.awt.*;
import java.awt.image.BufferedImage;
import static fr.reminy.pokemon_discord.game.map.tile.CollisionType.AIR;
public class Character extends GameObject {
public final int OFFSET = 5;
private final SpriteSheet spriteSheet;
private Direction facingDirection = Direction.DOWN;
public Character(Location location, SpriteSheet spriteSheet) {
super(location);
this.spriteSheet = spriteSheet;
}
public SpriteSheet getSpriteSheet() {
return spriteSheet;
}
@Override
public Location getPosition() {
return (Location) super.getPosition();
}
public Location getLocation() {
return getPosition();
}
public boolean move(Direction direction) {
changeDirection(direction);
Location destination = getLocation().clone().add(direction.getOffset());
if (destination.getCollisionType() == AIR) {
getLocation().add(direction.getOffset());
TileType type = destination.getTileType();
if (type == TileType.TILE_12) {
getLocation().setH(2);
} else if (type == TileType.TILE_21) {
getLocation().setH(1);
}
Event e = getLocation().getEvent();
if (e != null)
e.executeOn(this);
return true;
} else {
return false;
}
}
public void changeDirection(Direction direction) {
facingDirection = direction;
}
@Override
public void draw(Graphics2D graphics2D) {
BufferedImage currentFrame = spriteSheet.getImage(0, facingDirection.ordinal());
graphics2D.drawImage(currentFrame, getAbsX(), getAbsY() - OFFSET, null);
}
public void teleportTo(Location destination) {
getLocation().getMap().removeCharacter(this);
getLocation().set(destination);
getLocation().getMap().addCharacter(this);
}
@Override
public void update() {
}
}