mirror of
https://github.com/magefree/mage.git
synced 2025-12-23 12:02:01 -08:00
send list of targets to client
This commit is contained in:
parent
36f512de71
commit
53d7e5623b
25 changed files with 92 additions and 103 deletions
|
|
@ -41,6 +41,7 @@ import java.awt.event.ComponentAdapter;
|
||||||
import java.awt.event.ComponentEvent;
|
import java.awt.event.ComponentEvent;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
@ -324,7 +325,7 @@ public class GamePanel extends javax.swing.JPanel {
|
||||||
this.feedbackPanel.getFeedback(FeedbackMode.QUESTION, question, true, false);
|
this.feedbackPanel.getFeedback(FeedbackMode.QUESTION, question, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pickTarget(String message, CardsView cardView, GameView gameView, boolean required) {
|
public void pickTarget(String message, CardsView cardView, GameView gameView, Set<UUID> targets, boolean required) {
|
||||||
updateGame(gameView);
|
updateGame(gameView);
|
||||||
this.feedbackPanel.getFeedback(required?FeedbackMode.INFORM:FeedbackMode.CANCEL, message, false, gameView.getSpecial());
|
this.feedbackPanel.getFeedback(required?FeedbackMode.INFORM:FeedbackMode.CANCEL, message, false, gameView.getSpecial());
|
||||||
if (cardView != null && cardView.size() > 0) {
|
if (cardView != null && cardView.size() > 0) {
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ public class Client implements CallbackClient {
|
||||||
}
|
}
|
||||||
else if (callback.getMethod().equals("gameTarget")) {
|
else if (callback.getMethod().equals("gameTarget")) {
|
||||||
GameClientMessage message = (GameClientMessage) callback.getData();
|
GameClientMessage message = (GameClientMessage) callback.getData();
|
||||||
session.getGame().pickTarget(message.getMessage(), message.getCardsView(), message.getGameView(), message.isFlag());
|
session.getGame().pickTarget(message.getMessage(), message.getCardsView(), message.getGameView(), message.getTargets(), message.isFlag());
|
||||||
}
|
}
|
||||||
else if (callback.getMethod().equals("gameSelect")) {
|
else if (callback.getMethod().equals("gameSelect")) {
|
||||||
GameClientMessage message = (GameClientMessage) callback.getData();
|
GameClientMessage message = (GameClientMessage) callback.getData();
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,8 @@
|
||||||
package mage.view;
|
package mage.view;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -42,6 +44,7 @@ public class GameClientMessage implements Serializable {
|
||||||
private AbilityPickerView abilityView;
|
private AbilityPickerView abilityView;
|
||||||
private boolean flag;
|
private boolean flag;
|
||||||
private String[] strings;
|
private String[] strings;
|
||||||
|
private Set<UUID> targets;
|
||||||
private int min;
|
private int min;
|
||||||
private int max;
|
private int max;
|
||||||
|
|
||||||
|
|
@ -54,10 +57,11 @@ public class GameClientMessage implements Serializable {
|
||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameClientMessage(GameView gameView, String question, CardsView cardView, boolean required) {
|
public GameClientMessage(GameView gameView, String question, CardsView cardView, Set<UUID> targets, boolean required) {
|
||||||
this.gameView = gameView;
|
this.gameView = gameView;
|
||||||
this.message = question;
|
this.message = question;
|
||||||
this.cardsView = cardView;
|
this.cardsView = cardView;
|
||||||
|
this.targets = targets;
|
||||||
this.flag = required;
|
this.flag = required;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -101,6 +105,10 @@ public class GameClientMessage implements Serializable {
|
||||||
return strings;
|
return strings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<UUID> getTargets() {
|
||||||
|
return targets;
|
||||||
|
}
|
||||||
|
|
||||||
public int getMin() {
|
public int getMin() {
|
||||||
return min;
|
return min;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@ public class HumanPlayer extends PlayerImpl<HumanPlayer> {
|
||||||
@Override
|
@Override
|
||||||
public boolean choose(Outcome outcome, Target target, Game game) {
|
public boolean choose(Outcome outcome, Target target, Game game) {
|
||||||
while (!abort) {
|
while (!abort) {
|
||||||
game.fireSelectTargetEvent(playerId, target.getMessage(), target.isRequired());
|
game.fireSelectTargetEvent(playerId, target.getMessage(), target.possibleTargets(null, playerId, game), target.isRequired());
|
||||||
waitForResponse();
|
waitForResponse();
|
||||||
if (response.getUUID() != null) {
|
if (response.getUUID() != null) {
|
||||||
if (target.canTarget(response.getUUID(), game)) {
|
if (target.canTarget(response.getUUID(), game)) {
|
||||||
|
|
@ -199,7 +199,7 @@ public class HumanPlayer extends PlayerImpl<HumanPlayer> {
|
||||||
@Override
|
@Override
|
||||||
public boolean chooseTarget(Outcome outcome, Target target, Ability source, Game game) {
|
public boolean chooseTarget(Outcome outcome, Target target, Ability source, Game game) {
|
||||||
while (!abort) {
|
while (!abort) {
|
||||||
game.fireSelectTargetEvent(playerId, target.getMessage(), target.isRequired());
|
game.fireSelectTargetEvent(playerId, target.getMessage(), target.possibleTargets(source==null?null:source.getId(), playerId, game), target.isRequired());
|
||||||
waitForResponse();
|
waitForResponse();
|
||||||
if (response.getUUID() != null) {
|
if (response.getUUID() != null) {
|
||||||
if (target.canTarget(response.getUUID(), source, game)) {
|
if (target.canTarget(response.getUUID(), source, game)) {
|
||||||
|
|
@ -250,7 +250,7 @@ public class HumanPlayer extends PlayerImpl<HumanPlayer> {
|
||||||
@Override
|
@Override
|
||||||
public boolean chooseTargetAmount(Outcome outcome, TargetAmount target, Ability source, Game game) {
|
public boolean chooseTargetAmount(Outcome outcome, TargetAmount target, Ability source, Game game) {
|
||||||
while (!abort) {
|
while (!abort) {
|
||||||
game.fireSelectTargetEvent(playerId, target.getMessage() + "\n Amount remaining:" + target.getAmountRemaining(), target.isRequired());
|
game.fireSelectTargetEvent(playerId, target.getMessage() + "\n Amount remaining:" + target.getAmountRemaining(), target.possibleTargets(source==null?null:source.getId(), playerId, game), target.isRequired());
|
||||||
waitForResponse();
|
waitForResponse();
|
||||||
if (response.getUUID() != null) {
|
if (response.getUUID() != null) {
|
||||||
if (target.canTarget(response.getUUID(), source, game)) {
|
if (target.canTarget(response.getUUID(), source, game)) {
|
||||||
|
|
@ -421,7 +421,7 @@ public class HumanPlayer extends PlayerImpl<HumanPlayer> {
|
||||||
|
|
||||||
protected void selectCombatGroup(UUID blockerId, Game game) {
|
protected void selectCombatGroup(UUID blockerId, Game game) {
|
||||||
TargetAttackingCreature target = new TargetAttackingCreature();
|
TargetAttackingCreature target = new TargetAttackingCreature();
|
||||||
game.fireSelectTargetEvent(playerId, "Select attacker to block", target.isRequired());
|
game.fireSelectTargetEvent(playerId, "Select attacker to block", target.possibleTargets(null, playerId, game), target.isRequired());
|
||||||
waitForResponse();
|
waitForResponse();
|
||||||
if (response.getBoolean() != null) {
|
if (response.getBoolean() != null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -124,7 +124,7 @@ public class GameController implements GameCallback {
|
||||||
ask(event.getPlayerId(), event.getMessage());
|
ask(event.getPlayerId(), event.getMessage());
|
||||||
break;
|
break;
|
||||||
case PICK_TARGET:
|
case PICK_TARGET:
|
||||||
target(event.getPlayerId(), event.getMessage(), event.getCards(), event.isRequired());
|
target(event.getPlayerId(), event.getMessage(), event.getCards(), event.getTargets(), event.isRequired());
|
||||||
break;
|
break;
|
||||||
case PICK_ABILITY:
|
case PICK_ABILITY:
|
||||||
target(event.getPlayerId(), event.getMessage(), event.getAbilities(), event.isRequired());
|
target(event.getPlayerId(), event.getMessage(), event.getAbilities(), event.isRequired());
|
||||||
|
|
@ -317,19 +317,19 @@ public class GameController implements GameCallback {
|
||||||
informOthers(playerId);
|
informOthers(playerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void target(UUID playerId, String question, Cards cards, boolean required) {
|
private synchronized void target(UUID playerId, String question, Cards cards, Set<UUID> targets, boolean required) {
|
||||||
if (gameSessions.containsKey(playerId)) {
|
if (gameSessions.containsKey(playerId)) {
|
||||||
if (cards != null)
|
if (cards != null)
|
||||||
gameSessions.get(playerId).target(question, new CardsView(cards.getCards(game)), required, getGameView(playerId));
|
gameSessions.get(playerId).target(question, new CardsView(cards.getCards(game)), targets, required, getGameView(playerId));
|
||||||
else
|
else
|
||||||
gameSessions.get(playerId).target(question, new CardsView(), required, getGameView(playerId));
|
gameSessions.get(playerId).target(question, new CardsView(), targets, required, getGameView(playerId));
|
||||||
}
|
}
|
||||||
informOthers(playerId);
|
informOthers(playerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void target(UUID playerId, String question, Collection<? extends Ability> abilities, boolean required) {
|
private synchronized void target(UUID playerId, String question, Collection<? extends Ability> abilities, boolean required) {
|
||||||
if (gameSessions.containsKey(playerId))
|
if (gameSessions.containsKey(playerId))
|
||||||
gameSessions.get(playerId).target(question, new CardsView(abilities, game.getState()), required, getGameView(playerId));
|
gameSessions.get(playerId).target(question, new CardsView(abilities, game.getState()), null, required, getGameView(playerId));
|
||||||
informOthers(playerId);
|
informOthers(playerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,12 +71,12 @@ public class GameSession extends GameWatcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void target(final String question, final CardsView cardView, final boolean required, final GameView gameView) {
|
public void target(final String question, final CardsView cardView, final Set<UUID> targets, final boolean required, final GameView gameView) {
|
||||||
if (!killed) {
|
if (!killed) {
|
||||||
setupTimeout();
|
setupTimeout();
|
||||||
Session session = SessionManager.getInstance().getSession(sessionId);
|
Session session = SessionManager.getInstance().getSession(sessionId);
|
||||||
if (session != null)
|
if (session != null)
|
||||||
session.fireCallback(new ClientCallback("gameTarget", new GameClientMessage(gameView, question, cardView, required)));
|
session.fireCallback(new ClientCallback("gameTarget", new GameClientMessage(gameView, question, cardView, targets, required)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ public interface Game extends MageItem, Serializable {
|
||||||
public void addPlayerQueryEventListener(Listener<PlayerQueryEvent> listener);
|
public void addPlayerQueryEventListener(Listener<PlayerQueryEvent> listener);
|
||||||
public void fireAskPlayerEvent(UUID playerId, String message);
|
public void fireAskPlayerEvent(UUID playerId, String message);
|
||||||
public void fireChooseEvent(UUID playerId, Choice choice);
|
public void fireChooseEvent(UUID playerId, Choice choice);
|
||||||
public void fireSelectTargetEvent(UUID playerId, String message, boolean required);
|
public void fireSelectTargetEvent(UUID playerId, String message, Set<UUID> targets, boolean required);
|
||||||
public void fireSelectTargetEvent(UUID playerId, String message, Cards cards, boolean required);
|
public void fireSelectTargetEvent(UUID playerId, String message, Cards cards, boolean required);
|
||||||
public void fireSelectTargetEvent(UUID playerId, String message, TriggeredAbilities abilities, boolean required);
|
public void fireSelectTargetEvent(UUID playerId, String message, TriggeredAbilities abilities, boolean required);
|
||||||
public void fireRevealCardsEvent(String message, Cards cards);
|
public void fireRevealCardsEvent(String message, Cards cards);
|
||||||
|
|
|
||||||
|
|
@ -715,8 +715,8 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireSelectTargetEvent(UUID playerId, String message, boolean required) {
|
public void fireSelectTargetEvent(UUID playerId, String message, Set<UUID> targets, boolean required) {
|
||||||
playerQueryEventSource.target(playerId, message, required);
|
playerQueryEventSource.target(playerId, message, targets, required);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri
|
||||||
private String message;
|
private String message;
|
||||||
private Collection<? extends Ability> abilities;
|
private Collection<? extends Ability> abilities;
|
||||||
private Set<String> choices;
|
private Set<String> choices;
|
||||||
|
private Set<UUID> targets;
|
||||||
private Cards cards;
|
private Cards cards;
|
||||||
private QueryType queryType;
|
private QueryType queryType;
|
||||||
private UUID playerId;
|
private UUID playerId;
|
||||||
|
|
@ -58,13 +59,14 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri
|
||||||
private int min;
|
private int min;
|
||||||
private int max;
|
private int max;
|
||||||
|
|
||||||
private PlayerQueryEvent(UUID playerId, String message, Collection<? extends Ability> abilities, Set<String> choices, Cards cards, QueryType queryType, int min, int max, boolean required) {
|
private PlayerQueryEvent(UUID playerId, String message, Collection<? extends Ability> abilities, Set<String> choices, Set<UUID> targets, Cards cards, QueryType queryType, int min, int max, boolean required) {
|
||||||
super(playerId);
|
super(playerId);
|
||||||
this.queryType = queryType;
|
this.queryType = queryType;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.playerId = playerId;
|
this.playerId = playerId;
|
||||||
this.abilities = abilities;
|
this.abilities = abilities;
|
||||||
this.choices = choices;
|
this.choices = choices;
|
||||||
|
this.targets = targets;
|
||||||
this.cards = cards;
|
this.cards = cards;
|
||||||
this.required = required;
|
this.required = required;
|
||||||
this.min = min;
|
this.min = min;
|
||||||
|
|
@ -72,46 +74,46 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent askEvent(UUID playerId, String message) {
|
public static PlayerQueryEvent askEvent(UUID playerId, String message) {
|
||||||
return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.ASK, 0, 0, false);
|
return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.ASK, 0, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent chooseAbilityEvent(UUID playerId, String message, Collection<? extends ActivatedAbility> choices) {
|
public static PlayerQueryEvent chooseAbilityEvent(UUID playerId, String message, Collection<? extends ActivatedAbility> choices) {
|
||||||
return new PlayerQueryEvent(playerId, message, choices, null, null, QueryType.CHOOSE_ABILITY, 0, 0, false);
|
return new PlayerQueryEvent(playerId, message, choices, null, null, null, QueryType.CHOOSE_ABILITY, 0, 0, false);
|
||||||
}
|
}
|
||||||
public static PlayerQueryEvent chooseEvent(UUID playerId, String message, Set<String> choices) {
|
public static PlayerQueryEvent chooseEvent(UUID playerId, String message, Set<String> choices) {
|
||||||
return new PlayerQueryEvent(playerId, message, null, choices, null, QueryType.CHOOSE, 0, 0, false);
|
return new PlayerQueryEvent(playerId, message, null, choices, null, null, QueryType.CHOOSE, 0, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent targetEvent(UUID playerId, String message, boolean required) {
|
public static PlayerQueryEvent targetEvent(UUID playerId, String message, Set<UUID> targets, boolean required) {
|
||||||
return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.PICK_TARGET, 0, 0, required);
|
return new PlayerQueryEvent(playerId, message, null, null, targets, null, QueryType.PICK_TARGET, 0, 0, required);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent targetEvent(UUID playerId, String message, Cards cards, boolean required) {
|
public static PlayerQueryEvent targetEvent(UUID playerId, String message, Cards cards, boolean required) {
|
||||||
return new PlayerQueryEvent(playerId, message, null, null, cards, QueryType.PICK_TARGET, 0, 0, required);
|
return new PlayerQueryEvent(playerId, message, null, null, null, cards, QueryType.PICK_TARGET, 0, 0, required);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent targetEvent(UUID playerId, String message, TriggeredAbilities abilities, boolean required) {
|
public static PlayerQueryEvent targetEvent(UUID playerId, String message, TriggeredAbilities abilities, boolean required) {
|
||||||
return new PlayerQueryEvent(playerId, message, abilities, null, null, QueryType.PICK_ABILITY, 0, 0, required);
|
return new PlayerQueryEvent(playerId, message, abilities, null, null, null, QueryType.PICK_ABILITY, 0, 0, required);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent selectEvent(UUID playerId, String message) {
|
public static PlayerQueryEvent selectEvent(UUID playerId, String message) {
|
||||||
return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.SELECT, 0, 0, false);
|
return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.SELECT, 0, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent playManaEvent(UUID playerId, String message) {
|
public static PlayerQueryEvent playManaEvent(UUID playerId, String message) {
|
||||||
return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.PLAY_MANA, 0, 0, false);
|
return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.PLAY_MANA, 0, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent playXManaEvent(UUID playerId, String message) {
|
public static PlayerQueryEvent playXManaEvent(UUID playerId, String message) {
|
||||||
return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.PLAY_X_MANA, 0, 0, false);
|
return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.PLAY_X_MANA, 0, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent amountEvent(UUID playerId, String message, int min , int max) {
|
public static PlayerQueryEvent amountEvent(UUID playerId, String message, int min , int max) {
|
||||||
return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.AMOUNT, min, max, false);
|
return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.AMOUNT, min, max, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerQueryEvent lookEvent(UUID playerId, String message, Cards cards) {
|
public static PlayerQueryEvent lookEvent(UUID playerId, String message, Cards cards) {
|
||||||
return new PlayerQueryEvent(playerId, message, null, null, cards, QueryType.LOOK, 0, 0, false);
|
return new PlayerQueryEvent(playerId, message, null, null, cards, null, QueryType.LOOK, 0, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
|
|
@ -130,6 +132,10 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri
|
||||||
return choices;
|
return choices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<UUID> getTargets() {
|
||||||
|
return targets;
|
||||||
|
}
|
||||||
|
|
||||||
public UUID getPlayerId() {
|
public UUID getPlayerId() {
|
||||||
return playerId;
|
return playerId;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,8 +61,8 @@ public class PlayerQueryEventSource implements EventSource<PlayerQueryEvent>, Se
|
||||||
dispatcher.fireEvent(PlayerQueryEvent.chooseAbilityEvent(playerId, message, choices));
|
dispatcher.fireEvent(PlayerQueryEvent.chooseAbilityEvent(playerId, message, choices));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void target(UUID playerId, String message, boolean required) {
|
public void target(UUID playerId, String message, Set<UUID> targets, boolean required) {
|
||||||
dispatcher.fireEvent(PlayerQueryEvent.targetEvent(playerId, message, required));
|
dispatcher.fireEvent(PlayerQueryEvent.targetEvent(playerId, message, targets, required));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void target(UUID playerId, String message, Cards cards, boolean required) {
|
public void target(UUID playerId, String message, Cards cards, boolean required) {
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ package mage.target;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.Constants.Outcome;
|
import mage.Constants.Outcome;
|
||||||
import mage.Constants.Zone;
|
import mage.Constants.Zone;
|
||||||
|
|
@ -48,7 +49,7 @@ public interface Target extends Serializable {
|
||||||
public void clearChosen();
|
public void clearChosen();
|
||||||
public boolean isNotTarget();
|
public boolean isNotTarget();
|
||||||
public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game);
|
public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game);
|
||||||
public List<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game);
|
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game);
|
||||||
public boolean choose(Outcome outcome, UUID playerId, Game game);
|
public boolean choose(Outcome outcome, UUID playerId, Game game);
|
||||||
public boolean chooseTarget(Outcome outcome, UUID playerId, Ability source, Game game);
|
public boolean chooseTarget(Outcome outcome, UUID playerId, Ability source, Game game);
|
||||||
public String getMessage();
|
public String getMessage();
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,8 @@
|
||||||
|
|
||||||
package mage.target;
|
package mage.target;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.HashMap;
|
import java.util.Set;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.Constants.Zone;
|
import mage.Constants.Zone;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
|
|
@ -78,23 +76,6 @@ public class TargetCard<T extends TargetCard<T>> extends TargetObject<TargetCard
|
||||||
return this.filter;
|
return this.filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public boolean choose(Cards cards, Game game) {
|
|
||||||
// Player player = game.getPlayer(this.source.getControllerId());
|
|
||||||
// while (!isChosen() && !doneChosing()) {
|
|
||||||
// chosen = targets.size() >= minNumberOfTargets;
|
|
||||||
// if (!player.chooseTarget(cards, this, game)) {
|
|
||||||
// return chosen;
|
|
||||||
// }
|
|
||||||
// chosen = targets.size() >= minNumberOfTargets;
|
|
||||||
// }
|
|
||||||
// while (!doneChosing()) {
|
|
||||||
// if (!player.chooseTarget(cards, this, game)) {
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return chosen = true;
|
|
||||||
// }
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) {
|
public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||||
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
||||||
|
|
@ -122,30 +103,30 @@ public class TargetCard<T extends TargetCard<T>> extends TargetObject<TargetCard
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||||
Map<String, UUID> possibleTargets = new HashMap<String, UUID>();
|
Set<UUID> possibleTargets = new HashSet<UUID>();
|
||||||
Player player = game.getPlayer(sourceControllerId);
|
Player player = game.getPlayer(sourceControllerId);
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
switch (zone) {
|
switch (zone) {
|
||||||
case HAND:
|
case HAND:
|
||||||
for (Card card: player.getHand().getCards(filter, game)) {
|
for (Card card: player.getHand().getCards(filter, game)) {
|
||||||
possibleTargets.put(card.getName(), card.getId());
|
possibleTargets.add(card.getId());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRAVEYARD:
|
case GRAVEYARD:
|
||||||
for (Card card: player.getGraveyard().getCards(filter, game)) {
|
for (Card card: player.getGraveyard().getCards(filter, game)) {
|
||||||
possibleTargets.put(card.getName(), card.getId());
|
possibleTargets.add(card.getId());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LIBRARY:
|
case LIBRARY:
|
||||||
for (Card card: player.getLibrary().getUniqueCards(game)) {
|
for (Card card: player.getLibrary().getUniqueCards(game)) {
|
||||||
if (filter.match(card))
|
if (filter.match(card))
|
||||||
possibleTargets.put(card.getName(), card.getId());
|
possibleTargets.add(card.getId());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new ArrayList<UUID>(possibleTargets.values());
|
return possibleTargets;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canTarget(UUID id, Cards cards, Game game) {
|
public boolean canTarget(UUID id, Cards cards, Game game) {
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,8 @@
|
||||||
|
|
||||||
package mage.target;
|
package mage.target;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.HashMap;
|
import java.util.Set;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.Constants.Zone;
|
import mage.Constants.Zone;
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
|
|
@ -111,15 +109,15 @@ public class TargetPermanent<T extends TargetPermanent<T>> extends TargetObject<
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||||
Map<Integer, UUID> possibleTargets = new HashMap<Integer, UUID>();
|
Set<UUID> possibleTargets = new HashSet<UUID>();
|
||||||
MageObject targetSource = game.getObject(sourceId);
|
MageObject targetSource = game.getObject(sourceId);
|
||||||
for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, sourceControllerId, game)) {
|
for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, sourceControllerId, game)) {
|
||||||
if (permanent.canBeTargetedBy(targetSource)) {
|
if (permanent.canBeTargetedBy(targetSource)) {
|
||||||
possibleTargets.put(permanent.getValue().hashCode(), permanent.getId());
|
possibleTargets.add(permanent.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new ArrayList<UUID>(possibleTargets.values());
|
return possibleTargets;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@
|
||||||
|
|
||||||
package mage.target;
|
package mage.target;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
|
@ -88,8 +88,8 @@ public class TargetPlayer<T extends TargetPlayer<T>> extends TargetImpl<TargetPl
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||||
List<UUID> possibleTargets = new ArrayList<UUID>();
|
Set<UUID> possibleTargets = new HashSet<UUID>();
|
||||||
MageObject targetSource = game.getObject(sourceId);
|
MageObject targetSource = game.getObject(sourceId);
|
||||||
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
||||||
Player player = game.getPlayer(playerId);
|
Player player = game.getPlayer(playerId);
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@
|
||||||
|
|
||||||
package mage.target;
|
package mage.target;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.Constants.Zone;
|
import mage.Constants.Zone;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
|
@ -99,8 +99,8 @@ public class TargetSpell extends TargetObject<TargetSpell> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||||
List<UUID> possibleTargets = new ArrayList<UUID>();
|
Set<UUID> possibleTargets = new HashSet<UUID>();
|
||||||
for (StackObject stackObject: game.getStack()) {
|
for (StackObject stackObject: game.getStack()) {
|
||||||
if (stackObject instanceof Spell && game.getPlayer(sourceControllerId).getInRange().contains(stackObject.getControllerId()) && filter.match((Spell)stackObject)) {
|
if (stackObject instanceof Spell && game.getPlayer(sourceControllerId).getInRange().contains(stackObject.getControllerId()) && filter.match((Spell)stackObject)) {
|
||||||
possibleTargets.add(stackObject.getId());
|
possibleTargets.add(stackObject.getId());
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@
|
||||||
|
|
||||||
package mage.target;
|
package mage.target;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.Constants.Zone;
|
import mage.Constants.Zone;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
|
@ -98,8 +98,8 @@ public class TargetStackObject extends TargetObject<TargetStackObject> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||||
List<UUID> possibleTargets = new ArrayList<UUID>();
|
Set<UUID> possibleTargets = new HashSet<UUID>();
|
||||||
for (StackObject stackObject: game.getStack()) {
|
for (StackObject stackObject: game.getStack()) {
|
||||||
if (game.getPlayer(sourceControllerId).getInRange().contains(stackObject.getControllerId()) && filter.match(stackObject)) {
|
if (game.getPlayer(sourceControllerId).getInRange().contains(stackObject.getControllerId()) && filter.match(stackObject)) {
|
||||||
possibleTargets.add(stackObject.getId());
|
possibleTargets.add(stackObject.getId());
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,8 @@
|
||||||
|
|
||||||
package mage.target.common;
|
package mage.target.common;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.HashMap;
|
import java.util.Set;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.Constants.Zone;
|
import mage.Constants.Zone;
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
|
|
@ -132,21 +130,21 @@ public class TargetCreatureOrPlayer extends TargetImpl<TargetCreatureOrPlayer> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||||
Map<Integer, UUID> possibleTargets = new HashMap<Integer, UUID>();
|
Set<UUID> possibleTargets = new HashSet<UUID>();
|
||||||
MageObject targetSource = game.getObject(sourceId);
|
MageObject targetSource = game.getObject(sourceId);
|
||||||
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
||||||
Player player = game.getPlayer(playerId);
|
Player player = game.getPlayer(playerId);
|
||||||
if (player != null && player.canBeTargetedBy(targetSource) && filter.match(player)) {
|
if (player != null && player.canBeTargetedBy(targetSource) && filter.match(player)) {
|
||||||
possibleTargets.put(player.hashCode(), playerId);
|
possibleTargets.add(playerId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Permanent permanent: game.getBattlefield().getActivePermanents(FilterCreaturePermanent.getDefault(), sourceControllerId, game)) {
|
for (Permanent permanent: game.getBattlefield().getActivePermanents(FilterCreaturePermanent.getDefault(), sourceControllerId, game)) {
|
||||||
if (permanent.canBeTargetedBy(targetSource) && filter.match(permanent, sourceControllerId, game)) {
|
if (permanent.canBeTargetedBy(targetSource) && filter.match(permanent, sourceControllerId, game)) {
|
||||||
possibleTargets.put(permanent.getValue().hashCode(), permanent.getId());
|
possibleTargets.add(permanent.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new ArrayList<UUID>(possibleTargets.values());
|
return possibleTargets;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,8 @@
|
||||||
|
|
||||||
package mage.target.common;
|
package mage.target.common;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.HashMap;
|
import java.util.Set;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.Constants.Zone;
|
import mage.Constants.Zone;
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
|
|
@ -123,21 +121,21 @@ public class TargetCreatureOrPlayerAmount extends TargetAmount<TargetCreatureOrP
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||||
Map<Integer, UUID> possibleTargets = new HashMap<Integer, UUID>();
|
Set<UUID> possibleTargets = new HashSet<UUID>();
|
||||||
MageObject targetSource = game.getObject(sourceId);
|
MageObject targetSource = game.getObject(sourceId);
|
||||||
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
||||||
Player player = game.getPlayer(playerId);
|
Player player = game.getPlayer(playerId);
|
||||||
if (player != null && player.canBeTargetedBy(targetSource) && filter.match(player)) {
|
if (player != null && player.canBeTargetedBy(targetSource) && filter.match(player)) {
|
||||||
possibleTargets.put(player.hashCode(), playerId);
|
possibleTargets.add(playerId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Permanent permanent: game.getBattlefield().getActivePermanents(FilterCreaturePermanent.getDefault(), sourceControllerId, game)) {
|
for (Permanent permanent: game.getBattlefield().getActivePermanents(FilterCreaturePermanent.getDefault(), sourceControllerId, game)) {
|
||||||
if (permanent.canBeTargetedBy(targetSource) && filter.match(permanent, sourceControllerId, game)) {
|
if (permanent.canBeTargetedBy(targetSource) && filter.match(permanent, sourceControllerId, game)) {
|
||||||
possibleTargets.put(permanent.getValue().hashCode(), permanent.getId());
|
possibleTargets.add(permanent.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new ArrayList<UUID>(possibleTargets.values());
|
return possibleTargets;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -28,11 +28,9 @@
|
||||||
|
|
||||||
package mage.target.common;
|
package mage.target.common;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.Constants.CardType;
|
|
||||||
import mage.Constants.Zone;
|
import mage.Constants.Zone;
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
|
@ -104,8 +102,8 @@ public class TargetDefender extends TargetImpl<TargetDefender> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||||
List<UUID> possibleTargets = new ArrayList<UUID>();
|
Set<UUID> possibleTargets = new HashSet<UUID>();
|
||||||
MageObject targetSource = game.getObject(sourceId);
|
MageObject targetSource = game.getObject(sourceId);
|
||||||
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) {
|
||||||
Player player = game.getPlayer(playerId);
|
Player player = game.getPlayer(playerId);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue