|
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.
|