GUI: introduced default card hints:

* refactor: added helper emblems instead rad counter's inherent emblems (use initGameDefaultHelperEmblems to define new card hints or other fake objects);
* refactor: added card hints support for emblems, planes and other command objects;
* GUI: added storm counter as default card hint (use hints tool to see it, closes #12360);
This commit is contained in:
Oleg Agafonov 2024-07-27 09:40:41 +04:00
parent 83823acec7
commit 521a0f6e32
36 changed files with 234 additions and 144 deletions

View file

@ -48,6 +48,7 @@ import mage.game.command.dungeons.UndercityDungeon;
import mage.game.command.emblems.EmblemOfCard;
import mage.game.command.emblems.RadiationEmblem;
import mage.game.command.emblems.TheRingEmblem;
import mage.game.command.emblems.XmageHelperEmblem;
import mage.game.events.*;
import mage.game.events.TableEvent.EventType;
import mage.game.mulligan.Mulligan;
@ -444,7 +445,7 @@ public abstract class GameImpl implements Game {
return designation;
}
}
for (Emblem emblem : state.getInherentEmblems()) {
for (Emblem emblem : state.getHelperEmblems()) {
if (emblem.getId().equals(objectId)) {
return emblem;
}
@ -1400,13 +1401,7 @@ public abstract class GameImpl implements Game {
}
}
// Rad counter mechanic for every player
for (UUID playerId : state.getPlayerList(startingPlayerId)) {
// This is not a real emblem. Just a fake source for the
// inherent trigger ability related to Rad counters
// Faking a source just to display something on the stack ability.
state.addInherentEmblem(new RadiationEmblem(), playerId);
}
initGameDefaultHelperEmblems();
}
public void initGameDefaultWatchers() {
@ -1447,6 +1442,22 @@ public abstract class GameImpl implements Game {
getState().addWatcher(bloodthirstWatcher);
}
public void initGameDefaultHelperEmblems() {
// Rad Counter's trigger source
for (UUID playerId : state.getPlayerList(startingPlayerId)) {
// This is not a real emblem. Just a fake source for the
// inherent trigger ability related to Rad counters
// Faking a source just to display something on the stack ability.
state.addHelperEmblem(new RadiationEmblem(), playerId);
}
// global card hints for better UX
for (UUID playerId : state.getPlayerList(startingPlayerId)) {
state.addHelperEmblem(new XmageHelperEmblem().withCardHint("storm counter", StormAbility.getHint()), playerId);
}
}
protected void sendStartMessage(Player choosingPlayer, Player startingPlayer) {
StringBuilder message = new StringBuilder();
if (choosingPlayer != null) {