mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Player.playSpellAbility moved to HumanPlayer since that method is used only for it.
Removed a restriction that made impossible to play abilities from opoonent's cards
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -13761,11 +13761,11 @@ src/main/java/forge/card/spellability/AbilityManaPart.java svneol=native#text/pl
|
|||||||
src/main/java/forge/card/spellability/AbilityStatic.java svneol=native#text/plain
|
src/main/java/forge/card/spellability/AbilityStatic.java svneol=native#text/plain
|
||||||
src/main/java/forge/card/spellability/AbilitySub.java svneol=native#text/plain
|
src/main/java/forge/card/spellability/AbilitySub.java svneol=native#text/plain
|
||||||
src/main/java/forge/card/spellability/AbilityTriggered.java svneol=native#text/plain
|
src/main/java/forge/card/spellability/AbilityTriggered.java svneol=native#text/plain
|
||||||
|
src/main/java/forge/card/spellability/HumanPlaySpellAbility.java svneol=native#text/plain
|
||||||
src/main/java/forge/card/spellability/ISpellAbility.java -text
|
src/main/java/forge/card/spellability/ISpellAbility.java -text
|
||||||
src/main/java/forge/card/spellability/Spell.java svneol=native#text/plain
|
src/main/java/forge/card/spellability/Spell.java svneol=native#text/plain
|
||||||
src/main/java/forge/card/spellability/SpellAbility.java svneol=native#text/plain
|
src/main/java/forge/card/spellability/SpellAbility.java svneol=native#text/plain
|
||||||
src/main/java/forge/card/spellability/SpellAbilityCondition.java svneol=native#text/plain
|
src/main/java/forge/card/spellability/SpellAbilityCondition.java svneol=native#text/plain
|
||||||
src/main/java/forge/card/spellability/SpellAbilityRequirements.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/card/spellability/SpellAbilityRestriction.java svneol=native#text/plain
|
src/main/java/forge/card/spellability/SpellAbilityRestriction.java svneol=native#text/plain
|
||||||
src/main/java/forge/card/spellability/SpellAbilityStackInstance.java svneol=native#text/plain
|
src/main/java/forge/card/spellability/SpellAbilityStackInstance.java svneol=native#text/plain
|
||||||
src/main/java/forge/card/spellability/SpellAbilityVariables.java svneol=native#text/plain
|
src/main/java/forge/card/spellability/SpellAbilityVariables.java svneol=native#text/plain
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import forge.game.GameState;
|
|||||||
import forge.game.ai.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.ai.ComputerUtilCard;
|
import forge.game.ai.ComputerUtilCard;
|
||||||
import forge.game.player.AIPlayer;
|
import forge.game.player.AIPlayer;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
@@ -202,7 +203,7 @@ public class PlayEffect extends SpellAbilityEffect {
|
|||||||
boolean noManaCost = sa.hasParam("WithoutManaCost");
|
boolean noManaCost = sa.hasParam("WithoutManaCost");
|
||||||
if (controller.isHuman()) {
|
if (controller.isHuman()) {
|
||||||
SpellAbility newSA = noManaCost ? tgtSA.copyWithNoManaCost() : tgtSA;
|
SpellAbility newSA = noManaCost ? tgtSA.copyWithNoManaCost() : tgtSA;
|
||||||
game.getActionPlay().playSpellAbility(newSA, activator);
|
game.getActionPlay().playSpellAbility(newSA, (HumanPlayer)activator);
|
||||||
} else {
|
} else {
|
||||||
if (tgtSA instanceof Spell) { // Isn't it ALWAYS a spell?
|
if (tgtSA instanceof Spell) { // Isn't it ALWAYS a spell?
|
||||||
Spell spell = (Spell) tgtSA;
|
Spell spell = (Spell) tgtSA;
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ import forge.game.ai.ComputerUtilCost;
|
|||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.AIPlayer;
|
import forge.game.player.AIPlayer;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
@@ -2913,7 +2914,7 @@ public class CardFactoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (card.getController().isHuman()) {
|
if (card.getController().isHuman()) {
|
||||||
game.getActionPlay().playSpellAbilityNoStack(card.getController(), origSA);
|
game.getActionPlay().playSpellAbilityNoStack((HumanPlayer)card.getController(), origSA);
|
||||||
} else {
|
} else {
|
||||||
ComputerUtil.playNoStack((AIPlayer) card.getController(), origSA, game);
|
ComputerUtil.playNoStack((AIPlayer) card.getController(), origSA, game);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import forge.card.spellability.SpellAbility;
|
|||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.ai.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.AIPlayer;
|
import forge.game.player.AIPlayer;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
@@ -239,7 +240,7 @@ public class ReplacementHandler {
|
|||||||
Player player = replacementEffect.getHostCard().getController();
|
Player player = replacementEffect.getHostCard().getController();
|
||||||
//player.getController().playNoStack()
|
//player.getController().playNoStack()
|
||||||
if (player.isHuman()) {
|
if (player.isHuman()) {
|
||||||
game.getActionPlay().playSpellAbilityNoStack(player, effectSA);
|
game.getActionPlay().playSpellAbilityNoStack((HumanPlayer)player, effectSA);
|
||||||
} else {
|
} else {
|
||||||
ComputerUtil.playNoStack((AIPlayer) player, effectSA, game);
|
ComputerUtil.playNoStack((AIPlayer) player, effectSA, game);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,11 +37,11 @@ import forge.game.zone.Zone;
|
|||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public class SpellAbilityRequirements {
|
public class HumanPlaySpellAbility {
|
||||||
private final SpellAbility ability;
|
private final SpellAbility ability;
|
||||||
private final CostPayment payment;
|
private final CostPayment payment;
|
||||||
|
|
||||||
public SpellAbilityRequirements(final SpellAbility sa, final CostPayment cp) {
|
public HumanPlaySpellAbility(final SpellAbility sa, final CostPayment cp) {
|
||||||
this.ability = sa;
|
this.ability = sa;
|
||||||
this.payment = cp;
|
this.payment = cp;
|
||||||
}
|
}
|
||||||
@@ -39,6 +39,7 @@ import forge.game.GlobalRuleChange;
|
|||||||
import forge.game.ai.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.AIPlayer;
|
import forge.game.player.AIPlayer;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
@@ -419,7 +420,7 @@ public class TriggerHandler {
|
|||||||
|
|
||||||
if (regtrig.isStatic()) {
|
if (regtrig.isStatic()) {
|
||||||
if (wrapperAbility.getActivatingPlayer().isHuman()) {
|
if (wrapperAbility.getActivatingPlayer().isHuman()) {
|
||||||
game.getActionPlay().playSpellAbilityNoStack(wrapperAbility.getActivatingPlayer(), wrapperAbility);
|
game.getActionPlay().playSpellAbilityNoStack((HumanPlayer)wrapperAbility.getActivatingPlayer(), wrapperAbility);
|
||||||
} else {
|
} else {
|
||||||
wrapperAbility.doTrigger(isMandatory, (AIPlayer)wrapperAbility.getActivatingPlayer());
|
wrapperAbility.doTrigger(isMandatory, (AIPlayer)wrapperAbility.getActivatingPlayer());
|
||||||
ComputerUtil.playNoStack((AIPlayer)wrapperAbility.getActivatingPlayer(), wrapperAbility, game);
|
ComputerUtil.playNoStack((AIPlayer)wrapperAbility.getActivatingPlayer(), wrapperAbility, game);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import forge.card.spellability.Target;
|
|||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.ai.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.AIPlayer;
|
import forge.game.player.AIPlayer;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.GuiDialog;
|
import forge.gui.GuiDialog;
|
||||||
|
|
||||||
@@ -414,7 +415,7 @@ public class WrappedAbility extends Ability implements ISpellAbility {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (getActivatingPlayer().isHuman()) {
|
if (getActivatingPlayer().isHuman()) {
|
||||||
game.getActionPlay().playSpellAbilityNoStack(getActivatingPlayer(), sa, true);
|
game.getActionPlay().playSpellAbilityNoStack((HumanPlayer)getActivatingPlayer(), sa, true);
|
||||||
} else {
|
} else {
|
||||||
// commented out because i don't think this should be called
|
// commented out because i don't think this should be called
|
||||||
// again here
|
// again here
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import forge.game.GameType;
|
|||||||
import forge.game.MatchController;
|
import forge.game.MatchController;
|
||||||
import forge.game.ai.ComputerUtil;
|
import forge.game.ai.ComputerUtil;
|
||||||
import forge.game.player.AIPlayer;
|
import forge.game.player.AIPlayer;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
@@ -130,7 +131,7 @@ public class InputMulligan extends InputBase {
|
|||||||
if (GuiDialog.confirm(c, "Use " + c +"'s ability?")) {
|
if (GuiDialog.confirm(c, "Use " + c +"'s ability?")) {
|
||||||
// If we ever let the AI memorize cards in the players
|
// If we ever let the AI memorize cards in the players
|
||||||
// hand, this would be a place to do so.
|
// hand, this would be a place to do so.
|
||||||
game.getActionPlay().playSpellAbilityNoStack(p, effect);
|
game.getActionPlay().playSpellAbilityNoStack((HumanPlayer)p, effect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public class InputPassPriority extends InputBase {
|
|||||||
Runnable execAbility = new Runnable() {
|
Runnable execAbility = new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
player.playSpellAbility(card, ab);
|
((HumanPlayer)player).playSpellAbility(card, ab);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,12 @@ import forge.card.cost.CostPayment;
|
|||||||
import forge.card.mana.ManaCostBeingPaid;
|
import forge.card.mana.ManaCostBeingPaid;
|
||||||
import forge.card.mana.ManaCostShard;
|
import forge.card.mana.ManaCostShard;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.SpellAbilityRequirements;
|
import forge.card.spellability.HumanPlaySpellAbility;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.card.staticability.StaticAbility;
|
import forge.card.staticability.StaticAbility;
|
||||||
import forge.control.input.InputPayManaSimple;
|
import forge.control.input.InputPayManaSimple;
|
||||||
import forge.game.ai.ComputerUtilCard;
|
import forge.game.ai.ComputerUtilCard;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
@@ -76,7 +77,7 @@ public class GameActionPlay {
|
|||||||
}
|
}
|
||||||
final CostPayment payment = new CostPayment(sa.getPayCosts(), sa);
|
final CostPayment payment = new CostPayment(sa.getPayCosts(), sa);
|
||||||
|
|
||||||
final SpellAbilityRequirements req = new SpellAbilityRequirements(sa, payment);
|
final HumanPlaySpellAbility req = new HumanPlaySpellAbility(sa, payment);
|
||||||
req.fillRequirements(false, true, false);
|
req.fillRequirements(false, true, false);
|
||||||
} else {
|
} else {
|
||||||
if (sa.isSpell()) {
|
if (sa.isSpell()) {
|
||||||
@@ -351,7 +352,7 @@ public class GameActionPlay {
|
|||||||
* @param sa
|
* @param sa
|
||||||
* a {@link forge.card.spellability.SpellAbility} object.
|
* a {@link forge.card.spellability.SpellAbility} object.
|
||||||
*/
|
*/
|
||||||
public final void playSpellAbility(SpellAbility sa, Player activator) {
|
public final void playSpellAbility(SpellAbility sa, HumanPlayer activator) {
|
||||||
FThreads.checkEDT("Player.playSpellAbility", false);
|
FThreads.checkEDT("Player.playSpellAbility", false);
|
||||||
sa.setActivatingPlayer(activator);
|
sa.setActivatingPlayer(activator);
|
||||||
|
|
||||||
@@ -389,7 +390,7 @@ public class GameActionPlay {
|
|||||||
payment = new CostPayment(sa.getPayCosts(), sa);
|
payment = new CostPayment(sa.getPayCosts(), sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
final SpellAbilityRequirements req = new SpellAbilityRequirements(sa, payment);
|
final HumanPlaySpellAbility req = new HumanPlaySpellAbility(sa, payment);
|
||||||
req.fillRequirements(false, false, false);
|
req.fillRequirements(false, false, false);
|
||||||
} else {
|
} else {
|
||||||
ManaCostBeingPaid manaCost = new ManaCostBeingPaid(sa.getManaCost());
|
ManaCostBeingPaid manaCost = new ManaCostBeingPaid(sa.getManaCost());
|
||||||
@@ -424,10 +425,10 @@ public class GameActionPlay {
|
|||||||
* @param skipTargeting
|
* @param skipTargeting
|
||||||
* a boolean.
|
* a boolean.
|
||||||
*/
|
*/
|
||||||
public final void playSpellAbilityNoStack(final Player human, final SpellAbility sa) {
|
public final void playSpellAbilityNoStack(final HumanPlayer human, final SpellAbility sa) {
|
||||||
playSpellAbilityNoStack(human, sa, false);
|
playSpellAbilityNoStack(human, sa, false);
|
||||||
}
|
}
|
||||||
public final void playSpellAbilityNoStack(final Player human, final SpellAbility sa, boolean useOldTargets) {
|
public final void playSpellAbilityNoStack(final HumanPlayer human, final SpellAbility sa, boolean useOldTargets) {
|
||||||
sa.setActivatingPlayer(human);
|
sa.setActivatingPlayer(human);
|
||||||
|
|
||||||
if (sa.getPayCosts() != null) {
|
if (sa.getPayCosts() != null) {
|
||||||
@@ -437,7 +438,7 @@ public class GameActionPlay {
|
|||||||
payment.changeCost();
|
payment.changeCost();
|
||||||
}
|
}
|
||||||
|
|
||||||
final SpellAbilityRequirements req = new SpellAbilityRequirements(sa, payment);
|
final HumanPlaySpellAbility req = new HumanPlaySpellAbility(sa, payment);
|
||||||
|
|
||||||
req.fillRequirements(useOldTargets, false, true);
|
req.fillRequirements(useOldTargets, false, true);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import java.util.Set;
|
|||||||
|
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.time.StopWatch;
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
@@ -19,6 +21,7 @@ import com.google.common.collect.Lists;
|
|||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardLists;
|
import forge.CardLists;
|
||||||
import forge.CardPredicates;
|
import forge.CardPredicates;
|
||||||
|
import forge.FThreads;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.trigger.TriggerHandler;
|
import forge.card.trigger.TriggerHandler;
|
||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
@@ -117,7 +120,13 @@ public class GameNew {
|
|||||||
boolean canSideBoard = !isFirstGame && gameType.isSideboardingAllowed() && hasSideboard;
|
boolean canSideBoard = !isFirstGame && gameType.isSideboardingAllowed() && hasSideboard;
|
||||||
|
|
||||||
if (canSideBoard) {
|
if (canSideBoard) {
|
||||||
psc.setCurrentDeck(player.getController().sideboard(psc.getCurrentDeck(), gameType));
|
StopWatch sw = new StopWatch();
|
||||||
|
sw.start();
|
||||||
|
System.out.println(FThreads.debugGetCurrThreadId() + " > " + "entering sideboard routine");
|
||||||
|
Deck sideboarded = player.getController().sideboard(psc.getCurrentDeck(), gameType);
|
||||||
|
sw.stop();
|
||||||
|
System.out.println(FThreads.debugGetCurrThreadId() + " > " + "sideboard routine returned after " + sw.getTime() + " ms");
|
||||||
|
psc.setCurrentDeck(sideboarded);
|
||||||
} else {
|
} else {
|
||||||
psc.restoreOriginalDeck();
|
psc.restoreOriginalDeck();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import forge.error.BugReporter;
|
|||||||
import forge.game.ai.AiProfileUtil;
|
import forge.game.ai.AiProfileUtil;
|
||||||
import forge.game.event.DuelOutcomeEvent;
|
import forge.game.event.DuelOutcomeEvent;
|
||||||
import forge.game.player.AIPlayer;
|
import forge.game.player.AIPlayer;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.game.player.LobbyPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerStatistics;
|
import forge.game.player.PlayerStatistics;
|
||||||
@@ -156,7 +157,7 @@ public class MatchController {
|
|||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Player localHuman = Aggregates.firstFieldEquals(currentGame.getPlayers(), Player.Accessors.FN_GET_TYPE, PlayerType.HUMAN);
|
HumanPlayer localHuman = (HumanPlayer) Aggregates.firstFieldEquals(currentGame.getPlayers(), Player.Accessors.FN_GET_TYPE, PlayerType.HUMAN);
|
||||||
FControl.SINGLETON_INSTANCE.setPlayer(localHuman);
|
FControl.SINGLETON_INSTANCE.setPlayer(localHuman);
|
||||||
CMatchUI.SINGLETON_INSTANCE.initMatch(currentGame.getRegisteredPlayers(), localHuman);
|
CMatchUI.SINGLETON_INSTANCE.initMatch(currentGame.getRegisteredPlayers(), localHuman);
|
||||||
CDock.SINGLETON_INSTANCE.onGameStarts(currentGame, localHuman);
|
CDock.SINGLETON_INSTANCE.onGameStarts(currentGame, localHuman);
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
|
import forge.card.spellability.Ability;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.InputSelectCards;
|
import forge.control.input.InputSelectCards;
|
||||||
import forge.control.input.InputSelectCardsFromList;
|
import forge.control.input.InputSelectCardsFromList;
|
||||||
@@ -57,6 +58,19 @@ public class HumanPlayer extends Player {
|
|||||||
c.getController().discard(c, sa);
|
c.getController().discard(c, sa);
|
||||||
} // input_discardNumUnless
|
} // input_discardNumUnless
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
|
* @param card
|
||||||
|
* @param ab
|
||||||
|
*/
|
||||||
|
public void playSpellAbility(Card c, SpellAbility ab) {
|
||||||
|
if (ab == Ability.PLAY_LAND_SURROGATE)
|
||||||
|
this.playLand(c);
|
||||||
|
else {
|
||||||
|
game.getActionPlay().playSpellAbility(ab, this);
|
||||||
|
}
|
||||||
|
game.getPhaseHandler().setPriority(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerType getType() {
|
public PlayerType getType() {
|
||||||
|
|||||||
@@ -2890,20 +2890,6 @@ public abstract class Player extends GameEntity implements Comparable<Player> {
|
|||||||
this.startingHandSize = shs;
|
this.startingHandSize = shs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Write javadoc for this method.
|
|
||||||
* @param card
|
|
||||||
* @param ab
|
|
||||||
*/
|
|
||||||
public void playSpellAbility(Card c, SpellAbility ab) {
|
|
||||||
if (ab == Ability.PLAY_LAND_SURROGATE)
|
|
||||||
this.playLand(c);
|
|
||||||
else {
|
|
||||||
game.getActionPlay().playSpellAbility(ab, this);
|
|
||||||
}
|
|
||||||
game.getPhaseHandler().setPriority(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Takes the top plane of the planar deck and put it face up in the command zone.
|
* Takes the top plane of the planar deck and put it face up in the command zone.
|
||||||
|
|||||||
@@ -364,14 +364,14 @@ public class PlayerControllerHuman extends PlayerController {
|
|||||||
@Override
|
@Override
|
||||||
public void playMiracle(SpellAbility miracle, Card card) {
|
public void playMiracle(SpellAbility miracle, Card card) {
|
||||||
if (GuiDialog.confirm(card, card + " - Drawn. Play for Miracle Cost?")) {
|
if (GuiDialog.confirm(card, card + " - Drawn. Play for Miracle Cost?")) {
|
||||||
game.getActionPlay().playSpellAbility(miracle, getPlayer());
|
game.getActionPlay().playSpellAbility(miracle, player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playMadness(SpellAbility madness) {
|
public void playMadness(SpellAbility madness) {
|
||||||
if (GuiDialog.confirm(madness.getSourceCard(), madness.getSourceCard() + " - Discarded. Pay Madness Cost?")) {
|
if (GuiDialog.confirm(madness.getSourceCard(), madness.getSourceCard() + " - Discarded. Pay Madness Cost?")) {
|
||||||
game.getActionPlay().playSpellAbility(madness, getPlayer());
|
game.getActionPlay().playSpellAbility(madness, player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ import forge.game.ai.ComputerUtilCost;
|
|||||||
import forge.game.event.SpellResolvedEvent;
|
import forge.game.event.SpellResolvedEvent;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.AIPlayer;
|
import forge.game.player.AIPlayer;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
import forge.gui.framework.EDocID;
|
import forge.gui.framework.EDocID;
|
||||||
@@ -1124,7 +1125,7 @@ public class MagicStack extends MyObservable {
|
|||||||
for (int i = size - 1; i >= 0; i--) {
|
for (int i = size - 1; i >= 0; i--) {
|
||||||
SpellAbility next = orderedSAs.get(i);
|
SpellAbility next = orderedSAs.get(i);
|
||||||
if (next.isTrigger()) {
|
if (next.isTrigger()) {
|
||||||
game.getActionPlay().playSpellAbility(next, activePlayer);
|
game.getActionPlay().playSpellAbility(next, (HumanPlayer)activePlayer);
|
||||||
} else {
|
} else {
|
||||||
this.add(next);
|
this.add(next);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import forge.GameEntity;
|
|||||||
import forge.ImageCache;
|
import forge.ImageCache;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.game.player.LobbyPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.framework.EDocID;
|
import forge.gui.framework.EDocID;
|
||||||
@@ -77,7 +78,7 @@ public enum CMatchUI {
|
|||||||
* @param numFieldPanels int
|
* @param numFieldPanels int
|
||||||
* @param numHandPanels int
|
* @param numHandPanels int
|
||||||
*/
|
*/
|
||||||
public void initMatch(final List<Player> players, Player localPlayer) {
|
public void initMatch(final List<Player> players, HumanPlayer localPlayer) {
|
||||||
// TODO fix for use with multiplayer
|
// TODO fix for use with multiplayer
|
||||||
|
|
||||||
final String[] indices = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(",");
|
final String[] indices = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(",");
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ import forge.control.input.Input;
|
|||||||
import forge.control.input.InputAttack;
|
import forge.control.input.InputAttack;
|
||||||
import forge.control.input.InputBlock;
|
import forge.control.input.InputBlock;
|
||||||
import forge.control.input.InputPayManaBase;
|
import forge.control.input.InputPayManaBase;
|
||||||
|
import forge.game.GameState;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
@@ -63,7 +65,7 @@ public class CField implements ICDoc {
|
|||||||
// The one who owns cards on this side of table
|
// The one who owns cards on this side of table
|
||||||
private final Player player;
|
private final Player player;
|
||||||
// Tho one who looks at screen and 'performs actions'
|
// Tho one who looks at screen and 'performs actions'
|
||||||
private final Player playerViewer;
|
private final HumanPlayer playerViewer;
|
||||||
private final VField view;
|
private final VField view;
|
||||||
private boolean initializedAlready = false;
|
private boolean initializedAlready = false;
|
||||||
|
|
||||||
@@ -155,9 +157,9 @@ public class CField implements ICDoc {
|
|||||||
* @param v0   {@link forge.gui.match.nonsingleton.VField}
|
* @param v0   {@link forge.gui.match.nonsingleton.VField}
|
||||||
* @param playerViewer
|
* @param playerViewer
|
||||||
*/
|
*/
|
||||||
public CField(final Player p0, final VField v0, Player playerViewer) {
|
public CField(final Player p0, final VField v0, HumanPlayer playerViewer) {
|
||||||
this.player = p0;
|
this.player = p0;
|
||||||
this.playerViewer = playerViewer;;
|
this.playerViewer = playerViewer;
|
||||||
this.view = v0;
|
this.view = v0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,13 +343,11 @@ public class CField implements ICDoc {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doAction(final Card c) {
|
protected void doAction(final Card c) {
|
||||||
if ( CField.this.player != CField.this.playerViewer )
|
final GameState game = player.getGame();
|
||||||
return;
|
final SpellAbility ab = CField.this.playerViewer.getController().getAbilityToPlay(game.getAbilitesOfCard(c, CField.this.playerViewer));
|
||||||
|
|
||||||
final SpellAbility ab = player.getController().getAbilityToPlay(player.getGame().getAbilitesOfCard(c, player));
|
|
||||||
if ( null != ab) {
|
if ( null != ab) {
|
||||||
FThreads.invokeInNewThread(new Runnable(){ @Override public void run(){
|
FThreads.invokeInNewThread(new Runnable(){ @Override public void run(){
|
||||||
player.playSpellAbility(c, ab);
|
CField.this.playerViewer.playSpellAbility(c, ab);
|
||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import net.miginfocom.swing.MigLayout;
|
|||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.mana.ManaPool;
|
import forge.card.mana.ManaPool;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
|
import forge.game.player.HumanPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.framework.DragCell;
|
import forge.gui.framework.DragCell;
|
||||||
@@ -111,7 +112,7 @@ public class VField implements IVDoc<CField> {
|
|||||||
* @param playerOnwer   {@link forge.game.player.Player}
|
* @param playerOnwer   {@link forge.game.player.Player}
|
||||||
* @param id0   {@link forge.gui.framework.EDocID}
|
* @param id0   {@link forge.gui.framework.EDocID}
|
||||||
*/
|
*/
|
||||||
public VField(final EDocID id0, final Player playerOnwer, Player playerViewer) {
|
public VField(final EDocID id0, final Player playerOnwer, HumanPlayer playerViewer) {
|
||||||
this.docID = id0;
|
this.docID = id0;
|
||||||
id0.setDoc(this);
|
id0.setDoc(this);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user