From 7c44b165047cd7cd55ab15815b01973c7f98878f Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 10 Oct 2012 20:43:18 +0200 Subject: [PATCH] AbilityPicker shows abilities now always in the order they were defined on the object. --- Mage.Common/src/mage/view/AbilityPickerView.java | 8 ++++---- .../src/mage/player/human/HumanPlayer.java | 12 ++++++------ .../main/java/mage/server/game/GameController.java | 2 +- Mage/src/mage/abilities/SpecialActions.java | 7 +++---- Mage/src/mage/game/Game.java | 2 +- Mage/src/mage/game/GameImpl.java | 2 +- Mage/src/mage/game/events/PlayerQueryEvent.java | 10 +++++----- .../src/mage/game/events/PlayerQueryEventSource.java | 2 +- Mage/src/mage/players/PlayerImpl.java | 12 +++++++----- 9 files changed, 29 insertions(+), 28 deletions(-) diff --git a/Mage.Common/src/mage/view/AbilityPickerView.java b/Mage.Common/src/mage/view/AbilityPickerView.java index f84851890d7..49b998b5f4b 100644 --- a/Mage.Common/src/mage/view/AbilityPickerView.java +++ b/Mage.Common/src/mage/view/AbilityPickerView.java @@ -29,8 +29,8 @@ package mage.view; import java.io.Serializable; -import java.util.Collection; -import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.UUID; import mage.abilities.Ability; @@ -42,9 +42,9 @@ import mage.abilities.Ability; public class AbilityPickerView implements Serializable { private static final long serialVersionUID = 1L; - private Map choices = new HashMap(); + private Map choices = new LinkedHashMap(); - public AbilityPickerView(Collection abilities) { + public AbilityPickerView(List abilities) { for (Ability ability: abilities) { choices.put(ability.getId(), ability.getRule(true)); } diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index db9530d6cc3..6e39245d221 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -415,7 +415,7 @@ public class HumanPlayer extends PlayerImpl { } else if (response.getUUID() != null) { MageObject object = game.getObject(response.getUUID()); if (object != null) { - Map useableAbilities = null; + LinkedHashMap useableAbilities = null; Zone zone = game.getState().getZone(object.getId()); if (zone != null) { useableAbilities = getUseableActivatedAbilities(object, zone, game); @@ -492,7 +492,7 @@ public class HumanPlayer extends PlayerImpl { updateGameStatePriority("playManaAbilities", game); MageObject object = game.getObject(response.getUUID()); if (object == null) return; - Map useableAbilities = null; + LinkedHashMap useableAbilities = null; Zone zone = game.getState().getZone(object.getId()); if (zone != null) { useableAbilities = getUseableManaAbilities(object, zone, game); @@ -686,8 +686,8 @@ public class HumanPlayer extends PlayerImpl { protected void specialAction(Game game) { updateGameStatePriority("specialAction", game); - Map specialActions = game.getState().getSpecialActions().getControlledBy(playerId); - game.fireGetChoiceEvent(playerId, name, specialActions.values()); + LinkedHashMap specialActions = game.getState().getSpecialActions().getControlledBy(playerId); + game.fireGetChoiceEvent(playerId, name, new ArrayList(specialActions.values())); waitForResponse(); if (response.getUUID() != null) { if (specialActions.containsKey(response.getUUID())) @@ -695,7 +695,7 @@ public class HumanPlayer extends PlayerImpl { } } - protected void activateAbility(Map abilities, Game game) { + protected void activateAbility(LinkedHashMap abilities, Game game) { updateGameStatePriority("activateAbility", game); if (abilities.size() == 1) { ActivatedAbility ability = abilities.values().iterator().next(); @@ -704,7 +704,7 @@ public class HumanPlayer extends PlayerImpl { return; } } - game.fireGetChoiceEvent(playerId, name, abilities.values()); + game.fireGetChoiceEvent(playerId, name, new ArrayList(abilities.values())); waitForResponse(); if (response.getUUID() != null) { if (abilities.containsKey(response.getUUID())) diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index 74a3a6b0640..df42f4bbe97 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -385,7 +385,7 @@ public class GameController implements GameCallback { } - private synchronized void chooseAbility(UUID playerId, final Collection choices) throws MageException { + private synchronized void chooseAbility(UUID playerId, final List choices) throws MageException { perform(playerId, new Command() { public void execute(UUID playerId) { gameSessions.get(playerId).chooseAbility(new AbilityPickerView(choices)); diff --git a/Mage/src/mage/abilities/SpecialActions.java b/Mage/src/mage/abilities/SpecialActions.java index a48844318a4..15b711e6436 100644 --- a/Mage/src/mage/abilities/SpecialActions.java +++ b/Mage/src/mage/abilities/SpecialActions.java @@ -28,8 +28,7 @@ package mage.abilities; -import java.util.HashMap; -import java.util.Map; +import java.util.LinkedHashMap; import java.util.UUID; /** @@ -44,8 +43,8 @@ public class SpecialActions extends AbilitiesImpl { super(actions); } - public Map getControlledBy(UUID controllerId) { - HashMap controlledBy = new HashMap(); + public LinkedHashMap getControlledBy(UUID controllerId) { + LinkedHashMap controlledBy = new LinkedHashMap(); for (SpecialAction action: this) { if (action.getControllerId().equals(controllerId)) controlledBy.put(action.id, action); diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java index 94a502c497b..f939d631af6 100644 --- a/Mage/src/mage/game/Game.java +++ b/Mage/src/mage/game/Game.java @@ -139,7 +139,7 @@ public interface Game extends MageItem, Serializable { public void firePriorityEvent(UUID playerId); public void firePlayManaEvent(UUID playerId, String message); public void firePlayXManaEvent(UUID playerId, String message); - public void fireGetChoiceEvent(UUID playerId, String message, Collection choices); + public void fireGetChoiceEvent(UUID playerId, String message, List choices); public void fireGetModeEvent(UUID playerId, String message, Map modes); public void fireGetAmountEvent(UUID playerId, String message, int min, int max); public void fireChoosePileEvent(UUID playerId, String message, List pile1, List pile2); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 06113944435..ad35206460b 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -1164,7 +1164,7 @@ public abstract class GameImpl> implements Game, Serializa } @Override - public void fireGetChoiceEvent(UUID playerId, String message, Collection choices) { + public void fireGetChoiceEvent(UUID playerId, String message, List choices) { if (simulation) return; playerQueryEventSource.chooseAbility(playerId, message, choices); } diff --git a/Mage/src/mage/game/events/PlayerQueryEvent.java b/Mage/src/mage/game/events/PlayerQueryEvent.java index f8651c83f4e..c400e52c17d 100644 --- a/Mage/src/mage/game/events/PlayerQueryEvent.java +++ b/Mage/src/mage/game/events/PlayerQueryEvent.java @@ -49,7 +49,7 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri } private String message; - private Collection abilities; + private List abilities; private List perms; private Set choices; private Set targets; @@ -66,12 +66,12 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri private List pile2; - private PlayerQueryEvent(UUID playerId, String message, Collection abilities, Set choices, Set targets, Cards cards, QueryType queryType, int min, int max, boolean required, Map options) { + private PlayerQueryEvent(UUID playerId, String message, List abilities, Set choices, Set targets, Cards cards, QueryType queryType, int min, int max, boolean required, Map options) { this(playerId, message, abilities, choices, targets, cards, queryType, min, max, required); this.options = options; } - private PlayerQueryEvent(UUID playerId, String message, Collection abilities, Set choices, Set targets, Cards cards, QueryType queryType, int min, int max, boolean required) { + private PlayerQueryEvent(UUID playerId, String message, List abilities, Set choices, Set targets, Cards cards, QueryType queryType, int min, int max, boolean required) { super(playerId); this.queryType = queryType; this.message = message; @@ -139,7 +139,7 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.ASK, 0, 0, false); } - public static PlayerQueryEvent chooseAbilityEvent(UUID playerId, String message, Collection choices) { + public static PlayerQueryEvent chooseAbilityEvent(UUID playerId, String message, List choices) { return new PlayerQueryEvent(playerId, message, choices, null, null, null, QueryType.CHOOSE_ABILITY, 0, 0, false); } @@ -215,7 +215,7 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri return queryType; } - public Collection getAbilities() { + public List getAbilities() { return abilities; } diff --git a/Mage/src/mage/game/events/PlayerQueryEventSource.java b/Mage/src/mage/game/events/PlayerQueryEventSource.java index 5a29a72ebfe..57e07411a50 100644 --- a/Mage/src/mage/game/events/PlayerQueryEventSource.java +++ b/Mage/src/mage/game/events/PlayerQueryEventSource.java @@ -58,7 +58,7 @@ public class PlayerQueryEventSource implements EventSource, Se dispatcher.fireEvent(PlayerQueryEvent.selectEvent(playerId, message)); } - public void chooseAbility(UUID playerId, String message, Collection choices) { + public void chooseAbility(UUID playerId, String message, List choices) { dispatcher.fireEvent(PlayerQueryEvent.chooseAbilityEvent(playerId, message, choices)); } diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 07d50c41a0a..46b1194cd6f 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -671,11 +671,13 @@ public abstract class PlayerImpl> implements Player, Ser return false; } - protected Map getUseableActivatedAbilities(MageObject object, Zone zone, Game game) { - Map useable = new HashMap(); + protected LinkedHashMap getUseableActivatedAbilities(MageObject object, Zone zone, Game game) { + LinkedHashMap useable = new LinkedHashMap(); for (ActivatedAbility ability: object.getAbilities().getActivatedAbilities(zone)) { - if (ability.canActivate(playerId, game)) + + if (ability.canActivate(playerId, game)) { useable.put(ability.getId(), ability); + } } if (zone != Zone.HAND) { if (zone != Zone.BATTLEFIELD && game.getContinuousEffects().asThough(object.getId(), AsThoughEffectType.CAST, game)) { @@ -702,8 +704,8 @@ public abstract class PlayerImpl> implements Player, Ser return useable; } - protected Map getUseableManaAbilities(MageObject object, Zone zone, Game game) { - Map useable = new HashMap(); + protected LinkedHashMap getUseableManaAbilities(MageObject object, Zone zone, Game game) { + LinkedHashMap useable = new LinkedHashMap(); for (ManaAbility ability: object.getAbilities().getManaAbilities(zone)) { if (ability.canActivate(playerId, game)) useable.put(ability.getId(), ability);