mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
Evidence abilities - added improved card hint with available evidence to collect
This commit is contained in:
parent
e507627dae
commit
e7b8eecd64
4 changed files with 53 additions and 7 deletions
|
|
@ -47,14 +47,21 @@ public class CollectEvidenceCost extends CostImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canPay(Ability ability, Ability source, UUID controllerId, Game game) {
|
public boolean canPay(Ability ability, Ability source, UUID controllerId, Game game) {
|
||||||
|
return getAvailableEvidence(controllerId, game) >= amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getAvailableEvidence(UUID controllerId, Game game) {
|
||||||
Player player = game.getPlayer(controllerId);
|
Player player = game.getPlayer(controllerId);
|
||||||
return player != null && player
|
if (player == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return player
|
||||||
.getGraveyard()
|
.getGraveyard()
|
||||||
.getCards(game)
|
.getCards(game)
|
||||||
.stream()
|
.stream()
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.mapToInt(MageObject::getManaValue)
|
.mapToInt(MageObject::getManaValue)
|
||||||
.sum() >= amount;
|
.sum();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
package mage.abilities.hint.common;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.condition.common.CollectedEvidenceCondition;
|
||||||
|
import mage.abilities.costs.common.CollectEvidenceCost;
|
||||||
|
import mage.abilities.hint.ConditionHint;
|
||||||
|
import mage.game.Game;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JayDi85
|
||||||
|
*/
|
||||||
|
public class EvidenceHint extends ConditionHint {
|
||||||
|
|
||||||
|
private final int needAmount;
|
||||||
|
|
||||||
|
public EvidenceHint(int needAmount) {
|
||||||
|
super(CollectedEvidenceCondition.instance, "evidence was collected");
|
||||||
|
this.needAmount = needAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
private EvidenceHint(final EvidenceHint hint) {
|
||||||
|
super(hint);
|
||||||
|
this.needAmount = hint.needAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getText(Game game, Ability ability) {
|
||||||
|
return String.format("%s (need: %d, can collect: %d)",
|
||||||
|
super.getText(game, ability),
|
||||||
|
this.needAmount,
|
||||||
|
CollectEvidenceCost.getAvailableEvidence(ability.getControllerId(), game)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EvidenceHint copy() {
|
||||||
|
return new EvidenceHint(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,11 +3,9 @@ package mage.abilities.keyword;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.SpellAbility;
|
import mage.abilities.SpellAbility;
|
||||||
import mage.abilities.StaticAbility;
|
import mage.abilities.StaticAbility;
|
||||||
import mage.abilities.condition.common.CollectedEvidenceCondition;
|
|
||||||
import mage.abilities.costs.*;
|
import mage.abilities.costs.*;
|
||||||
import mage.abilities.costs.common.CollectEvidenceCost;
|
import mage.abilities.costs.common.CollectEvidenceCost;
|
||||||
import mage.abilities.hint.ConditionTrueHint;
|
import mage.abilities.hint.common.EvidenceHint;
|
||||||
import mage.abilities.hint.Hint;
|
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
|
|
@ -28,7 +26,7 @@ public class CollectEvidenceAbility extends StaticAbility implements OptionalAdd
|
||||||
|
|
||||||
protected OptionalAdditionalCost additionalCost;
|
protected OptionalAdditionalCost additionalCost;
|
||||||
|
|
||||||
private static final Hint hint = new ConditionTrueHint(CollectedEvidenceCondition.instance, "evidence was collected");
|
//private static final Hint hint = new ConditionHint(CollectedEvidenceCondition.instance, "evidence was collected");
|
||||||
|
|
||||||
public static OptionalAdditionalCost makeCost(int amount) {
|
public static OptionalAdditionalCost makeCost(int amount) {
|
||||||
OptionalAdditionalCost cost = new OptionalAdditionalCostImpl(
|
OptionalAdditionalCost cost = new OptionalAdditionalCostImpl(
|
||||||
|
|
@ -43,12 +41,13 @@ public class CollectEvidenceAbility extends StaticAbility implements OptionalAdd
|
||||||
public CollectEvidenceAbility(int amount) {
|
public CollectEvidenceAbility(int amount) {
|
||||||
this(amount, null);
|
this(amount, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CollectEvidenceAbility(int amount, String extraInfoText) {
|
public CollectEvidenceAbility(int amount, String extraInfoText) {
|
||||||
super(Zone.STACK, null);
|
super(Zone.STACK, null);
|
||||||
this.additionalCost = makeCost(amount);
|
this.additionalCost = makeCost(amount);
|
||||||
this.rule = additionalCost.getName() + ". " + (extraInfoText == null ? "" : extraInfoText + ". ") + additionalCost.getReminderText();
|
this.rule = additionalCost.getName() + ". " + (extraInfoText == null ? "" : extraInfoText + ". ") + additionalCost.getReminderText();
|
||||||
this.setRuleAtTheTop(true);
|
this.setRuleAtTheTop(true);
|
||||||
this.addHint(hint);
|
this.addHint(new EvidenceHint(amount));
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1241,6 +1241,7 @@ public final class CardUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
// restrict hints only for permanents, not cards
|
// restrict hints only for permanents, not cards
|
||||||
|
|
||||||
// total hints
|
// total hints
|
||||||
if (!abilityHints.isEmpty()) {
|
if (!abilityHints.isEmpty()) {
|
||||||
rules.add(HintUtils.HINT_START_MARK);
|
rules.add(HintUtils.HINT_START_MARK);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue