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 = 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; } }