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<Runnable> 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();
}
}
}