mourning-ember / src / main / java / dev / llan / model / pieces / inanimates / TreasureChest.java
TreasureChest.java
Raw
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;
  }
}