From: Stefan F. <ste...@us...> - 2010-02-26 08:04:27
|
Update of /cvsroot/rails/18xx/rails/game In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv4652/rails/game Modified Files: OperatingRound.java Log Message: Fix of the undo tile lay bug (ID : 2954642, 2954984) After undo the number of tile lays is not updated correctly. TileLaysPerColour is state variable. Adds GenericState class. Index: OperatingRound.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/OperatingRound.java,v retrieving revision 1.107 retrieving revision 1.108 diff -C2 -d -r1.107 -r1.108 *** OperatingRound.java 24 Feb 2010 21:09:23 -0000 1.107 --- OperatingRound.java 26 Feb 2010 08:04:14 -0000 1.108 *************** *** 12,16 **** import rails.game.state.EnumState; import rails.game.state.IntegerState; ! import rails.game.state.State; import rails.util.LocalText; --- 12,16 ---- import rails.game.state.EnumState; import rails.game.state.IntegerState; ! import rails.game.state.GenericState; import rails.util.LocalText; *************** *** 47,52 **** protected List<LayTile> currentNormalTileLays = new ArrayList<LayTile>(); ! protected Map<String, Integer> tileLaysPerColour = ! new HashMap<String, Integer>(); protected List<LayBaseToken> currentNormalTokenLays = --- 47,53 ---- protected List<LayTile> currentNormalTileLays = new ArrayList<LayTile>(); ! // protected Map<String, Integer> tileLaysPerColour = ! // new HashMap<String, Integer>(); ! protected GenericState<Map<String,Integer>> tileLaysPerColourState = null; protected List<LayBaseToken> currentNormalTokenLays = *************** *** 446,450 **** protected boolean checkNormalTileLay(TileI tile, boolean update) { ! if (tileLaysPerColour.isEmpty()) return false; String colour = tile.getColourName(); --- 447,453 ---- protected boolean checkNormalTileLay(TileI tile, boolean update) { ! ! Map<String,Integer> tileLaysPerColour = tileLaysPerColourState.getObject(); ! if (tileLaysPerColour.isEmpty()) return false; String colour = tile.getColourName(); *************** *** 463,476 **** * different colours may be laid. THIS MAY NOT BE TRUE FOR ALL GAMES! */ if (oldAllowedNumber <= 1) { ! tileLaysPerColour.clear(); log.debug("No more normal tile lays allowed"); currentNormalTileLays.clear(); } else { ! tileLaysPerColour.clear(); // Remove all other colours ! tileLaysPerColour.put(colour, new Integer(oldAllowedNumber - 1)); log.debug((oldAllowedNumber - 1) + " more " + colour + " tile lays allowed"); } return true; --- 466,484 ---- * different colours may be laid. THIS MAY NOT BE TRUE FOR ALL GAMES! */ + + Map<String,Integer> tileLaysPerColourUpdated = new HashMap<String, Integer>(); // new (empty) map + if (oldAllowedNumber <= 1) { ! // tileLaysPerColour.clear(); log.debug("No more normal tile lays allowed"); currentNormalTileLays.clear(); } else { ! // tileLaysPerColour.clear(); // Remove all other colours ! tileLaysPerColourUpdated.put(colour, new Integer(oldAllowedNumber - 1)); log.debug((oldAllowedNumber - 1) + " more " + colour + " tile lays allowed"); } + + tileLaysPerColourState.set(tileLaysPerColourUpdated); return true; *************** *** 1230,1234 **** if (step == GameDef.OrStep.LAY_TRACK) { ! getNormalTileLays(); } else if (step == GameDef.OrStep.LAY_TOKEN) { --- 1238,1242 ---- if (step == GameDef.OrStep.LAY_TRACK) { ! // getNormalTileLays(); } else if (step == GameDef.OrStep.LAY_TOKEN) { *************** *** 1256,1262 **** protected void getNormalTileLays() { ! tileLaysPerColour = new HashMap<String, Integer>(getCurrentPhase().getTileColours()); // Clone ! // it. int allowedNumber; for (String colour : tileLaysPerColour.keySet()) { --- 1264,1270 ---- protected void getNormalTileLays() { ! Map<String,Integer> tileLaysPerColour = new HashMap<String, Integer>(getCurrentPhase().getTileColours()); // Clone ! int allowedNumber; for (String colour : tileLaysPerColour.keySet()) { *************** *** 1265,1268 **** --- 1273,1279 ---- tileLaysPerColour.put(colour, new Integer(allowedNumber)); } + + // store state + tileLaysPerColourState = new GenericState<Map<String,Integer>>("tileLaysPerColour", tileLaysPerColour); } *************** *** 1271,1274 **** --- 1282,1288 ---- /* Normal tile lays */ currentNormalTileLays.clear(); + + Map<String,Integer> tileLaysPerColour = (Map<String,Integer>)(tileLaysPerColourState.getObject()); + if (!tileLaysPerColour.isEmpty()) { currentNormalTileLays.add(new LayTile(tileLaysPerColour)); *************** *** 2144,2147 **** --- 2158,2162 ---- nextStep (GameDef.OrStep.LAY_TOKEN); } else { + getNormalTileLays(); // new: only called once per turn ? setStep (GameDef.OrStep.LAY_TRACK); } |