package dev.llan.model.state;
import dev.llan.model.Game;
import dev.llan.model.board.GameMap;
import dev.llan.model.board.Point;
import dev.llan.model.board.pathfinding.Path;
import dev.llan.events.GameEvent;
import dev.llan.model.pieces.enemies.Enemy;
import dev.llan.model.pieces.player.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public abstract class BaseGameState implements GameState {
protected final GameMap gameMap;
protected final Player player;
protected final List<Enemy> enemies;
public BaseGameState(Game game) {
this.gameMap = game.getMap();
this.player = game.getPlayer();
this.enemies = game.getEnemies();
}
@Override
public List<GameEvent> tryMoveTo(Point position) {
Optional<Path> path = player.generateActivePath(position);
GameEvent event = player.setActivePath(path);
return List.of(event);
}
@Override
public List<GameEvent> moveActivePath() {
Optional<Path> path = player.getActivePath();
List<GameEvent> events = new ArrayList<>();
if (path.isPresent()) {
events.addAll(gameMap.moveEntity(player, path.get()));
}
return events;
}
@Override
public List<GameEvent> setHighlighted(Point point, boolean highlighted) {
return gameMap.setTileHighlight(point, highlighted);
}
@Override
public List<GameEvent> endTurn() {
throw new UnsupportedOperationException("Action not supported in current state");
}
@Override
public List<GameEvent> waitTurn() {
throw new UnsupportedOperationException("Action not supported in current state");
}
@Override
public List<GameEvent> selectCard(int cardIndex) {
throw new UnsupportedOperationException("Action not supported in current state");
}
@Override
public List<GameEvent> useCardOn(Point position) {
throw new UnsupportedOperationException("Action not supported in current state");
}
@Override
public List<GameEvent> swapCards(int first, int second) {
throw new UnsupportedOperationException("Action not supported in current state");
}
@Override
public List<GameEvent> removeCard(int index) {
throw new UnsupportedOperationException("Action not supported in current state");
}
@Override
public List<GameEvent> equip(int index) {
throw new UnsupportedOperationException("Action not supported in current state");
}
@Override
public List<GameEvent> swapEquipment(int first, int second) {
throw new UnsupportedOperationException("Action not supported in current state");
}
@Override
public List<GameEvent> removeEquipment(int index) {
throw new UnsupportedOperationException("Action not supported in current state");
}
}