package net.demilich.metastone.game.spells.trigger; import net.demilich.metastone.game.cards.Card; import net.demilich.metastone.game.cards.CardType; import net.demilich.metastone.game.entities.Actor; import net.demilich.metastone.game.entities.Entity; import net.demilich.metastone.game.entities.EntityType; import net.demilich.metastone.game.events.DamageEvent; import net.demilich.metastone.game.events.GameEvent; import net.demilich.metastone.game.events.GameEventType; import net.demilich.metastone.game.spells.desc.trigger.EventTriggerArg; import net.demilich.metastone.game.spells.desc.trigger.EventTriggerDesc; public class DamageCausedTrigger extends GameEventTrigger { public DamageCausedTrigger(EventTriggerDesc desc) { super(desc); } @Override protected boolean fire(GameEvent event, Entity host) { DamageEvent damageEvent = (DamageEvent) event; EntityType sourceEntityType = (EntityType) desc.get(EventTriggerArg.SOURCE_ENTITY_TYPE); if (sourceEntityType != null && sourceEntityType != damageEvent.getSource().getEntityType()) { return false; } EntityType targetEntityType = (EntityType) desc.get(EventTriggerArg.TARGET_ENTITY_TYPE); if (targetEntityType != null && targetEntityType != damageEvent.getVictim().getEntityType()) { return false; } CardType cardType = (CardType) desc.get(EventTriggerArg.CARD_TYPE); if (cardType != null) { if (damageEvent.getSource() instanceof Card && !((Card) damageEvent.getSource()).getCardType().isCardType(cardType)) { return false; } else if (damageEvent.getSource() instanceof Actor && !((Actor) damageEvent.getSource()).getSourceCard().getCardType().isCardType(cardType)) { return false; } } return damageEvent.getDamage() > 0; } @Override public GameEventType interestedIn() { return GameEventType.DAMAGE; } }