From 7f6d730975e2e39416522042ce7b5bf1847b14e5 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Fri, 22 Feb 2013 22:54:43 +0400 Subject: [PATCH] Fixed Issue#125: Show source/reason of triggering abilites --- .../java/mage/client/game/PlayAreaPanel.java | 9 +++-- .../java/mage/client/game/PlayerPanelExt.java | 2 +- .../plugins/adapters/MageActionCallback.java | 26 ++++++++++++++ Mage.Common/src/mage/view/CardView.java | 1 + Mage.Common/src/mage/view/CardsView.java | 35 ++++++++++++++++--- Mage.Common/src/mage/view/GameView.java | 4 +-- .../src/mage/view/StackAbilityView.java | 19 +++++++--- 7 files changed, 83 insertions(+), 13 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java index ef009014516..069b8acb1df 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java @@ -50,9 +50,10 @@ public class PlayAreaPanel extends javax.swing.JPanel { private UUID playerId; private UUID gameId; + private boolean smallMode = false; - private static final int PANEL_HEIGHT = 242; - private static final int PANEL_HEIGHT_SMALL = 190; + public static final int PANEL_HEIGHT = 242; + public static final int PANEL_HEIGHT_SMALL = 190; /** Creates new form PlayAreaPanel */ public PlayAreaPanel() { @@ -161,6 +162,7 @@ public class PlayAreaPanel extends javax.swing.JPanel { public void sizePlayer(boolean smallMode) { this.playerPanel.sizePlayerPanel(smallMode); + this.smallMode = smallMode; if (smallMode) { this.playerPanel.setPreferredSize(new Dimension(92, PANEL_HEIGHT_SMALL)); //this.jScrollPane1.setPreferredSize(new Dimension(160, 160)); @@ -177,6 +179,9 @@ public class PlayAreaPanel extends javax.swing.JPanel { MageFrame.getSession().cheat(gameId, playerId, DeckImporterUtil.importDeck("cheat.dck")); } + public boolean isSmallMode() { + return smallMode; + } private mage.client.game.BattlefieldPanel battlefieldPanel; private javax.swing.JButton btnCheat; diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index 86edaa55872..de10cbfdff1 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -531,7 +531,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { } - public void sizePlayerPanel(boolean smallMode) { + protected void sizePlayerPanel(boolean smallMode) { if (smallMode) { avatar.setVisible(false); btnPlayer.setVisible(true); diff --git a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java index 78bcec540de..291ba51e1a7 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java +++ b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java @@ -20,6 +20,8 @@ import mage.components.CardInfoPane; import mage.remote.Session; import mage.utils.ThreadUtils; import mage.view.CardView; +import mage.view.PlayerView; +import mage.view.SimpleCardsView; import org.jdesktop.swingx.JXPanel; import javax.swing.*; @@ -153,8 +155,11 @@ public class MageActionCallback implements ActionCallback { me.translate(-parentPoint.x, -parentPoint.y); for (UUID uuid : targets) { + boolean found = false; + PlayAreaPanel p = MageFrame.getGame(data.gameId).getPlayers().get(uuid); if (p != null) { + found = true; Point target = p.getLocationOnScreen(); target.translate(-parentPoint.x, -parentPoint.y); ArrowBuilder.getBuilder().addArrow(data.gameId,(int) me.getX() + 35, (int) me.getY(), (int) target.getX() + 40, (int) target.getY() - 40, Color.red, ArrowBuilder.Type.TARGET); @@ -162,12 +167,33 @@ public class MageActionCallback implements ActionCallback { for (PlayAreaPanel pa : MageFrame.getGame(data.gameId).getPlayers().values()) { MagePermanent permanent = pa.getBattlefieldPanel().getPermanents().get(uuid); if (permanent != null) { + found = true; Point target = permanent.getLocationOnScreen(); target.translate(-parentPoint.x, -parentPoint.y); ArrowBuilder.getBuilder().addArrow(data.gameId, (int) me.getX() + 35, (int) me.getY(), (int) target.getX() + 40, (int) target.getY() + 10, Color.red, ArrowBuilder.Type.TARGET); } } } + + if (!found) { + for (PlayAreaPanel panel : MageFrame.getGame(data.gameId).getPlayers().values()) { + PlayerView view = panel.getPlayerPanel().getPlayer(); + if (view != null) { + SimpleCardsView graveyard = view.getGraveyard(); + if (graveyard.containsKey(uuid)) { + found = true; + p = MageFrame.getGame(data.gameId).getPlayers().get(view.getPlayerId()); + if (p != null) { + Point target = p.getLocationOnScreen(); + target.translate(-parentPoint.x, -parentPoint.y); + int y_offset = p.isSmallMode() ? (PlayAreaPanel.PANEL_HEIGHT - PlayAreaPanel.PANEL_HEIGHT_SMALL) : 0; + ArrowBuilder.getBuilder().addArrow(data.gameId,(int) me.getX() + 35, (int) me.getY(), (int) target.getX() + 15, (int) target.getY() + 145 - y_offset, Color.red, ArrowBuilder.Type.TARGET); + } + continue; + } + } + } + } } } } diff --git a/Mage.Common/src/mage/view/CardView.java b/Mage.Common/src/mage/view/CardView.java index 011b7376a56..5edea9ce419 100644 --- a/Mage.Common/src/mage/view/CardView.java +++ b/Mage.Common/src/mage/view/CardView.java @@ -139,6 +139,7 @@ public class CardView extends SimpleCardView { } } } + } public CardView(MageObject card) { diff --git a/Mage.Common/src/mage/view/CardsView.java b/Mage.Common/src/mage/view/CardsView.java index ee8cb7bb69f..d956b5f7e22 100644 --- a/Mage.Common/src/mage/view/CardsView.java +++ b/Mage.Common/src/mage/view/CardsView.java @@ -29,15 +29,16 @@ package mage.view; import mage.Constants.Zone; +import mage.MageObject; import mage.abilities.Ability; +import mage.abilities.effects.Effect; import mage.cards.Card; import mage.game.Game; import mage.game.GameState; import mage.game.permanent.Permanent; +import mage.target.targetpointer.TargetPointer; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.UUID; +import java.util.*; /** * @@ -73,7 +74,33 @@ public class CardsView extends LinkedHashMap { break; } if (sourceCard != null) { - this.put(ability.getId(), new AbilityView(ability, sourceCard.getName(), new CardView(sourceCard))); + AbilityView abilityView = new AbilityView(ability, sourceCard.getName(), new CardView(sourceCard)); + if (ability.getTargets().size() > 0) { + abilityView.setTargets(ability.getTargets()); + } else { + List abilityTargets = new ArrayList(); + for (Effect effect : ability.getEffects()) { + TargetPointer targetPointer = effect.getTargetPointer(); + if (targetPointer != null) { + List targetList = targetPointer.getTargets(game, ability); + abilityTargets.addAll(targetList); + } + } + if (!abilityTargets.isEmpty()) { + abilityView.overrideTargets(abilityTargets); + List names = new ArrayList(); + for (UUID uuid : abilityTargets) { + MageObject mageObject = game.getObject(uuid); + if (mageObject != null) { + names.add(mageObject.getName()); + } + } + if (!names.isEmpty()) { + abilityView.getRules().add("Targets: " + names.toString() + ""); + } + } + } + this.put(ability.getId(), abilityView); } } } diff --git a/Mage.Common/src/mage/view/GameView.java b/Mage.Common/src/mage/view/GameView.java index daece6866fc..fb6438775e9 100644 --- a/Mage.Common/src/mage/view/GameView.java +++ b/Mage.Common/src/mage/view/GameView.java @@ -85,9 +85,9 @@ public class GameView implements Serializable { Card card = game.getCard(stackObject.getSourceId()); if (card != null) { if (object != null) { - stack.put(stackObject.getId(), new StackAbilityView((StackAbility)stackObject, card.getName(), new CardView(card))); + stack.put(stackObject.getId(), new StackAbilityView(game, (StackAbility)stackObject, card.getName(), new CardView(card))); } else { - stack.put(stackObject.getId(), new StackAbilityView((StackAbility)stackObject, "", new CardView(card))); + stack.put(stackObject.getId(), new StackAbilityView(game, (StackAbility)stackObject, "", new CardView(card))); } if (card.canTransform()) { updateLatestCardView(game, card, stackObject.getId()); diff --git a/Mage.Common/src/mage/view/StackAbilityView.java b/Mage.Common/src/mage/view/StackAbilityView.java index ed0455415e9..60d5534d375 100644 --- a/Mage.Common/src/mage/view/StackAbilityView.java +++ b/Mage.Common/src/mage/view/StackAbilityView.java @@ -28,7 +28,9 @@ package mage.view; +import mage.MageObject; import mage.abilities.effects.Effect; +import mage.game.Game; import mage.game.stack.StackAbility; import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.TargetPointer; @@ -47,7 +49,7 @@ public class StackAbilityView extends CardView { private String sourceName; private CardView sourceCard; - public StackAbilityView(StackAbility ability, String sourceName, CardView sourceCard) { + public StackAbilityView(Game game, StackAbility ability, String sourceName, CardView sourceCard) { this.id = ability.getId(); this.name = "Ability"; this.sourceName = sourceName; @@ -62,10 +64,10 @@ public class StackAbilityView extends CardView { this.superTypes = ability.getSupertype(); this.color = ability.getColor(); this.manaCost = ability.getManaCost().getSymbols(); - updateTargets(ability); + updateTargets(game, ability); } - private void updateTargets(StackAbility ability) { + private void updateTargets(Game game, StackAbility ability) { if (ability.getTargets().size() > 0) { setTargets(ability.getTargets()); } else { @@ -78,8 +80,17 @@ public class StackAbilityView extends CardView { } if (targetList.size() > 0) { overrideTargets(targetList); + List names = new ArrayList(); + for (UUID uuid : targetList) { + MageObject mageObject = game.getObject(uuid); + if (mageObject != null) { + names.add(mageObject.getName()); + } + } + if (!names.isEmpty()) { + getRules().add("Targets: " + names.toString() + ""); + } } - } }