package dev.llan.model.pieces.inanimates;
import dev.llan.model.Game;
import dev.llan.model.board.Grid;
import dev.llan.model.board.Point;
import dev.llan.model.cards.Card;
import dev.llan.model.pieces.Displays;
import dev.llan.model.pieces.attributes.inventory.equipment.Equipment;
import dev.llan.model.pieces.player.Player;
import dev.llan.events.Events.*;
import dev.llan.events.GameEvent;
import dev.llan.events.GridUpdatedEvent;
import dev.llan.events.PlayerUpdatedEvent;
import javafx.scene.image.Image;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class TreasureChest extends BaseTreasure {
private final Random random = new Random();
private final Game game;
public TreasureChest(Game game, Point position, Player player, Grid grid) {
super(position, player, grid);
this.game = game;
}
private TreasureChest(Point position, Player player, Grid grid) {
super(position, player, grid);
this.game = null;
}
@Override
public List<GameEvent> interact() {
this.collect();
game.addScore(10);
Card[] possibleCards = PossibleTreasures.getPossibleCards(player);
int cardIndex = random.nextInt(possibleCards.length);
playerCollection.addNewCard(possibleCards[cardIndex].clone(player));
Equipment[] possibleEquips = PossibleTreasures.getPossibleEquips();
int equipIndex = random.nextInt(possibleEquips.length);
playerInventory.addEquipment(possibleEquips[equipIndex].clone());
tile.removeInanimate();
game.removeInanimate(this);
return getInteractionEvents();
}
private List<GameEvent> getInteractionEvents() {
List<GameEvent> events = new ArrayList<>();
events.add(new PlayerUpdatedEvent(PlayerUpdateType.INVENTORY, PlayerUpdateType.CARDS));
events.add(new GridUpdatedEvent());
return events;
}
@Override
public Image getIcon() {
return Displays.TREASURE_CHEST;
}
@Override
public Inanimate clone(Grid grid, Player player) {
TreasureChest clone = new TreasureChest(this.position.clone(), player, grid);
if (this.getCollected()) {
clone.collect();
}
return clone;
}
}