mourning-ember / src / main / java / dev / llan / model / pieces / enemies / Golem.java
Golem.java
Raw
package dev.llan.model.pieces.enemies;

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.stats.BaseStatsBuilder;
import dev.llan.model.pieces.attributes.stats.Stats;
import javafx.scene.image.Image;

import java.util.Optional;
import java.util.Random;

import static dev.llan.model.cards.Constants.*;

public class Golem extends BaseEnemy {
  private static final String NAME = "Golem";
  private static final String RESOURCE_PATH = "/assets/entities/golem.png";

  Golem(Point startingPos, Grid grid) {
    super(
        NAME,
        RESOURCE_PATH,
        startingPos,
        grid,
        new BaseStatsBuilder()
            .attack(5.0)
            .defense(5.0)
            .power(3.0)
            .resistance(3.0)
            .maxHealth(20.0)
            .speed(2.5));

    collection.initCollection(Constants.getInitialDeck(this));
  }

  private Golem(Point position, Grid grid, Stats clonedStats) {
    super(NAME, RESOURCE_PATH, position, grid, clonedStats);
  }

  @Override
  protected Card selectCard() {
    int index = new Random().nextInt(0, MAX_HAND_CARDS);
    Optional<Card> card = collection.selectCard(index);
    if (card.isPresent()) {
      return card.get();
    }
    throw new RuntimeException("Error in collection logic resulting in null card");
  }

  @Override
  public Image getImage() {
    return Displays.GOLEM_RAW;
  }

  @Override
  public Image getIcon() {
    return Displays.GOLEM;
  }

  @Override
  public String[] getNotes() {
    return new String[0];
  }

  @Override
  public Enemy clone(Grid grid) {
    Golem clone =
        new Golem(
            this.getPosition().clone(),
            grid,
            new BaseStatsBuilder().copyAll(this.getStats()).buildClone());
    clone.cloneAttributes(this);
    return clone;
  }
}