package dev.llan.model.cards; import dev.llan.model.cards.behaviors.CardBehavior; import java.util.Optional; public abstract class BaseCard implements Card { private final CardBehavior behavior; private final double cost; private final double weight; private Optional onPlayed; private boolean canPlay; public BaseCard(CardBehavior behavior, double cost, double weight) { this.behavior = behavior; this.behavior.setCard(this); this.cost = cost; this.weight = weight; canPlay = true; } @Override public CardBehavior getBehavior() { return behavior; } @Override public double getCost() { return cost; } @Override public double getWeight() { return weight; } @Override public double getRange() { return behavior.getRange(); } @Override public double getBasePower() { return behavior.getBasePower(); } @Override public void setCanPlay(boolean canPlay) { this.canPlay = canPlay; } @Override public boolean canPlay() { return canPlay; } @Override public void clearOnPlayed() { onPlayed = Optional.empty(); } @Override public void setOnPlayed(Runnable callback) { onPlayed = Optional.of(callback); } @Override public void onPlayed() { if(onPlayed.isPresent()) { onPlayed.get().run(); } } }