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

import dev.llan.model.cards.Card;
import dev.llan.model.board.Grid;
import dev.llan.model.board.Point;
import dev.llan.model.pieces.Displays;
import dev.llan.model.pieces.attributes.modifiers.decorators.effect.PoisonAttackModifierDecorator;
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.MAX_HAND_CARDS;

public class Pestilence extends BaseEnemy {
  private static final String NAME = "Pestilence";
  private static final String RESOURCE_PATH = "/assets/entities/pestilence.png";
  private static final String[] NOTES = new String[] {
      "Attacks inflict +1 stack Poison (5)"
  };

  Pestilence(Point startingPos, Grid grid) {
    super(
        NAME,
        RESOURCE_PATH,
        startingPos,
        grid,
        new BaseStatsBuilder()
            .attack(12.0)
            .defense(10.0)
            .power(7.0)
            .resistance(14.0)
            .maxHealth(50.0)
            .scoutingRadius(13.0)
            .speed(5.0));
    collection.initCollection(Constants.getInitialDeck(this));
    this.modifiers.add(new PoisonAttackModifierDecorator(5));
  }

  private Pestilence(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.PESTILENCE_RAW;
  }

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

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

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