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;
}
}