From: <ev...@us...> - 2010-10-11 17:20:44
|
Revision: 1443 http://rails.svn.sourceforge.net/rails/?rev=1443&view=rev Author: evos Date: 2010-10-11 17:20:38 +0000 (Mon, 11 Oct 2010) Log Message: ----------- At each OR turn end, check if the company order has changed (if dynamic; this does not apply to 1825) Modified Paths: -------------- trunk/18xx/rails/game/OperatingRound.java trunk/18xx/rails/game/Round.java trunk/18xx/rails/game/specific/_1825/OperatingRound_1825.java Modified: trunk/18xx/rails/game/OperatingRound.java =================================================================== --- trunk/18xx/rails/game/OperatingRound.java 2010-10-11 17:19:02 UTC (rev 1442) +++ trunk/18xx/rails/game/OperatingRound.java 2010-10-11 17:20:38 UTC (rev 1443) @@ -1523,6 +1523,20 @@ if (++index >= operatingCompanies.size()) { return false; } + + // Check if the operating order has changed + List<PublicCompanyI> newOperatingCompanies + = setOperatingCompanies (operatingCompanies.viewList(), operatingCompany.get()); + PublicCompanyI company; + for (int i=0; i<newOperatingCompanies.size(); i++) { + company = newOperatingCompanies.get(i); + log.debug("+++ Index "+i+" new company="+company.getName()); + if (company != operatingCompanies.get(i)) { + log.debug("+++ Index "+i+" old company="+operatingCompanies.get(i).getName()); + operatingCompanies.move(company, i); + } + } + setOperatingCompany(operatingCompanies.get(index)); } Modified: trunk/18xx/rails/game/Round.java =================================================================== --- trunk/18xx/rails/game/Round.java 2010-10-11 17:19:02 UTC (rev 1442) +++ trunk/18xx/rails/game/Round.java 2010-10-11 17:20:38 UTC (rev 1443) @@ -260,26 +260,44 @@ /** Set the operating companies in their current acting order */ public List<PublicCompanyI> setOperatingCompanies() { + return setOperatingCompanies (null, null); + } + public List<PublicCompanyI> setOperatingCompanies(List<PublicCompanyI> oldOperatingCompanies, + PublicCompanyI lastOperatingCompany) { + Map<Integer, PublicCompanyI> operatingCompanies = new TreeMap<Integer, PublicCompanyI>(); StockSpaceI space; int key; int minorNo = 0; + boolean reorder = gameManager.isDynamicOperatingOrder() + && oldOperatingCompanies != null && lastOperatingCompany != null; + + int lastOperatingCompanyIndex; + if (reorder) { + lastOperatingCompanyIndex = oldOperatingCompanies.indexOf(lastOperatingCompany); + } else { + lastOperatingCompanyIndex = -1; + } + for (PublicCompanyI company : companyManager.getAllPublicCompanies()) { if (!canCompanyOperateThisRound(company)) continue; - // Key must put companies in reverse operating order, because sort - // is ascending. - if (company.hasStockPrice()) { + if (reorder + && oldOperatingCompanies.indexOf(company) <= lastOperatingCompanyIndex) { + // Companies that have operated this round get lowest keys + key = oldOperatingCompanies.indexOf(company); + } else if (company.hasStockPrice()) { + // Key must put companies in reverse operating order, because sort + // is ascending. space = company.getCurrentSpace(); - key = - 1000000 * (999 - space.getPrice()) + 10000 - * (99 - space.getColumn()) + 100 - * space.getRow() - + space.getStackPosition(company); + key = 1000000 * (999 - space.getPrice()) + + 10000 * (99 - space.getColumn()) + + 100 * (space.getRow()+1) + + space.getStackPosition(company); } else { - key = ++minorNo; + key = 50 + ++minorNo; } operatingCompanies.put(new Integer(key), company); } Modified: trunk/18xx/rails/game/specific/_1825/OperatingRound_1825.java =================================================================== --- trunk/18xx/rails/game/specific/_1825/OperatingRound_1825.java 2010-10-11 17:19:02 UTC (rev 1442) +++ trunk/18xx/rails/game/specific/_1825/OperatingRound_1825.java 2010-10-11 17:20:38 UTC (rev 1443) @@ -1,13 +1,8 @@ package rails.game.specific._1825; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; -import rails.game.GameManagerI; -import rails.game.OperatingRound; -import rails.game.PublicCompanyI; +import rails.game.*; public class OperatingRound_1825 extends OperatingRound { @@ -21,7 +16,7 @@ int space; int key; for (PublicCompanyI company : companyManager.getAllPublicCompanies()) { - if (!canCompanyOperateThisRound(company)) continue; + if (!canCompanyOperateThisRound(company)) continue; // Key must put companies in reverse operating order, because sort // is ascending. space = company.getIPOPrice(); @@ -34,7 +29,12 @@ key = 1000000 - (space - company.getFormationOrderIndex()); operatingCompanies.put(new Integer(key), company); } - return new ArrayList<PublicCompanyI>(operatingCompanies.values()); - } - + return new ArrayList<PublicCompanyI>(operatingCompanies.values()); + } + + @Override + public List<PublicCompanyI> setOperatingCompanies(List<PublicCompanyI> oldOperatingCompanies, + PublicCompanyI lastOperatingCompany) { + return setOperatingCompanies(); + } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |