mourning-ember / src / main / java / dev / llan / controller / GameController.java
GameController.java
Raw
package dev.llan.controller;

import dev.llan.model.Game;
import dev.llan.model.Model;
import dev.llan.model.board.Point;
import dev.llan.model.board.Tile.TileType;
import dev.llan.model.board.Tile;
import dev.llan.model.cards.Card;
import dev.llan.model.state.State;
import dev.llan.model.state.combat.CombatManager.CombatPhase;

import java.util.Optional;

public class GameController implements Controller {
  private final Model model;

  private Game game;
  private Optional<Tile> lastClicked;
  private Optional<Card> selectedCard;

  public GameController(Model model) {
    this.model = model;
    lastClicked = Optional.empty();
    selectedCard = Optional.empty();
  }

  @Override
  public void newGame() {
    game = model.initGame();
    lastClicked = Optional.empty();
  }

  @Override
  public void tileClick(Tile tile) {
    if (selectedCard.isEmpty()) {
      if (tile.getType() == TileType.VACANT || tile.getType() == TileType.INTERACTABLE) {
        if (tile.isVisible()) {
          if (lastClicked.isPresent()) {
            Point lastPoint = lastClicked.get().getPosition();
            if (lastPoint.equals(tile.getPosition())) {
              model.moveActivePath();
              lastClicked = Optional.empty();
              return;
            }
          }

          model.tryMoveTo(tile.getPosition());
          lastClicked = Optional.of(tile);
        }
      }
    } else {
      if (model.isInRange(tile.getPosition()) && tile.getType() == TileType.OCCUPIED) {
        model.useCardOn(tile.getPosition());
        selectedCard = Optional.empty();
      }
    }
  }

  @Override
  public void equip(int index) {
    model.equip(index);
  }

  @Override
  public void swapEquipment(int first, int second) {
    model.swapEquipment(first, second);
  }

  @Override
  public void swapCard(int first, int second) {
    model.swapCards(first, second);
  }

  @Override
  public void cardClick(int index, Card card) {
    Optional<Card> selected = model.selectCard(index);
    selectedCard = selected;
  }

  @Override
  public void removeCard(int index) {
    model.removeCard(index);
  }

  @Override
  public void endTurn() {
    if (game.getState() == State.COMBAT) {
      selectedCard = Optional.empty();
      model.selectCard(-1);
      model.endTurn();
    }
  }

  @Override
  public void waitTurn() {
    if (game.getState() == State.COMBAT && game.getPhase() == CombatPhase.TURN) {
      selectedCard = Optional.empty();
      model.selectCard(-1);
      model.waitTurn();
    }
  }

  @Override
  public void removeEquipment(int index) {
    model.removeEquipment(index);
  }

  @Override
  public void cancelSelectedCard() {
    selectedCard = Optional.empty();
    model.selectCard(-1);
  }

  @Override
  public void setHighlighted(Point point, boolean highlighted) {
    model.setHighlighted(point, highlighted);
  }
}