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 selectCard(int index) { return List.of(); } @Override public List swapCards(int first, int second) { player.getCollection().swapCards(first, second); return List.of(new PlayerUpdatedEvent(PlayerUpdateType.CARDS)); } @Override public List removeCard(int index) { player.getCollection().removeCard(index); return List.of(new PlayerUpdatedEvent(PlayerUpdateType.CARDS)); } @Override public List equip(int index) { player.getInventory().equip(index); return List.of(new PlayerUpdatedEvent(PlayerUpdateType.INVENTORY)); } @Override public List swapEquipment(int first, int second) { player.getInventory().swapEquipment(first, second); return List.of(new PlayerUpdatedEvent(PlayerUpdateType.INVENTORY)); } @Override public List removeEquipment(int index) { player.getInventory().removeEquipment(index); return List.of(new PlayerUpdatedEvent(PlayerUpdateType.INVENTORY)); } @Override public List onSwapTo() { List 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; } }