mourning-ember / src / main / java / dev / llan / model / state / BaseGameState.java
BaseGameState.java
Raw
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");
  }
}