package net.demilich.metastone.game.actions; import java.util.function.Predicate; import net.demilich.metastone.game.GameContext; import net.demilich.metastone.game.Player; import net.demilich.metastone.game.cards.Card; import net.demilich.metastone.game.entities.Entity; import net.demilich.metastone.game.spells.desc.SpellDesc; import net.demilich.metastone.game.spells.desc.condition.Condition; import net.demilich.metastone.game.spells.desc.filter.EntityFilter; import net.demilich.metastone.game.targeting.EntityReference; import net.demilich.metastone.game.targeting.TargetSelection; public class DiscoverAction extends GameAction { private int groupIndex; public static DiscoverAction createDiscover(SpellDesc spell) { DiscoverAction discover = new DiscoverAction(spell); discover.setTargetRequirement(TargetSelection.NONE); return discover; } private final SpellDesc spell; private Condition condition; private Card card; private String name = ""; private String description = ""; protected DiscoverAction(SpellDesc spell) { this.spell = spell; setActionType(ActionType.DISCOVER); } public boolean canBeExecuted(GameContext context, Player player) { if (getCondition() == null) { return true; } return getCondition().isFulfilled(context, player, null, null); } @Override public final boolean canBeExecutedOn(GameContext context, Player player, Entity entity) { if (!super.canBeExecutedOn(context, player, entity)) { return false; } if (getSource().getId() == entity.getId()) { return false; } if (getEntityFilter() == null) { return true; } return getEntityFilter().matches(context, player, entity); } @Override public DiscoverAction clone() { DiscoverAction clone = DiscoverAction.createDiscover(getSpell().clone()); clone.setActionSuffix(getActionSuffix()); clone.setSource(getSource()); return clone; } @Override public void execute(GameContext context, int playerId) { EntityReference target = getSpell().hasPredefinedTarget() ? getSpell().getTarget() : getTargetKey(); context.getLogic().castSpell(playerId, getSpell(), getSource(), target, false); } public Card getCard() { return card; } private Condition getCondition() { return condition; } public String getDescription() { return description; } public EntityFilter getEntityFilter() { return spell.getEntityFilter(); } public int getGroupIndex() { return groupIndex; } public String getName() { return name; } @Override public String getPromptText() { return "[Discover]"; } public SpellDesc getSpell() { return spell; } @Override public boolean isSameActionGroup(GameAction anotherAction) { return false; } public void setCard(Card card) { this.card = card; } public void setCondition(Condition condition) { this.condition = condition; } public void setDescription(String description) { this.description = description; } public void setEntityFilter(Predicate<Entity> entityFilter) { // this.entityFilter = entityFilter; } public void setName(String name) { this.name = name; } @Override public String toString() { return String.format("[%s '%s' %s]", getActionType(), getSpell().getSpellClass().getSimpleName(), "Test"); } }