Better prompt messages for confirming optional triggers

This commit is contained in:
pfps
2017-01-20 20:19:31 +00:00
parent cc9e2caf2d
commit ab867a40ee
6 changed files with 28 additions and 14 deletions

View File

@@ -178,7 +178,9 @@ public class PlayerControllerAi extends PlayerController {
}
@Override
public boolean confirmTrigger(SpellAbility sa, Trigger regtrig, Map<String, String> triggerParams, boolean isMandatory) {
public boolean confirmTrigger(WrappedAbility wrapper, Map<String, String> triggerParams, boolean isMandatory) {
final SpellAbility sa = wrapper.getWrappedAbility();
final Trigger regtrig = wrapper.getTrigger();
if (sa.getHostCard().getName().equals("Deathmist Raptor")) {
return true;
}

View File

@@ -122,7 +122,7 @@ public abstract class PlayerController {
public abstract boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message);
public abstract boolean confirmBidAction(SpellAbility sa, PlayerActionConfirmMode bidlife, String string, int bid, Player winner);
public abstract boolean confirmStaticApplication(Card hostCard, GameEntity affected, String logic, String message);
public abstract boolean confirmTrigger(SpellAbility sa, Trigger regtrig, Map<String, String> triggerParams, boolean isMandatory);
public abstract boolean confirmTrigger(WrappedAbility sa, Map<String, String> triggerParams, boolean isMandatory);
public abstract Player chooseStartingPlayer(boolean isFirstGame);
public abstract CardCollection orderBlockers(Card attacker, CardCollection blockers);

View File

@@ -440,7 +440,7 @@ public class WrappedAbility extends Ability {
TriggerHandler th = game.getTriggerHandler();
if (decider != null && !decider.getController().confirmTrigger(sa, regtrig, triggerParams, this.isMandatory())) {
if (decider != null && !decider.getController().confirmTrigger(this, triggerParams, this.isMandatory())) {
return;
}

View File

@@ -208,7 +208,7 @@ public class PlayerControllerForTests extends PlayerController {
}
@Override
public boolean confirmTrigger(SpellAbility sa, Trigger regtrig, Map<String, String> triggerParams, boolean isMandatory) {
public boolean confirmTrigger(WrappedAbility wrapper, Map<String, String> triggerParams, boolean isMandatory) {
return true;
}

View File

@@ -19,6 +19,8 @@ package forge.match.input;
import forge.game.card.Card;
import forge.game.spellability.SpellAbility;
import forge.game.trigger.Trigger;
import forge.game.trigger.WrappedAbility;
import forge.model.FModel;
import forge.player.PlayerControllerHuman;
import forge.properties.ForgePreferences;
@@ -63,14 +65,21 @@ public class InputConfirm extends InputSyncronizedBase {
@Override
protected final void showMessage() {
getController().getGui().updateButtons(getOwner(), yesButtonText, noButtonText, true, true, defaultYes);
if ( FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) &&
(sa!=null) ) {
showMessage(sa.getStackDescription() + "\n" + message, sa.getView());
} else {
showMessage(message, (sa!=null)?sa.getView():null);
}
}
if ( FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) &&
(sa!=null) ) {
System.out.println("Triggera " + sa.isTrigger() + sa.isWrapper() + sa.getHostCard() + " :: " + sa.toString());
System.out.println("Triggerb " + sa + " :: " + sa.getStackDescription());
final StringBuilder sb = new StringBuilder();
sb.append(sa.getStackDescription()).append("\n").append(message);
showMessage(sb.toString(), sa.getView());
} else {
showMessage(message, (sa!=null)?sa.getView():null);
}
}
/** {@inheritDoc} */
@Override
protected final void onOk() {

View File

@@ -503,7 +503,9 @@ public class PlayerControllerHuman
}
@Override
public boolean confirmTrigger(final SpellAbility sa, final Trigger regtrig, final Map<String, String> triggerParams, final boolean isMandatory) {
public boolean confirmTrigger(final WrappedAbility wrapper, final Map<String, String> triggerParams, final boolean isMandatory) {
final SpellAbility sa = wrapper.getWrappedAbility();
final Trigger regtrig = wrapper.getTrigger();
if (getGui().shouldAlwaysAcceptTrigger(regtrig.getId())) {
return true;
}
@@ -518,7 +520,8 @@ public class PlayerControllerHuman
final StringBuilder buildQuestion = new StringBuilder("<b>Use triggered ability of ");
buildQuestion.append(regtrig.getHostCard().toString()).append("?</b>");
if (!FModel.getPreferences().getPrefBoolean(FPref.UI_COMPACT_PROMPT)) {
if (!FModel.getPreferences().getPrefBoolean(FPref.UI_COMPACT_PROMPT) &&
!FModel.getPreferences().getPrefBoolean(FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) ) {
//append trigger description unless prompt is compact
buildQuestion.append("\n(");
buildQuestion.append(triggerParams.get("TriggerDescription").replace("CARDNAME", regtrig.getHostCard().getName()));
@@ -537,7 +540,7 @@ public class PlayerControllerHuman
}
// pfps: trigger is on stack so do we really need to put it in the prompt area?
final InputConfirm inp = new InputConfirm(this, buildQuestion.toString(),sa);
final InputConfirm inp = new InputConfirm(this, buildQuestion.toString(), wrapper);
inp.showAndWait();
return inp.getResult();
}