forked from External/mage
other: reworked target selection: (#13638)
- WIP: AI and multi targets, human and X=0 use cases, human and impossible targets use cases;
- improved stability and shared logic (related to #13606, #11134, #11666, continue from a53eb66b58, close #13617, close #13613);
- improved test logs and debug info to show more target info on errors;
- improved test framework to support multiple addTarget calls;
- improved test framework to find bad commands order for targets (related to #11666);
- fixed game freezes on auto-choice usages with disconnected or under control players (related to #11285);
- gui, game: fixed that player doesn't mark avatar as selected/green in "up to" targeting;
- gui, game: fixed small font in some popup messages on big screens (related to #969);
- gui, game: added min targets info for target selection dialog;
- for devs: added new cheat option to call and test any game dialog (define own dialogs, targets, etc in HumanDialogsTester);
- for devs: now tests require complete an any or up to target selection by addTarget + TestPlayer.TARGET_SKIP or setChoice + TestPlayer.CHOICE_SKIP (if not all max/possible targets used);
- for devs: added detail targets info for activate/trigger/cast, can be useful to debug unit tests, auto-choose or AI (see DebugUtil.GAME_SHOW_CHOOSE_TARGET_LOGS)
This commit is contained in:
parent
80d62727e1
commit
133e4fe425
84 changed files with 2737 additions and 743 deletions
|
|
@ -216,6 +216,22 @@ public final class GamePanel extends javax.swing.JPanel {
|
|||
});
|
||||
}
|
||||
|
||||
public List<UUID> getPossibleTargets() {
|
||||
if (options != null && options.containsKey("possibleTargets")) {
|
||||
return (List<UUID>) options.get("possibleTargets");
|
||||
} else {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
public Set<UUID> getChosenTargets() {
|
||||
if (options != null && options.containsKey("chosenTargets")) {
|
||||
return new HashSet<>((List<UUID>) options.get("chosenTargets"));
|
||||
} else {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
}
|
||||
|
||||
public CardView findCard(UUID id) {
|
||||
return this.allCardsIndex.getOrDefault(id, null);
|
||||
}
|
||||
|
|
@ -642,7 +658,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
|||
// see test render dialog for refresh commands order
|
||||
playPanel.getPlayerPanel().fullRefresh(GUISizeHelper.playerPanelGuiScale);
|
||||
playPanel.init(player, bigCard, gameId, player.getPriorityTimeLeftSecs());
|
||||
playPanel.update(lastGameData.game, player, lastGameData.targets);
|
||||
playPanel.update(lastGameData.game, player, lastGameData.targets, lastGameData.getChosenTargets());
|
||||
playPanel.getPlayerPanel().sizePlayerPanel(false);
|
||||
}
|
||||
});
|
||||
|
|
@ -1170,7 +1186,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
|||
}
|
||||
}
|
||||
}
|
||||
players.get(player.getPlayerId()).update(lastGameData.game, player, lastGameData.targets);
|
||||
players.get(player.getPlayerId()).update(lastGameData.game, player, lastGameData.targets, lastGameData.getChosenTargets());
|
||||
if (player.getPlayerId().equals(playerId)) {
|
||||
skipButtons.updateFromPlayer(player);
|
||||
}
|
||||
|
|
@ -1786,12 +1802,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
|||
needZone = (Zone) lastGameData.options.get("targetZone");
|
||||
}
|
||||
|
||||
List<UUID> needChosen;
|
||||
if (lastGameData.options != null && lastGameData.options.containsKey("chosenTargets")) {
|
||||
needChosen = (List<UUID>) lastGameData.options.get("chosenTargets");
|
||||
} else {
|
||||
needChosen = new ArrayList<>();
|
||||
}
|
||||
Set<UUID> needChosen = lastGameData.getChosenTargets();
|
||||
|
||||
Set<UUID> needSelectable;
|
||||
if (lastGameData.targets != null) {
|
||||
|
|
@ -2021,7 +2032,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
|||
private void prepareSelectableWindows(
|
||||
Collection<CardInfoWindowDialog> windows,
|
||||
Set<UUID> needSelectable,
|
||||
List<UUID> needChosen,
|
||||
Set<UUID> needChosen,
|
||||
PlayableObjectsList needPlayable
|
||||
) {
|
||||
// lookAt or reveals windows clean up on next priority, so users can see dialogs, but xmage can't restore it
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue