diff options
Diffstat (limited to 'src/jrummikub')
-rw-r--r-- | src/jrummikub/control/RoundControl.java | 8 | ||||
-rw-r--r-- | src/jrummikub/control/turn/HumanTurnControl.java | 35 | ||||
-rw-r--r-- | src/jrummikub/control/turn/TurnControlFactory.java | 9 | ||||
-rw-r--r-- | src/jrummikub/model/PlayerSettings.java | 49 |
4 files changed, 86 insertions, 15 deletions
diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java index e507e74..671086f 100644 --- a/src/jrummikub/control/RoundControl.java +++ b/src/jrummikub/control/RoundControl.java @@ -95,8 +95,12 @@ public class RoundControl { view.getPlayerPanel().setEndTurnMode(inspectOnly, mayRedeal); - ITurnControl turnControl = new HumanTurnControl(roundState.getActivePlayer() - .getHand(), clonedTable, view, inspectOnly); + ITurnControl turnControl = roundState + .getActivePlayer() + .getPlayerSettings() + .getTurnControlFactory() + .create(roundState.getActivePlayer().getHand(), clonedTable, + view, inspectOnly); turnControl.getEndOfTurnEvent().add(new IListener() { @Override diff --git a/src/jrummikub/control/turn/HumanTurnControl.java b/src/jrummikub/control/turn/HumanTurnControl.java index 9b44f4e..399f547 100644 --- a/src/jrummikub/control/turn/HumanTurnControl.java +++ b/src/jrummikub/control/turn/HumanTurnControl.java @@ -34,7 +34,7 @@ public class HumanTurnControl extends AbstractTurnControl { private List<Stone> selectedStones = new ArrayList<Stone>(); private List<Connection> connections = new ArrayList<Connection>(); - + private boolean inspectOnly; /** @@ -50,7 +50,8 @@ public class HumanTurnControl extends AbstractTurnControl { * @param inspectOnly * the current turn doesn't allow any table manipulation */ - public HumanTurnControl(IHand hand, ITable table, IView view, boolean inspectOnly) { + public HumanTurnControl(IHand hand, ITable table, IView view, + boolean inspectOnly) { this.hand = hand; this.table = table; this.view = view; @@ -58,6 +59,21 @@ public class HumanTurnControl extends AbstractTurnControl { this.timer = new TurnTimer(view); } + /** + * Get a factory for this turn control + * + * @return factory + */ + public static TurnControlFactory getFactory() { + return new TurnControlFactory() { + @Override + public ITurnControl create(IHand hand, ITable table, IView view, + boolean inspectOnly) { + return new HumanTurnControl(hand, table, view, inspectOnly); + } + }; + } + /** Test only constructor **/ HumanTurnControl(IHand hand, ITable table, IView view, ITurnTimer testTimer) { this.hand = hand; @@ -80,13 +96,14 @@ public class HumanTurnControl extends AbstractTurnControl { connections.add(timer.getTimeRunOutEvent().add(endOfTurnListener)); connections.add(view.getPlayerPanel().getEndTurnEvent() .add(endOfTurnListener)); - - connections.add(view.getPlayerPanel().getRedealEvent().add(new IListener() { - @Override - public void handle() { - endOfTurn(true); - } - })); + + connections.add(view.getPlayerPanel().getRedealEvent() + .add(new IListener() { + @Override + public void handle() { + endOfTurn(true); + } + })); addHandPanelHandlers(); addStoneCollectionHandlers(); diff --git a/src/jrummikub/control/turn/TurnControlFactory.java b/src/jrummikub/control/turn/TurnControlFactory.java new file mode 100644 index 0000000..3af910b --- /dev/null +++ b/src/jrummikub/control/turn/TurnControlFactory.java @@ -0,0 +1,9 @@ +package jrummikub.control.turn; + +import jrummikub.model.IHand; +import jrummikub.model.ITable; +import jrummikub.view.IView; + +public interface TurnControlFactory { + public ITurnControl create(IHand hand, ITable table, IView view, boolean inspectOnly); +} diff --git a/src/jrummikub/model/PlayerSettings.java b/src/jrummikub/model/PlayerSettings.java index 5ba01b5..217b1fc 100644 --- a/src/jrummikub/model/PlayerSettings.java +++ b/src/jrummikub/model/PlayerSettings.java @@ -2,24 +2,46 @@ package jrummikub.model; import java.awt.Color; +import jrummikub.control.turn.HumanTurnControl; +import jrummikub.control.turn.TurnControlFactory; + /** * The settings of a player */ public class PlayerSettings { private String name; private Color color; + private TurnControlFactory turnControlFactory; /** + * Create a new player + * + * @param name + * the player's name + * @param color + * the player's color + * @param turnControlFactory + * the player's {@link TurnControlFactory} + */ + public PlayerSettings(String name, Color color, + TurnControlFactory turnControlFactory) { + this.name = name; + this.color = color; + this.turnControlFactory = turnControlFactory; + } + + /** * Create a new human player * * @param name - * the player's name + * the player's name * @param color - * the player's color + * the player's color */ public PlayerSettings(String name, Color color) { this.name = name; this.color = color; + this.turnControlFactory = HumanTurnControl.getFactory(); } /** @@ -44,7 +66,7 @@ public class PlayerSettings { * Sets the player's color * * @param color - * the new color + * the new color */ public void setColor(Color color) { this.color = color; @@ -54,9 +76,28 @@ public class PlayerSettings { * Sets the player's name * * @param name - * the new name + * the new name */ public void setName(String name) { this.name = name; } + + /** + * Set the player's TurnControlFactory + * + * @param turnControlFactory + * player's TurnControlFactory + */ + public void setTurnControlFactory(TurnControlFactory turnControlFactory) { + this.turnControlFactory = turnControlFactory; + } + + /** + * Get the player's TurnControlFactory + * + * @return player's TurnControlFactory + */ + public TurnControlFactory getTurnControlFactory() { + return turnControlFactory; + } } |