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
|
|
@ -0,0 +1,74 @@
|
|||
package mage.utils.testers;
|
||||
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.common.TargetPermanentOrPlayer;
|
||||
|
||||
/**
|
||||
* Part of testable game dialogs
|
||||
*
|
||||
* @author JayDi85
|
||||
*/
|
||||
abstract class BaseTestableDialog implements TestableDialog {
|
||||
|
||||
private final String group;
|
||||
private final String name;
|
||||
private final String description;
|
||||
|
||||
public BaseTestableDialog(String group, String name, String description) {
|
||||
this.group = group;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
@Override
|
||||
final public String getGroup() {
|
||||
return this.group;
|
||||
}
|
||||
|
||||
@Override
|
||||
final public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
final public String getDescription() {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
@Override
|
||||
final public void showResult(Player player, Game game, String result) {
|
||||
// show message with result
|
||||
game.informPlayer(player, result);
|
||||
// reset game and gui (in most use cases it must return to player's priority)
|
||||
game.firePriorityEvent(player.getId());
|
||||
}
|
||||
|
||||
static Target createAnyTarget(int min, int max) {
|
||||
return createAnyTarget(min, max, false);
|
||||
}
|
||||
|
||||
private static Target createAnyTarget(int min, int max, boolean notTarget) {
|
||||
return new TargetPermanentOrPlayer(min, max).withNotTarget(notTarget);
|
||||
}
|
||||
|
||||
static Target createCreatureTarget(int min, int max) {
|
||||
return createCreatureTarget(min, max, false);
|
||||
}
|
||||
|
||||
private static Target createCreatureTarget(int min, int max, boolean notTarget) {
|
||||
return new TargetCreaturePermanent(min, max).withNotTarget(notTarget);
|
||||
}
|
||||
|
||||
static Target createImpossibleTarget(int min, int max) {
|
||||
return createImpossibleTarget(min, max, false);
|
||||
}
|
||||
|
||||
private static Target createImpossibleTarget(int min, int max, boolean notTarget) {
|
||||
return new TargetCreaturePermanent(min, max, new FilterCreaturePermanent(SubType.TROOPER, "rare type"), notTarget);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue