mourning-ember / src / main / java / dev / llan / model / state / Exploration.java
Exploration.java
Raw
package dev.llan.model.state;

import dev.llan.events.Events.*;
import dev.llan.events.GameEvent;
import dev.llan.events.PlayerUpdatedEvent;
import dev.llan.model.Game;
import dev.llan.model.pieces.attributes.stats.Stats;

import java.util.ArrayList;
import java.util.List;

public class Exploration extends BaseGameState {
  private static final int TURNS_EQUIVALENT = 10;

  public Exploration(Game game) {
    super(game);
  }

  @Override
  public List<GameEvent> selectCard(int index) {
    return List.of();
  }

  @Override
  public List<GameEvent> swapCards(int first, int second) {
    player.getCollection().swapCards(first, second);
    return List.of(new PlayerUpdatedEvent(PlayerUpdateType.CARDS));
  }

  @Override
  public List<GameEvent> removeCard(int index) {
    player.getCollection().removeCard(index);
    return List.of(new PlayerUpdatedEvent(PlayerUpdateType.CARDS));
  }

  @Override
  public List<GameEvent> equip(int index) {
    player.getInventory().equip(index);
    return List.of(new PlayerUpdatedEvent(PlayerUpdateType.INVENTORY));
  }

  @Override
  public List<GameEvent> swapEquipment(int first, int second) {
    player.getInventory().swapEquipment(first, second);
    return List.of(new PlayerUpdatedEvent(PlayerUpdateType.INVENTORY));
  }

  @Override
  public List<GameEvent> removeEquipment(int index) {
    player.getInventory().removeEquipment(index);
    return List.of(new PlayerUpdatedEvent(PlayerUpdateType.INVENTORY));
  }

  @Override
  public List<GameEvent> onSwapTo() {
    List<GameEvent> events = new ArrayList<>();
    events.addAll(gameMap.clearAllHighlightedTiles());
    player.getEffects().removeAll();
    Stats playerStats = player.getStats();
    double healthRatioDelta = TURNS_EQUIVALENT * playerStats.getHealthRegen() / playerStats.getMaxHealth();
    playerStats.changeHealthRatio(healthRatioDelta);

    double manaRatioDelta = TURNS_EQUIVALENT * playerStats.getManaRegen() / playerStats.getMaxMana();
    playerStats.changeManaRatio(manaRatioDelta);

    playerStats.setMovementRatio(1.0);

    events.add(new PlayerUpdatedEvent(PlayerUpdateType.ATTRIBUTES));
    return events;
  }

  @Override
  public State getState() {
    return State.EXPLORATION;
  }
}