package net.demilich.metastone.game.cards.costmodifier;
import net.demilich.metastone.game.cards.Card;
import net.demilich.metastone.game.entities.Entity;
import net.demilich.metastone.game.events.GameEvent;
import net.demilich.metastone.game.events.GameEventType;
import net.demilich.metastone.game.spells.desc.manamodifier.CardCostModifierArg;
import net.demilich.metastone.game.spells.desc.manamodifier.CardCostModifierDesc;
import net.demilich.metastone.game.spells.desc.trigger.EventTriggerDesc;
import net.demilich.metastone.game.spells.trigger.GameEventTrigger;
public class ToggleCostModifier extends CardCostModifier {
private GameEventTrigger toggleOnTrigger;
private GameEventTrigger toggleOffTrigger;
private boolean ready;
public ToggleCostModifier(CardCostModifierDesc desc) {
super(desc);
EventTriggerDesc triggerDesc = (EventTriggerDesc) desc.get(CardCostModifierArg.TOGGLE_ON_TRIGGER);
this.toggleOnTrigger = triggerDesc.create();
triggerDesc = (EventTriggerDesc) desc.get(CardCostModifierArg.TOGGLE_OFF_TRIGGER);
this.toggleOffTrigger = triggerDesc.create();
}
@Override
public boolean appliesTo(Card card) {
if (!ready) {
return false;
}
return super.appliesTo(card);
}
@Override
public CardCostModifier clone() {
ToggleCostModifier clone = (ToggleCostModifier) super.clone();
clone.toggleOnTrigger = toggleOnTrigger.clone();
clone.toggleOffTrigger = toggleOffTrigger.clone();
return clone;
}
@Override
public boolean interestedIn(GameEventType eventType) {
return eventType == toggleOnTrigger.interestedIn() || eventType == toggleOffTrigger.interestedIn();
}
@Override
public void onGameEvent(GameEvent event) {
Entity host = event.getGameContext().resolveSingleTarget(getHostReference());
if (toggleOnTrigger.interestedIn() == event.getEventType() && toggleOnTrigger.fires(event, host)) {
ready = true;
} else if (toggleOffTrigger.interestedIn() == event.getEventType() && toggleOffTrigger.fires(event, host)) {
ready = false;
}
}
@Override
public void setOwner(int playerIndex) {
super.setOwner(playerIndex);
toggleOnTrigger.setOwner(playerIndex);
toggleOffTrigger.setOwner(playerIndex);
}
}