mourning-ember / src / main / java / dev / llan / model / cards / BaseCard.java
BaseCard.java
Raw
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();
    }
  }
}