From: Erik V. <ev...@us...> - 2008-12-24 14:55:20
|
Update of /cvsroot/rails/18xx/rails/game/action In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv2811/rails/game/action Modified Files: MergeCompanies.java Log Message: On merging, only ask the "replace token" question if a token can actually legitimately be laid. (The exceptional case of tile #583 (18EU brown Paris) is not yet covered: two bases of one company in one station is not yet excluded). Index: MergeCompanies.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/action/MergeCompanies.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** MergeCompanies.java 4 Jun 2008 19:00:29 -0000 1.3 --- MergeCompanies.java 24 Dec 2008 14:55:11 -0000 1.4 *************** *** 23,26 **** --- 23,27 ---- transient protected List<PublicCompanyI> targetCompanies; protected String targetCompanyNames; + protected List<Boolean> canReplaceToken; // Client-side settings *************** *** 40,49 **** --- 41,60 ---- this.targetCompanies = targetCompanies; StringBuffer b = new StringBuffer(); + canReplaceToken = new ArrayList<Boolean>(targetCompanies.size()); for (PublicCompanyI target : targetCompanies) { if (b.length() > 0) b.append(","); if (target == null) { b.append("null"); + canReplaceToken.add(false); } else { b.append(target.getName()); + canReplaceToken.add(target.getNumberOfFreeBaseTokens() > 0 + && (!mergingCompany.getHomeHex().hasTokenOfCompany(target) + || mergingCompany.getHomeHex().getCurrentTile().allowsMultipleBasesOfOneCompany())); + /* The above does not yet take care of cases where a tile where two + * bases of the same company are allowed has different multi-slot + * stations (e.g. the 18EU brown Paris tile #583). + * Duplicate tokens in one station are not yet prevented here. + */ } } *************** *** 62,65 **** --- 73,80 ---- } + public boolean canReplaceToken(int index) { + return canReplaceToken.get(index); + } + public PublicCompanyI getSelectedTargetCompany() { return selectedTargetCompany; *************** *** 100,107 **** } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { ! in.defaultReadObject(); CompanyManagerI cmgr = Game.getCompanyManager(); --- 115,130 ---- } + @SuppressWarnings("unchecked") private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { ! //in.defaultReadObject(); ! // Custom reading for backwards compatibility ! ObjectInputStream.GetField fields = in.readFields(); ! mergingCompanyName = (String) fields.get("mergingCompanyName", mergingCompanyName); ! targetCompanyNames = (String) fields.get("targetCompanyNames", targetCompanyNames); ! canReplaceToken = (List<Boolean>) fields.get("canReplaceToken", canReplaceToken); ! selectedTargetCompanyName = (String) fields.get("selectedTargetCompanyName", selectedTargetCompanyName); ! replaceToken = fields.get("replaceToken", replaceToken); CompanyManagerI cmgr = Game.getCompanyManager(); |