From d9e3978babd1630c77fecb170e21e3d4263cf5ba Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Wed, 3 Apr 2013 07:19:05 +0000 Subject: [PATCH] the remaining 2 methods used to play human's spells also moved to HumanPlayer GameActionPlay.java eliminated. --- .gitattributes | 1 - .../cardfactory/CardFactorySorceries.java | 3 +- src/main/java/forge/control/FControl.java | 8 +- src/main/java/forge/game/GameActionPlay.java | 75 ------------------- src/main/java/forge/game/GameActionUtil.java | 3 +- src/main/java/forge/game/GameState.java | 11 --- .../java/forge/game/player/HumanPlayer.java | 48 ++++++++++++ .../forge/game/player/PlayerControllerAi.java | 2 +- .../game/player/PlayerControllerHuman.java | 6 +- src/main/java/forge/gui/GuiDisplayUtil.java | 5 +- 10 files changed, 63 insertions(+), 99 deletions(-) delete mode 100644 src/main/java/forge/game/GameActionPlay.java diff --git a/.gitattributes b/.gitattributes index 3ef50bba9ad..3f6b8f4316a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -13891,7 +13891,6 @@ src/main/java/forge/deck/package-info.java svneol=native#text/plain src/main/java/forge/error/ExceptionHandler.java svneol=native#text/plain src/main/java/forge/error/package-info.java svneol=native#text/plain src/main/java/forge/game/GameAction.java svneol=native#text/plain -src/main/java/forge/game/GameActionPlay.java -text src/main/java/forge/game/GameActionUtil.java svneol=native#text/plain src/main/java/forge/game/GameEndReason.java -text src/main/java/forge/game/GameFormat.java -text diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java index 47fbdd47bf9..c7d2539eba0 100644 --- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java +++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java @@ -45,6 +45,7 @@ import forge.control.input.InputSelectCardsFromList; import forge.game.GameState; import forge.game.ai.ComputerUtil; import forge.game.player.AIPlayer; +import forge.game.player.HumanPlayer; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; @@ -225,7 +226,7 @@ public class CardFactorySorceries { JOptionPane.INFORMATION_MESSAGE); } } else { - Singletons.getModel().getGame().getActionPlay().playCardWithoutManaCost(playing, card.getController()); + ((HumanPlayer)card.getController()).playCardWithoutManaCost(playing); } chosen.remove(playing); } diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index 21d56e514c5..8589c833d54 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -34,7 +34,7 @@ import javax.swing.WindowConstants; import forge.Singletons; import forge.control.KeyboardShortcuts.Shortcut; import forge.game.ai.AiProfileUtil; -import forge.game.player.Player; +import forge.game.player.HumanPlayer; import forge.gui.SOverlayUtils; import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.VDeckEditorUI; @@ -284,8 +284,8 @@ public enum FControl { } /** @return {@link forge.game.player.Player} */ - private Player localPlayer; - public Player getPlayer() { + private HumanPlayer localPlayer; + public HumanPlayer getPlayer() { return localPlayer; } @@ -305,7 +305,7 @@ public enum FControl { * TODO: Write javadoc for this method. * @param localHuman */ - public void setPlayer(Player localHuman) { + public void setPlayer(HumanPlayer localHuman) { localPlayer = localHuman; } diff --git a/src/main/java/forge/game/GameActionPlay.java b/src/main/java/forge/game/GameActionPlay.java deleted file mode 100644 index 99724219ab2..00000000000 --- a/src/main/java/forge/game/GameActionPlay.java +++ /dev/null @@ -1,75 +0,0 @@ -package forge.game; - -import java.util.List; -import forge.Card; -import forge.FThreads; -import forge.card.ability.ApiType; -import forge.card.ability.effects.CharmEffect; -import forge.card.cost.CostPayment; -import forge.card.mana.ManaCostShard; -import forge.card.spellability.SpellAbility; -import forge.card.spellability.HumanPlaySpellAbility; -import forge.game.player.Player; - -/** - * TODO: Write javadoc for this type. - * - */ -public class GameActionPlay { - - private final GameState game; - - - public GameActionPlay(final GameState game0) { - game = game0; - } - - public final void playCardWithoutManaCost(final Card c, Player player) { - final List choices = c.getBasicSpells(); - // TODO add Buyback, Kicker, ... , spells here - - SpellAbility sa = player.getController().getAbilityToPlay(choices); - - if (sa == null) { - return; - } - - sa.setActivatingPlayer(player); - this.playSpellAbilityWithoutPayingManaCost(sa); - } - - /** - *

- * playSpellAbilityForFree. - *

- * - * @param sa - * a {@link forge.card.spellability.SpellAbility} object. - */ - public final void playSpellAbilityWithoutPayingManaCost(final SpellAbility sa) { - FThreads.checkEDT("GameActionPlay.playSpellAbilityWithoutPayingManaCost", false); - final Card source = sa.getSourceCard(); - - source.setSplitStateToPlayAbility(sa); - - if (sa.getPayCosts() != null) { - if (sa.getApi() == ApiType.Charm && !sa.isWrapper()) { - CharmEffect.makeChoices(sa); - } - final CostPayment payment = new CostPayment(sa.getPayCosts(), sa); - - final HumanPlaySpellAbility req = new HumanPlaySpellAbility(sa, payment); - req.fillRequirements(false, true, false); - } else { - if (sa.isSpell()) { - final Card c = sa.getSourceCard(); - if (!c.isCopiedSpell()) { - sa.setSourceCard(game.getAction().moveToStack(c)); - } - } - boolean x = sa.getSourceCard().getManaCost().getShardCount(ManaCostShard.X) > 0; - - game.getStack().add(sa, x); - } - } -} diff --git a/src/main/java/forge/game/GameActionUtil.java b/src/main/java/forge/game/GameActionUtil.java index d117414a1b5..73fb9ba5595 100644 --- a/src/main/java/forge/game/GameActionUtil.java +++ b/src/main/java/forge/game/GameActionUtil.java @@ -66,6 +66,7 @@ import forge.control.input.InputSelectCardsFromList; import forge.game.event.CardDamagedEvent; import forge.game.event.LifeLossEvent; import forge.game.player.AIPlayer; +import forge.game.player.HumanPlayer; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; @@ -274,7 +275,7 @@ public final class GameActionUtil { if (p.isHuman()) { if (GuiDialog.confirm(rippledCards[i], "Cast " + rippledCards[i].getName() + "?")) { - game.getActionPlay().playCardWithoutManaCost(rippledCards[i], p); + ((HumanPlayer)p).playCardWithoutManaCost(rippledCards[i]); revealed.remove(rippledCards[i]); } } else { diff --git a/src/main/java/forge/game/GameState.java b/src/main/java/forge/game/GameState.java index 395469436ae..95ab8dcae38 100644 --- a/src/main/java/forge/game/GameState.java +++ b/src/main/java/forge/game/GameState.java @@ -88,7 +88,6 @@ public class GameState { private long timestamp = 0; public final GameAction action; - public final GameActionPlay actionPlay; private final MatchController match; /** @@ -109,7 +108,6 @@ public class GameState { allPlayers = Collections.unmodifiableList(players); roIngamePlayers = Collections.unmodifiableList(ingamePlayers); action = new GameAction(this); - actionPlay = new GameActionPlay(this); stack = new MagicStack(this); phaseHandler = new PhaseHandler(this); @@ -663,15 +661,6 @@ public class GameState { } } - /** - * TODO: Write javadoc for this method. - * @return - */ - public GameActionPlay getActionPlay() { - // TODO Auto-generated method stub - return actionPlay; - } - public boolean mulliganned = false; public boolean hasMulliganned(){ return mulliganned; } public void setMulliganned(boolean value) { mulliganned = value; } diff --git a/src/main/java/forge/game/player/HumanPlayer.java b/src/main/java/forge/game/player/HumanPlayer.java index 1e329bd33b6..11a0651574b 100644 --- a/src/main/java/forge/game/player/HumanPlayer.java +++ b/src/main/java/forge/game/player/HumanPlayer.java @@ -28,6 +28,7 @@ import forge.card.ability.effects.CharmEffect; import forge.card.cost.Cost; import forge.card.cost.CostPayment; import forge.card.mana.ManaCostBeingPaid; +import forge.card.mana.ManaCostShard; import forge.card.spellability.Ability; import forge.card.spellability.HumanPlaySpellAbility; import forge.card.spellability.SpellAbility; @@ -229,5 +230,52 @@ public class HumanPlayer extends Player { } + public final void playCardWithoutManaCost(final Card c) { + final List choices = c.getBasicSpells(); + // TODO add Buyback, Kicker, ... , spells here + SpellAbility sa = controller.getAbilityToPlay(choices); + + if (sa == null) { + return; + } + + sa.setActivatingPlayer(this); + this.playSpellAbilityWithoutPayingManaCost(sa); + } + + /** + *

+ * playSpellAbilityForFree. + *

+ * + * @param sa + * a {@link forge.card.spellability.SpellAbility} object. + */ + public final void playSpellAbilityWithoutPayingManaCost(final SpellAbility sa) { + FThreads.checkEDT("GameActionPlay.playSpellAbilityWithoutPayingManaCost", false); + final Card source = sa.getSourceCard(); + + source.setSplitStateToPlayAbility(sa); + + if (sa.getPayCosts() != null) { + if (sa.getApi() == ApiType.Charm && !sa.isWrapper()) { + CharmEffect.makeChoices(sa); + } + final CostPayment payment = new CostPayment(sa.getPayCosts(), sa); + + final HumanPlaySpellAbility req = new HumanPlaySpellAbility(sa, payment); + req.fillRequirements(false, true, false); + } else { + if (sa.isSpell()) { + final Card c = sa.getSourceCard(); + if (!c.isCopiedSpell()) { + sa.setSourceCard(game.getAction().moveToStack(c)); + } + } + boolean x = sa.getSourceCard().getManaCost().getShardCount(ManaCostShard.X) > 0; + + game.getStack().add(sa, x); + } + } } // end HumanPlayer class diff --git a/src/main/java/forge/game/player/PlayerControllerAi.java b/src/main/java/forge/game/player/PlayerControllerAi.java index 5760322bc4f..5af7fda17f2 100644 --- a/src/main/java/forge/game/player/PlayerControllerAi.java +++ b/src/main/java/forge/game/player/PlayerControllerAi.java @@ -68,7 +68,7 @@ public class PlayerControllerAi extends PlayerController { } else if (abilities.size() == 1) { return abilities.get(0); } else { - return GuiChoose.oneOrNone("Choose", abilities); // some day network interaction will be here + return GuiChoose.oneOrNone("Choose ability for AI to play", abilities); // some day network interaction will be here } } diff --git a/src/main/java/forge/game/player/PlayerControllerHuman.java b/src/main/java/forge/game/player/PlayerControllerHuman.java index 54b951f445c..10ecb1cd17f 100644 --- a/src/main/java/forge/game/player/PlayerControllerHuman.java +++ b/src/main/java/forge/game/player/PlayerControllerHuman.java @@ -104,7 +104,7 @@ public class PlayerControllerHuman extends PlayerController { */ public void playFromSuspend(Card c) { c.setSuspendCast(true); - game.getActionPlay().playCardWithoutManaCost(c, c.getOwner()); + player.playCardWithoutManaCost(c); } /* (non-Javadoc) @@ -122,7 +122,7 @@ public class PlayerControllerHuman extends PlayerController { boolean result = GuiDialog.confirm(cascadedCard, question.toString()); if ( result ) - game.getActionPlay().playCardWithoutManaCost(cascadedCard, getPlayer()); + player.playCardWithoutManaCost(cascadedCard); return result; } @@ -131,7 +131,7 @@ public class PlayerControllerHuman extends PlayerController { */ @Override public void playSpellAbilityForFree(SpellAbility copySA) { - game.getActionPlay().playSpellAbilityWithoutPayingManaCost(copySA); + player.playSpellAbilityWithoutPayingManaCost(copySA); } /** diff --git a/src/main/java/forge/gui/GuiDisplayUtil.java b/src/main/java/forge/gui/GuiDisplayUtil.java index 543e5506373..b723be45366 100644 --- a/src/main/java/forge/gui/GuiDisplayUtil.java +++ b/src/main/java/forge/gui/GuiDisplayUtil.java @@ -632,9 +632,10 @@ public final class GuiDisplayUtil { FThreads.invokeInNewThread(new Runnable() { @Override public void run() { + game.getAction().moveToHand(forgeCard); // this is really needed (for rollbacks at least) + // Human player is choosing targets for an ability controlled by chosen player. sa.setActivatingPlayer(p); - game.getAction().moveToHand(forgeCard); // this is really needed - game.getActionPlay().playSpellAbilityWithoutPayingManaCost(sa); + Singletons.getControl().getPlayer().playSpellAbilityWithoutPayingManaCost(sa); } }); }