mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
InputControl is invariant of player type
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -13679,6 +13679,7 @@ src/main/java/forge/game/player/AIPlayer.java svneol=native#text/plain
|
|||||||
src/main/java/forge/game/player/Computer.java svneol=native#text/plain
|
src/main/java/forge/game/player/Computer.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/player/ComputerAIGeneral.java svneol=native#text/plain
|
src/main/java/forge/game/player/ComputerAIGeneral.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/player/ComputerAIInput.java svneol=native#text/plain
|
src/main/java/forge/game/player/ComputerAIInput.java svneol=native#text/plain
|
||||||
|
src/main/java/forge/game/player/ComputerAiInputBlock.java -text
|
||||||
src/main/java/forge/game/player/ComputerUtil.java svneol=native#text/plain
|
src/main/java/forge/game/player/ComputerUtil.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/player/ComputerUtilAttack.java svneol=native#text/plain
|
src/main/java/forge/game/player/ComputerUtilAttack.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/player/ComputerUtilBlock.java svneol=native#text/plain
|
src/main/java/forge/game/player/ComputerUtilBlock.java svneol=native#text/plain
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public class InputAttack extends Input {
|
|||||||
Singletons.getModel().getGame().getPhaseHandler().repeatPhase();
|
Singletons.getModel().getGame().getPhaseHandler().repeatPhase();
|
||||||
}
|
}
|
||||||
|
|
||||||
Singletons.getModel().getGame().getPhaseHandler().setPlayerMayHavePriority(false);
|
Singletons.getModel().getGame().getPhaseHandler().setPlayersPriorityPermission(false);
|
||||||
Singletons.getModel().getMatch().getInput().resetInput();
|
Singletons.getModel().getMatch().getInput().resetInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.util.List;
|
|||||||
import forge.Card;
|
import forge.Card;
|
||||||
|
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
|
import forge.game.GameState;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
@@ -96,12 +97,13 @@ public class InputBlock extends Input {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void selectButtonOK() {
|
public final void selectButtonOK() {
|
||||||
if (CombatUtil.finishedMandatoryBlocks(Singletons.getModel().getGame().getCombat(), defender)) {
|
final GameState game = Singletons.getModel().getGame();
|
||||||
|
if (CombatUtil.finishedMandatoryBlocks(game.getCombat(), defender)) {
|
||||||
// Done blocking
|
// Done blocking
|
||||||
ButtonUtil.reset();
|
ButtonUtil.reset();
|
||||||
CombatUtil.orderMultipleCombatants(Singletons.getModel().getGame().getCombat());
|
CombatUtil.orderMultipleCombatants(game.getCombat());
|
||||||
|
|
||||||
Singletons.getModel().getGame().getPhaseHandler().passPriority();
|
game.getPhaseHandler().passPriority();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import forge.game.GameState;
|
|||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
import forge.game.player.PlayerController;
|
||||||
import forge.game.zone.MagicStack;
|
import forge.game.zone.MagicStack;
|
||||||
import forge.util.MyObservable;
|
import forge.util.MyObservable;
|
||||||
|
|
||||||
@@ -189,7 +190,7 @@ public class InputControl extends MyObservable implements java.io.Serializable {
|
|||||||
|
|
||||||
// If the Phase we're in doesn't allow for Priority, return null to move
|
// If the Phase we're in doesn't allow for Priority, return null to move
|
||||||
// to next phase
|
// to next phase
|
||||||
if (!handler.mayPlayerHavePriority()) {
|
if (!handler.isPlayerPriorityAllowed()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,18 +206,13 @@ public class InputControl extends MyObservable implements java.io.Serializable {
|
|||||||
|
|
||||||
case COMBAT_DECLARE_BLOCKERS:
|
case COMBAT_DECLARE_BLOCKERS:
|
||||||
stack.freezeStack();
|
stack.freezeStack();
|
||||||
boolean isUnderAttack = game.getCombat().isPlayerAttacked(priority);
|
|
||||||
if (!isUnderAttack) { // noone attacks you
|
if (game.getCombat().isPlayerAttacked(priority)) {
|
||||||
handler.passPriority();
|
return priority.getController().getBlockInput();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priority.isHuman()) {
|
// noone attacks you
|
||||||
return new InputBlock(priority);
|
handler.passPriority();
|
||||||
}
|
|
||||||
|
|
||||||
// ai is under attack
|
|
||||||
priority.getController().getAiInput().getComputer().declareBlockers();
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
case CLEANUP:
|
case CLEANUP:
|
||||||
@@ -234,20 +230,19 @@ public class InputControl extends MyObservable implements java.io.Serializable {
|
|||||||
// *********************
|
// *********************
|
||||||
// Special phases handled above, everything else is handled simply by
|
// Special phases handled above, everything else is handled simply by
|
||||||
// priority
|
// priority
|
||||||
if (priority == null) {
|
if (priority == null)
|
||||||
return null;
|
return null;
|
||||||
} else if (priority.isHuman()) {
|
|
||||||
boolean prioritySkip = priority.getController().mayAutoPass(phase)
|
PlayerController pc = priority.getController();
|
||||||
|| priority.getController().isUiSetToSkipPhase(playerTurn, phase);
|
|
||||||
if (this.game.getStack().isEmpty() && prioritySkip) {
|
boolean prioritySkip = pc.mayAutoPass(phase) || pc.isUiSetToSkipPhase(playerTurn, phase);
|
||||||
handler.passPriority();
|
if (this.game.getStack().isEmpty() && prioritySkip) {
|
||||||
return null;
|
handler.passPriority();
|
||||||
} else {
|
return null;
|
||||||
priority.getController().autoPassCancel(); // probably cancel, since something has happened
|
} else
|
||||||
return new InputPassPriority();
|
pc.autoPassCancel(); // probably cancel, since something has happened
|
||||||
}
|
|
||||||
} else // if (playerTurn.isComputer()) {
|
return pc.getDefaultInput();
|
||||||
return priority.getController().getAiInput();
|
|
||||||
} // getInput()
|
} // getInput()
|
||||||
|
|
||||||
} // InputControl
|
} // InputControl
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
p.clearSlowtripList();
|
p.clearSlowtripList();
|
||||||
}
|
}
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
} else {
|
} else {
|
||||||
game.getUpkeep().executeUntil(this.getPlayerTurn());
|
game.getUpkeep().executeUntil(this.getPlayerTurn());
|
||||||
game.getUpkeep().executeAt();
|
game.getUpkeep().executeAt();
|
||||||
@@ -267,7 +267,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
|
|
||||||
case DRAW:
|
case DRAW:
|
||||||
if (getTurn() == 1 || PhaseUtil.skipDraw(this.getPlayerTurn())) {
|
if (getTurn() == 1 || PhaseUtil.skipDraw(this.getPlayerTurn())) {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
} else {
|
} else {
|
||||||
this.getPlayerTurn().drawCards(1, true);
|
this.getPlayerTurn().drawCards(1, true);
|
||||||
}
|
}
|
||||||
@@ -282,13 +282,13 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
case COMBAT_BEGIN:
|
case COMBAT_BEGIN:
|
||||||
//PhaseUtil.verifyCombat();
|
//PhaseUtil.verifyCombat();
|
||||||
if (playerTurn.isSkippingCombat()) {
|
if (playerTurn.isSkippingCombat()) {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case COMBAT_DECLARE_ATTACKERS:
|
case COMBAT_DECLARE_ATTACKERS:
|
||||||
if (playerTurn.isSkippingCombat()) {
|
if (playerTurn.isSkippingCombat()) {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
playerTurn.removeKeyword("Skip your next combat phase.");
|
playerTurn.removeKeyword("Skip your next combat phase.");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -298,7 +298,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
PhaseUtil.handleDeclareAttackers(game.getCombat());
|
PhaseUtil.handleDeclareAttackers(game.getCombat());
|
||||||
CombatUtil.showCombat();
|
CombatUtil.showCombat();
|
||||||
} else {
|
} else {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// we can skip AfterBlockers and AfterAttackers if necessary
|
// we can skip AfterBlockers and AfterAttackers if necessary
|
||||||
@@ -307,7 +307,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
game.getCombat().verifyCreaturesInPlay();
|
game.getCombat().verifyCreaturesInPlay();
|
||||||
CombatUtil.showCombat();
|
CombatUtil.showCombat();
|
||||||
} else {
|
} else {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -318,19 +318,19 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
PhaseUtil.handleDeclareBlockers(game);
|
PhaseUtil.handleDeclareBlockers(game);
|
||||||
CombatUtil.showCombat();
|
CombatUtil.showCombat();
|
||||||
} else {
|
} else {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case COMBAT_FIRST_STRIKE_DAMAGE:
|
case COMBAT_FIRST_STRIKE_DAMAGE:
|
||||||
if (!this.inCombat()) {
|
if (!this.inCombat()) {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
} else {
|
} else {
|
||||||
game.getCombat().verifyCreaturesInPlay();
|
game.getCombat().verifyCreaturesInPlay();
|
||||||
|
|
||||||
// no first strikers, skip this step
|
// no first strikers, skip this step
|
||||||
if (!game.getCombat().assignCombatDamage(true)) {
|
if (!game.getCombat().assignCombatDamage(true)) {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
} else {
|
} else {
|
||||||
game.getCombat().dealAssignedDamage();
|
game.getCombat().dealAssignedDamage();
|
||||||
game.getAction().checkStateEffects();
|
game.getAction().checkStateEffects();
|
||||||
@@ -341,12 +341,12 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
|
|
||||||
case COMBAT_DAMAGE:
|
case COMBAT_DAMAGE:
|
||||||
if (!this.inCombat()) {
|
if (!this.inCombat()) {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
} else {
|
} else {
|
||||||
game.getCombat().verifyCreaturesInPlay();
|
game.getCombat().verifyCreaturesInPlay();
|
||||||
|
|
||||||
if (!game.getCombat().assignCombatDamage(false)) {
|
if (!game.getCombat().assignCombatDamage(false)) {
|
||||||
this.setPlayerMayHavePriority(false);
|
this.setPlayersPriorityPermission(false);
|
||||||
} else {
|
} else {
|
||||||
game.getCombat().dealAssignedDamage();
|
game.getCombat().dealAssignedDamage();
|
||||||
game.getAction().checkStateEffects();
|
game.getAction().checkStateEffects();
|
||||||
@@ -392,7 +392,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.mayPlayerHavePriority()) {
|
if (this.isPlayerPriorityAllowed()) {
|
||||||
// Run triggers if phase isn't being skipped
|
// Run triggers if phase isn't being skipped
|
||||||
final HashMap<String, Object> runParams = new HashMap<String, Object>();
|
final HashMap<String, Object> runParams = new HashMap<String, Object>();
|
||||||
runParams.put("Phase", this.getPhase().Name);
|
runParams.put("Phase", this.getPhase().Name);
|
||||||
@@ -427,7 +427,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
*/
|
*/
|
||||||
public final void nextPhase() {
|
public final void nextPhase() {
|
||||||
|
|
||||||
this.setPlayerMayHavePriority(true); // PlayerPriorityAllowed = false;
|
this.setPlayersPriorityPermission(true); // PlayerPriorityAllowed = false;
|
||||||
|
|
||||||
// If the Stack isn't empty why is nextPhase being called?
|
// If the Stack isn't empty why is nextPhase being called?
|
||||||
if (game.getStack().size() != 0) {
|
if (game.getStack().size() != 0) {
|
||||||
@@ -787,7 +787,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
if (game.getStack().isEmpty()) {
|
if (game.getStack().isEmpty()) {
|
||||||
this.setPriority(this.getPlayerTurn()); // this needs to be set early as we exit the phase
|
this.setPriority(this.getPlayerTurn()); // this needs to be set early as we exit the phase
|
||||||
// end phase
|
// end phase
|
||||||
setPlayerMayHavePriority(true);
|
setPlayersPriorityPermission(true);
|
||||||
nextPhase();
|
nextPhase();
|
||||||
return;
|
return;
|
||||||
} else if (!game.getStack().hasSimultaneousStackEntries()) {
|
} else if (!game.getStack().hasSimultaneousStackEntries()) {
|
||||||
@@ -810,7 +810,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
* @param needToNextPhase
|
* @param needToNextPhase
|
||||||
* a boolean.
|
* a boolean.
|
||||||
*/
|
*/
|
||||||
public final void setPlayerMayHavePriority(final boolean mayHavePriority) {
|
public final void setPlayersPriorityPermission(final boolean mayHavePriority) {
|
||||||
this.isPlayerPriorityAllowed = mayHavePriority;
|
this.isPlayerPriorityAllowed = mayHavePriority;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -821,7 +821,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
*
|
*
|
||||||
* @return a boolean.
|
* @return a boolean.
|
||||||
*/
|
*/
|
||||||
public final boolean mayPlayerHavePriority() {
|
public final boolean isPlayerPriorityAllowed() {
|
||||||
return this.isPlayerPriorityAllowed;
|
return this.isPlayerPriorityAllowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ public class PhaseUtil {
|
|||||||
// phase is skipped
|
// phase is skipped
|
||||||
|
|
||||||
if (PhaseUtil.skipUntap(turn)) {
|
if (PhaseUtil.skipUntap(turn)) {
|
||||||
game.getPhaseHandler().setPlayerMayHavePriority(false);
|
game.getPhaseHandler().setPlayersPriorityPermission(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ public class PhaseUtil {
|
|||||||
// otherwise land seems to stay tapped when it is really untapped
|
// otherwise land seems to stay tapped when it is really untapped
|
||||||
// AllZone.getHumanPlayer().getZone(ZoneType.Battlefield).updateObservers();
|
// AllZone.getHumanPlayer().getZone(ZoneType.Battlefield).updateObservers();
|
||||||
|
|
||||||
game.getPhaseHandler().setPlayerMayHavePriority(false);
|
game.getPhaseHandler().setPlayersPriorityPermission(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -52,8 +52,9 @@ public class AIPlayer extends Player {
|
|||||||
* a {@link java.lang.String} object.
|
* a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public AIPlayer(final LobbyPlayer player, final GameState game) {
|
public AIPlayer(final LobbyPlayer player, final GameState game) {
|
||||||
super(player, game);
|
super(player, game, new PlayerController());
|
||||||
getController().setAiInput(new ComputerAIInput(new ComputerAIGeneral(this, game)));
|
getController().setDefaultInput(new ComputerAIInput(new ComputerAIGeneral(this, game)));
|
||||||
|
getController().setBlockInput(new ComputerAiInputBlock(game, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -38,13 +38,6 @@ public interface Computer {
|
|||||||
*/
|
*/
|
||||||
void declareAttackers();
|
void declareAttackers();
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* declare_blockers.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
void declareBlockers(); // this is called after when the Human or Computer
|
|
||||||
// blocks
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ import forge.card.spellability.SpellPermanent;
|
|||||||
import forge.card.trigger.Trigger;
|
import forge.card.trigger.Trigger;
|
||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.phase.CombatUtil;
|
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -285,14 +284,13 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
for (final Card element : att) {
|
for (final Card element : att) {
|
||||||
// tapping of attackers happens after Propaganda is paid for
|
// tapping of attackers happens after Propaganda is paid for
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append("Computer just assigned ");
|
sb.append("Computer just assigned ").append(element.getName()).append(" as an attacker.");
|
||||||
sb.append(element.getName()).append(" as an attacker.");
|
|
||||||
Log.debug(sb.toString());
|
Log.debug(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
player.getZone(ZoneType.Battlefield).updateObservers();
|
player.getZone(ZoneType.Battlefield).updateObservers();
|
||||||
|
|
||||||
game.getPhaseHandler().setPlayerMayHavePriority(false);
|
game.getPhaseHandler().setPlayersPriorityPermission(false);
|
||||||
|
|
||||||
// ai is about to attack, cancel all phase skipping
|
// ai is about to attack, cancel all phase skipping
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
@@ -300,22 +298,6 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* declare_blockers.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public final void declareBlockers() {
|
|
||||||
final List<Card> blockers = player.getCreaturesInPlay();
|
|
||||||
|
|
||||||
game.setCombat(ComputerUtilBlock.getBlockers(player, game.getCombat(), blockers));
|
|
||||||
|
|
||||||
CombatUtil.orderMultipleCombatants(game.getCombat());
|
|
||||||
|
|
||||||
game.getPhaseHandler().setPlayerMayHavePriority(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
42
src/main/java/forge/game/player/ComputerAiInputBlock.java
Normal file
42
src/main/java/forge/game/player/ComputerAiInputBlock.java
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
package forge.game.player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import forge.Card;
|
||||||
|
import forge.control.input.Input;
|
||||||
|
import forge.game.GameState;
|
||||||
|
import forge.game.phase.CombatUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this type.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ComputerAiInputBlock extends Input {
|
||||||
|
|
||||||
|
private final GameState game;
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for Constructor.
|
||||||
|
* @param game
|
||||||
|
* @param player
|
||||||
|
*/
|
||||||
|
public ComputerAiInputBlock(GameState game, Player player) {
|
||||||
|
super();
|
||||||
|
this.game = game;
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Player player;
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -2253562658069995572L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showMessage() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
final List<Card> blockers = player.getCreaturesInPlay();
|
||||||
|
game.setCombat(ComputerUtilBlock.getBlockers(player, game.getCombat(), blockers));
|
||||||
|
CombatUtil.orderMultipleCombatants(game.getCombat());
|
||||||
|
game.getPhaseHandler().setPlayersPriorityPermission(false);
|
||||||
|
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,6 +24,8 @@ import forge.Card;
|
|||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
|
import forge.control.input.InputBlock;
|
||||||
|
import forge.control.input.InputPassPriority;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
@@ -51,7 +53,9 @@ public class HumanPlayer extends Player {
|
|||||||
* a {@link java.lang.String} object.
|
* a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public HumanPlayer(final LobbyPlayer player, GameState game) {
|
public HumanPlayer(final LobbyPlayer player, GameState game) {
|
||||||
super(player, game);
|
super(player, game, new PlayerController());
|
||||||
|
getController().setDefaultInput(new InputPassPriority());
|
||||||
|
getController().setBlockInput(new InputBlock(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
// //////////////
|
// //////////////
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ public abstract class Player extends GameEntity implements Comparable<Player> {
|
|||||||
* @param myPoisonCounters
|
* @param myPoisonCounters
|
||||||
* a int.
|
* a int.
|
||||||
*/
|
*/
|
||||||
public Player(LobbyPlayer lobbyPlayer0, GameState game0) {
|
public Player(LobbyPlayer lobbyPlayer0, GameState game0, PlayerController pc) {
|
||||||
lobbyPlayer = lobbyPlayer0;
|
lobbyPlayer = lobbyPlayer0;
|
||||||
game = game0;
|
game = game0;
|
||||||
for (final ZoneType z : Player.ALL_ZONES) {
|
for (final ZoneType z : Player.ALL_ZONES) {
|
||||||
@@ -188,7 +188,9 @@ public abstract class Player extends GameEntity implements Comparable<Player> {
|
|||||||
this.zones.put(z, toPut);
|
this.zones.put(z, toPut);
|
||||||
}
|
}
|
||||||
this.setName(lobbyPlayer.getName());
|
this.setName(lobbyPlayer.getName());
|
||||||
controller = new PlayerController(this);
|
pc.setPlayer(this);
|
||||||
|
controller = pc;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final PlayerStatistics getStats() {
|
public final PlayerStatistics getStats() {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
|
import forge.control.input.Input;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
import forge.gui.match.CMatchUI;
|
import forge.gui.match.CMatchUI;
|
||||||
@@ -18,18 +19,20 @@ public class PlayerController {
|
|||||||
|
|
||||||
// Should keep some 'Model' of player here.
|
// Should keep some 'Model' of player here.
|
||||||
// Yet I have little idea of what is model now.
|
// Yet I have little idea of what is model now.
|
||||||
private final Player player;
|
private Player player;
|
||||||
|
|
||||||
private PhaseType autoPassUntil = null;
|
private PhaseType autoPassUntil = null;
|
||||||
|
|
||||||
private ComputerAIInput aiInput;
|
private Input defaultInput;
|
||||||
|
private Input blockInput;
|
||||||
|
|
||||||
public final ComputerAIInput getAiInput() {
|
public final Input getDefaultInput() {
|
||||||
return aiInput;
|
return defaultInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerController(Player player0) {
|
public PlayerController() {}
|
||||||
player = player0;
|
void setPlayer(Player p) {
|
||||||
|
player = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,15 +54,12 @@ public class PlayerController {
|
|||||||
|
|
||||||
|
|
||||||
public boolean isUiSetToSkipPhase(final Player turn, final PhaseType phase) {
|
public boolean isUiSetToSkipPhase(final Player turn, final PhaseType phase) {
|
||||||
return player.equals(Singletons.getControl().getPlayer()) && !CMatchUI.SINGLETON_INSTANCE.stopAtPhase(turn, phase);
|
boolean isLocalPlayer = player.equals(Singletons.getControl().getPlayer());
|
||||||
|
return isLocalPlayer && !CMatchUI.SINGLETON_INSTANCE.stopAtPhase(turn, phase);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void setDefaultInput(Input input) {
|
||||||
* TODO: Write javadoc for this method.
|
defaultInput = input;
|
||||||
* @param computerAIInput
|
|
||||||
*/
|
|
||||||
public void setAiInput(ComputerAIInput computerAIInput) {
|
|
||||||
aiInput = computerAIInput;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -75,4 +75,13 @@ public class PlayerController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Input to use when player has to declare blockers */
|
||||||
|
public Input getBlockInput() {
|
||||||
|
return blockInput;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setBlockInput(Input blockInput0) {
|
||||||
|
this.blockInput = blockInput0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1033,7 +1033,7 @@ public class MagicStack extends MyObservable {
|
|||||||
|
|
||||||
game.getAction().checkStateEffects();
|
game.getAction().checkStateEffects();
|
||||||
|
|
||||||
game.getPhaseHandler().setPlayerMayHavePriority(true);
|
game.getPhaseHandler().setPlayersPriorityPermission(true);
|
||||||
|
|
||||||
this.curResolvingCard = null;
|
this.curResolvingCard = null;
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class GuiInput extends MyObservable implements Observer {
|
|||||||
if (tmp != null) {
|
if (tmp != null) {
|
||||||
// System.out.println(ph.getPlayerTurn() + "'s " + ph.getPhase() + ", priority of " + ph.getPriorityPlayer() + " @ input is " + tmp.getClass().getName() );
|
// System.out.println(ph.getPlayerTurn() + "'s " + ph.getPhase() + ", priority of " + ph.getPriorityPlayer() + " @ input is " + tmp.getClass().getName() );
|
||||||
this.setInput(tmp);
|
this.setInput(tmp);
|
||||||
} else if (!ph.mayPlayerHavePriority()) {
|
} else if (!ph.isPlayerPriorityAllowed()) {
|
||||||
//System.out.println("cannot have priority, forced to pass");
|
//System.out.println("cannot have priority, forced to pass");
|
||||||
ph.passPriority();
|
ph.passPriority();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user