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 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 getInteractionEvents() { List 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; } }