Refactor confirm for cleaner distinction

This commit is contained in:
tool4EvEr
2023-10-25 13:27:17 +02:00
parent 77a41240e1
commit 68391c30e2
7 changed files with 13 additions and 16 deletions

View File

@@ -1203,7 +1203,7 @@ public class AiController {
} }
public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) { public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params) {
if (mode == PlayerActionConfirmMode.AlternativeDamageAssignment || mode == PlayerActionConfirmMode.ChangeZoneToAltDestination) { if (mode == PlayerActionConfirmMode.ChangeZoneToAltDestination) {
System.err.printf("Overriding AI confirmAction decision for %s, defaulting to true.\n", mode); System.err.printf("Overriding AI confirmAction decision for %s, defaulting to true.\n", mode);
return true; return true;
} }
@@ -1232,7 +1232,7 @@ public class AiController {
return false; return false;
} }
public boolean confirmStaticApplication(Card hostCard, GameEntity affected, String logic, String message) { public boolean confirmStaticApplication(Card hostCard, String logic) {
return true; return true;
} }

View File

@@ -252,8 +252,8 @@ public class PlayerControllerAi extends PlayerController {
} }
@Override @Override
public boolean confirmStaticApplication(Card hostCard, GameEntity affected, String logic, String message) { public boolean confirmStaticApplication(Card hostCard, PlayerActionConfirmMode mode, String message, String logic) {
return getAi().confirmStaticApplication(hostCard, affected, logic, message); return getAi().confirmStaticApplication(hostCard, logic);
} }
@Override @Override

View File

@@ -785,15 +785,13 @@ public class Combat {
assigningPlayer = orderedBlockers.get(0).getController(); assigningPlayer = orderedBlockers.get(0).getController();
} }
final SpellAbility emptySA = new SpellAbility.EmptySa(ApiType.Cleanup, attacker);
boolean assignToPlayer = false; boolean assignToPlayer = false;
if (StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker, false)) { if (StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker, false)) {
assignToPlayer = true; assignToPlayer = true;
} }
if (!assignToPlayer && attacker.getGame().getCombat().isBlocked(attacker) if (!assignToPlayer && attacker.getGame().getCombat().isBlocked(attacker)
&& StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) { && StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) {
assignToPlayer = assigningPlayer.getController().confirmAction(emptySA, PlayerActionConfirmMode.AlternativeDamageAssignment, assignToPlayer = assigningPlayer.getController().confirmStaticApplication(attacker, PlayerActionConfirmMode.AlternativeDamageAssignment,
Localizer.getInstance().getMessage("lblAssignCombatDamageWerentBlocked", Localizer.getInstance().getMessage("lblAssignCombatDamageWerentBlocked",
CardTranslation.getTranslatedName(attacker.getName())), null); CardTranslation.getTranslatedName(attacker.getName())), null);
} }
@@ -805,7 +803,7 @@ public class Combat {
divideCombatDamageAsChoose = getDefendersCreatures().size() > 0 && divideCombatDamageAsChoose = getDefendersCreatures().size() > 0 &&
attacker.hasKeyword("You may assign CARDNAME's combat damage divided as you choose among " + attacker.hasKeyword("You may assign CARDNAME's combat damage divided as you choose among " +
"defending player and/or any number of creatures they control.") "defending player and/or any number of creatures they control.")
&& assigningPlayer.getController().confirmAction(emptySA, PlayerActionConfirmMode.AlternativeDamageAssignment, && assigningPlayer.getController().confirmStaticApplication(attacker, PlayerActionConfirmMode.AlternativeDamageAssignment,
Localizer.getInstance().getMessage("lblAssignCombatDamageAsChoose", Localizer.getInstance().getMessage("lblAssignCombatDamageAsChoose",
CardTranslation.getTranslatedName(attacker.getName())), null); CardTranslation.getTranslatedName(attacker.getName())), null);
if (defender instanceof Card && divideCombatDamageAsChoose) { if (defender instanceof Card && divideCombatDamageAsChoose) {
@@ -816,7 +814,7 @@ public class Combat {
getDefendersCreatures().size() > 0 && getDefendersCreatures().size() > 0 &&
attacker.hasKeyword("If CARDNAME is unblocked, you may have it assign its combat damage to " + attacker.hasKeyword("If CARDNAME is unblocked, you may have it assign its combat damage to " +
"a creature defending player controls.") && "a creature defending player controls.") &&
assigningPlayer.getController().confirmAction(emptySA, PlayerActionConfirmMode.AlternativeDamageAssignment, assigningPlayer.getController().confirmStaticApplication(attacker, PlayerActionConfirmMode.AlternativeDamageAssignment,
Localizer.getInstance().getMessage("lblAssignCombatDamageToCreature", Localizer.getInstance().getMessage("lblAssignCombatDamageToCreature",
CardTranslation.getTranslatedName(attacker.getName())), null); CardTranslation.getTranslatedName(attacker.getName())), null);
if (divideCombatDamageAsChoose) { if (divideCombatDamageAsChoose) {
@@ -849,6 +847,7 @@ public class Combat {
else if (orderedBlockers == null || orderedBlockers.isEmpty()) { else if (orderedBlockers == null || orderedBlockers.isEmpty()) {
attackers.remove(attacker); attackers.remove(attacker);
if (assignCombatDamageToCreature) { if (assignCombatDamageToCreature) {
final SpellAbility emptySA = new SpellAbility.EmptySa(ApiType.Cleanup, attacker);
Card chosen = attacker.getController().getController().chooseCardsForEffect(getDefendersCreatures(), Card chosen = attacker.getController().getController().chooseCardsForEffect(getDefendersCreatures(),
emptySA, Localizer.getInstance().getMessage("lblChooseCreature"), 1, 1, false, null).get(0); emptySA, Localizer.getInstance().getMessage("lblChooseCreature"), 1, 1, false, null).get(0);
damageMap.put(attacker, chosen, damageDealt); damageMap.put(attacker, chosen, damageDealt);

View File

@@ -133,7 +133,7 @@ public abstract class PlayerController {
public abstract boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params); public abstract boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map<String, Object> params);
public abstract boolean confirmBidAction(SpellAbility sa, PlayerActionConfirmMode bidlife, String string, int bid, Player winner); public abstract boolean confirmBidAction(SpellAbility sa, PlayerActionConfirmMode bidlife, String string, int bid, Player winner);
public abstract boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, GameEntity affected, String question); public abstract boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, GameEntity affected, String question);
public abstract boolean confirmStaticApplication(Card hostCard, GameEntity affected, String logic, String message); public abstract boolean confirmStaticApplication(Card hostCard, PlayerActionConfirmMode mode, String logic, String message);
public abstract boolean confirmTrigger(WrappedAbility sa); public abstract boolean confirmTrigger(WrappedAbility sa);
public abstract Player chooseStartingPlayer(boolean isFirstGame); public abstract Player chooseStartingPlayer(boolean isFirstGame);

View File

@@ -191,13 +191,12 @@ public class PlayerControllerForTests extends PlayerController {
} }
@Override @Override
public boolean confirmBidAction(SpellAbility sa, public boolean confirmBidAction(SpellAbility sa, PlayerActionConfirmMode bidlife, String string, int bid, Player winner) {
PlayerActionConfirmMode bidlife, String string, int bid, Player winner) {
return false; return false;
} }
@Override @Override
public boolean confirmStaticApplication(Card hostCard, GameEntity affected, String logic, String message) { public boolean confirmStaticApplication(Card hostCard, PlayerActionConfirmMode mode, String message, String logic) {
return true; return true;
} }

View File

@@ -99,7 +99,7 @@ public class HumanPlaySpellAbility {
ability = GameActionUtil.addExtraKeywordCost(ability); ability = GameActionUtil.addExtraKeywordCost(ability);
final boolean playerManaConversion = human.hasManaConversion() final boolean playerManaConversion = human.hasManaConversion()
&& human.getController().confirmAction(ability, null, "Do you want to spend mana as though it were mana of any type to pay the cost?", null); && human.getController().confirmStaticApplication(c, null, "Do you want to spend mana as though it were mana of any type to pay the cost?", null);
Cost abCost = ability.getPayCosts(); Cost abCost = ability.getPayCosts();
CostPayment payment = new CostPayment(abCost, ability); CostPayment payment = new CostPayment(abCost, ability);

View File

@@ -797,8 +797,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
} }
@Override @Override
public boolean confirmStaticApplication(final Card hostCard, final GameEntity affected, final String logic, public boolean confirmStaticApplication(final Card hostCard, PlayerActionConfirmMode mode, final String message, final String logic) {
final String message) {
return InputConfirm.confirm(this, CardView.get(hostCard), message); return InputConfirm.confirm(this, CardView.get(hostCard), message);
} }