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 lastClicked; private Optional 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 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); } }