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