From: Erik V. <ev...@us...> - 2010-01-18 18:49:42
|
Update of /cvsroot/rails/18xx/rails/game In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv21858/rails/game Modified Files: Round.java StockRound.java TreasuryShareRound.java Log Message: Initial implementation of Autopass and RequestTurn Index: TreasuryShareRound.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/TreasuryShareRound.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** TreasuryShareRound.java 15 Jan 2010 19:55:59 -0000 1.17 --- TreasuryShareRound.java 18 Jan 2010 18:49:30 -0000 1.18 *************** *** 509,513 **** */ @Override ! public boolean done(String playerName) { currentPlayer = getCurrentPlayer(); --- 509,514 ---- */ @Override ! // Autopassing does not apply here ! public boolean done(String playerName, boolean hasAutopassed) { currentPlayer = getCurrentPlayer(); Index: Round.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/Round.java,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** Round.java 15 Jan 2010 19:55:59 -0000 1.35 --- Round.java 18 Jan 2010 18:49:20 -0000 1.36 *************** *** 12,17 **** import rails.common.GuiHints; import rails.game.action.*; ! import rails.game.move.CashMove; ! import rails.game.move.MoveStack; import rails.game.special.SpecialPropertyI; import rails.game.state.BooleanState; --- 12,16 ---- import rails.common.GuiHints; import rails.game.action.*; ! import rails.game.move.*; import rails.game.special.SpecialPropertyI; import rails.game.state.BooleanState; *************** *** 45,48 **** --- 44,53 ---- protected MoveStack moveStack = null; + + /** Autopasses */ + protected List<Player> autopasses = null; + protected List<Player> canRequestTurn = null; + protected List<Player> hasRequestedTurn = null; + /** * Constructor with the GameManager, will call setGameManager with the parameter to initialize *************** *** 425,427 **** --- 430,472 ---- } + public boolean requestTurn (Player player) { + if (canRequestTurn (player)) { + if (hasRequestedTurn == null) hasRequestedTurn = new ArrayList<Player>(2); + if (!hasRequestedTurn.contains(player)) hasRequestedTurn.add(player); + return true; + } + return false; + } + + public boolean canRequestTurn (Player player) { + return canRequestTurn != null && canRequestTurn.contains(player); + } + + public void setCanRequestTurn (Player player, boolean value) { + if (canRequestTurn == null) canRequestTurn = new ArrayList<Player>(4); + if (value && !canRequestTurn.contains(player)) { + new AddToList<Player>(canRequestTurn, player, "CanRequestTurn"); + } else if (!value && canRequestTurn.contains(player)) { + new RemoveFromList<Player>(canRequestTurn, player, "CanRequestTurn"); + } + } + + public void setAutopass (Player player, boolean value) { + if (autopasses == null) autopasses = new ArrayList<Player>(4); + if (value && !autopasses.contains(player)) { + new AddToList<Player>(autopasses, player, "Autopasses"); + } else if (!value && autopasses.contains(player)) { + new RemoveFromList<Player>(autopasses, player, "Autopasses"); + } + } + + public boolean hasAutopassed (Player player) { + return autopasses != null && autopasses.contains(player); + } + + public List<Player> getAutopasses() { + return autopasses; + } + + } Index: StockRound.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/StockRound.java,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** StockRound.java 15 Jan 2010 19:55:59 -0000 1.55 --- StockRound.java 18 Jan 2010 18:49:20 -0000 1.56 *************** *** 5,10 **** import rails.common.GuiDef; import rails.game.action.*; ! import rails.game.move.CashMove; ! import rails.game.move.DoubleMapChange; import rails.game.special.*; import rails.game.state.*; --- 5,9 ---- import rails.common.GuiDef; import rails.game.action.*; ! import rails.game.move.*; import rails.game.special.*; import rails.game.state.*; *************** *** 41,45 **** protected HashMap<Player, HashMap<PublicCompanyI, Object>> playersThatSoldThisRound = new HashMap<Player, HashMap<PublicCompanyI, Object>>(); - /** HashMap per player */ /* Rule constants */ --- 40,43 ---- *************** *** 112,118 **** --- 110,123 ---- } else { possibleActions.add(new NullAction(NullAction.PASS)); + possibleActions.add(new NullAction(NullAction.AUTOPASS)); } } + if (getAutopasses() != null) { + for (Player player : getAutopasses()) { + possibleActions.add(new RequestTurn(player)); + } + } + return true; } *************** *** 394,399 **** case NullAction.PASS: case NullAction.DONE: ! result = done(playerName); break; } --- 399,407 ---- case NullAction.PASS: case NullAction.DONE: ! result = done(playerName, false); break; + case NullAction.AUTOPASS: + result = done(playerName, true); + break; } *************** *** 416,419 **** --- 424,431 ---- result = useSpecialProperty((UseSpecialProperty) action); + } else if (action instanceof RequestTurn) { + + result = requestTurn ((RequestTurn)action); + } else if (!!(result = processGameSpecificAction(action))) { *************** *** 1119,1125 **** * @return False if an error is found. */ ! public boolean done(String playerName) { ! currentPlayer = getCurrentPlayer(); if (!playerName.equals(currentPlayer.getName())) { --- 1131,1137 ---- * @return False if an error is found. */ ! public boolean done(String playerName, boolean hasAutopassed) { ! //currentPlayer = getCurrentPlayer(); if (!playerName.equals(currentPlayer.getName())) { *************** *** 1134,1139 **** } else { numPasses.add(1); ! ReportBuffer.add(LocalText.getText("PASSES", ! currentPlayer.getName())); } --- 1146,1160 ---- } else { numPasses.add(1); ! if (hasAutopassed) { ! if (!hasAutopassed(currentPlayer)) { ! setAutopass (currentPlayer, true); ! setCanRequestTurn (currentPlayer, true); ! } ! ReportBuffer.add(LocalText.getText("Autopasses", ! currentPlayer.getName())); ! } else { ! ReportBuffer.add(LocalText.getText("PASSES", ! currentPlayer.getName())); ! } } *************** *** 1176,1182 **** --- 1197,1229 ---- } + protected boolean requestTurn (RequestTurn action) { + + Player requestingPlayer = playerManager.getPlayerByName(action.getRequestingPlayerName()); + + boolean result = canRequestTurn(requestingPlayer); + + if (!result) { + DisplayBuffer.add(LocalText.getText("CannotRequestTurn", + requestingPlayer.getName())); + return false; + } + + moveStack.start(false); + if (hasAutopassed(requestingPlayer)) { + setAutopass(requestingPlayer, false); + } else { + new AddToList<Player>(hasRequestedTurn, requestingPlayer, "HasRequestedTurn"); + } + + return true; + } + protected void finishTurn() { setNextPlayer(); sellPrices.clear(); + if (hasAutopassed(currentPlayer)) { + // Process a pass for a player that has set Autopass + done (currentPlayer.getName(), true); + } } *************** *** 1287,1291 **** if (player.getPortfolio().getShare(company) + number * company.getShareUnit() - //> gameManager.getPlayerShareLimit() > getGameParameterAsInt(GameDef.Parm.PLAYER_SHARE_LIMIT) && !company.getCurrentSpace().isNoHoldLimit()) return false; --- 1334,1337 ---- *************** *** 1322,1333 **** - //public static void setNoSaleInFirstSR() { - // noSaleInFirstSR = true; - //} - - //public static void setNoSaleIfNotOperated() { - // noSaleIfNotOperated = true; - //} - protected boolean noSaleInFirstSR() { return (Boolean) gameManager.getGameParameter(GameDef.Parm.NO_SALE_IN_FIRST_SR); --- 1368,1371 ---- *************** *** 1352,1354 **** --- 1390,1393 ---- return toString(); } + } |