|
From: <ev...@us...> - 2010-08-21 19:36:52
|
Revision: 1398
http://rails.svn.sourceforge.net/rails/?rev=1398&view=rev
Author: evos
Date: 2010-08-21 19:36:46 +0000 (Sat, 21 Aug 2010)
Log Message:
-----------
Fixed: 18EU FMER did not start correctly if 5-train buyer went bankrupt as prersident of last OR company
Modified Paths:
--------------
trunk/18xx/LocalisedText.properties
trunk/18xx/rails/game/GameManager.java
trunk/18xx/rails/game/specific/_18EU/GameManager_18EU.java
trunk/18xx/rails/game/specific/_18EU/OperatingRound_18EU.java
Modified: trunk/18xx/LocalisedText.properties
===================================================================
--- trunk/18xx/LocalisedText.properties 2010-08-21 19:34:52 UTC (rev 1397)
+++ trunk/18xx/LocalisedText.properties 2010-08-21 19:36:46 UTC (rev 1398)
@@ -125,6 +125,8 @@
ComesWithPresidency=Comes with {0} {1}% presidency certificate
Companies=Companies
CompanyAlreadyStarted={0} has already been started.
+CompanyCloses={0} closes
+CompanyClosesAt={0} closes because price token reaches square {1}
CompanyDiscardsTrain={0} discards a {1}-train to Pool
CompanyDoesNotExist=Company {0} does not exist
CompanyDoesNotOwnTrain=Company {0} does not own a {1}-train
Modified: trunk/18xx/rails/game/GameManager.java
===================================================================
--- trunk/18xx/rails/game/GameManager.java 2010-08-21 19:34:52 UTC (rev 1397)
+++ trunk/18xx/rails/game/GameManager.java 2010-08-21 19:36:46 UTC (rev 1398)
@@ -356,7 +356,7 @@
if (endOfGameTag != null) {
Tag forcedSellingTag = endOfGameTag.getChild("ForcedSelling");
if (forcedSellingTag != null) {
- forcedSellingCompanyDump =
+ forcedSellingCompanyDump =
forcedSellingTag.getAttributeAsBoolean("CompanyDump", true);
}
if (endOfGameTag.getChild("Bankruptcy") != null) {
@@ -725,7 +725,7 @@
// check if other companies can be dumped
createRound (ShareSellingRound.class, interruptedRound)
- .start(player, cashToRaise, cashNeedingCompany,
+ .start(player, cashToRaise, cashNeedingCompany,
!problemDumpOtherCompanies || forcedSellingCompanyDump);
// the last parameter indicates if the dump of other companies is allowed, either this is explicit or
// the action does not require that check
@@ -883,7 +883,7 @@
private boolean processGameActions(GameAction gameAction) {
// Process undo/redo centrally
boolean result = false;
-
+
int index = gameAction.getmoveStackIndex();
switch (gameAction.getMode()) {
case GameAction.SAVE:
@@ -916,7 +916,7 @@
return result;
}
-
+
/* (non-Javadoc)
* @see rails.game.GameManagerI#processOnReload(java.util.List)
*/
@@ -1132,53 +1132,15 @@
if (gameEndsWithBankruptcy) {
finishGame();
} else {
- Player player, newPresident;
- int numberOfPlayers = getNumberOfPlayers();
- int maxShare;
- int share;
-
- // Assume default case as in 18EU: all assets to Bank/Pool
- Player bankrupter = getCurrentPlayer();
- new CashMove (bankrupter, bank, bankrupter.getCash());
- Portfolio bpf = bankrupter.getPortfolio();
- List<PublicCompanyI> presidencies = new ArrayList<PublicCompanyI>();
- for (PublicCertificateI cert : bpf.getCertificates()) {
- if (cert.isPresidentShare()) presidencies.add(cert.getCompany());
- }
- for (PublicCompanyI company : presidencies) {
- // Check if the presidency is dumped on someone
- newPresident = null;
- maxShare = 0;
- for (int index=getCurrentPlayerIndex()+1;
- index<getCurrentPlayerIndex()+numberOfPlayers; index++) {
- player = getPlayerByIndex(index%numberOfPlayers);
- share = player.getPortfolio().getShare(company);
- if (share >= company.getPresidentsShare().getShare()
- && (share > maxShare)) {
- maxShare = share;
- newPresident = player;
- }
- }
- if (newPresident != null) {
- bankrupter.getPortfolio().swapPresidentCertificate(company,
- newPresident.getPortfolio());
- } else {
- company.setClosed();
- // TODO: can be restarted (in 18EU)
- }
- }
- // Dump all shares
- Util.moveObjects(bankrupter.getPortfolio().getCertificates(), bank.getPool());
-
- bankrupter.setBankrupt();
-
- // Finish the share selling round
- if (getCurrentRound() instanceof ShareSellingRound) {
- finishShareSellingRound();
- }
+ processBankruptcy ();
}
}
+ protected void processBankruptcy () {
+ // Currently a stub, don't know if there is any generic handling (EV)
+ }
+
+
public void registerBrokenBank(){
ReportBuffer.add(LocalText.getText("BankIsBrokenReportText"));
String msgContinue;
Modified: trunk/18xx/rails/game/specific/_18EU/GameManager_18EU.java
===================================================================
--- trunk/18xx/rails/game/specific/_18EU/GameManager_18EU.java 2010-08-21 19:34:52 UTC (rev 1397)
+++ trunk/18xx/rails/game/specific/_18EU/GameManager_18EU.java 2010-08-21 19:36:46 UTC (rev 1398)
@@ -1,10 +1,14 @@
/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/specific/_18EU/GameManager_18EU.java,v 1.5 2010/01/18 22:51:47 evos Exp $ */
package rails.game.specific._18EU;
-import rails.game.GameManager;
-import rails.game.Player;
-import rails.game.RoundI;
+import java.util.ArrayList;
+import java.util.List;
+
+import rails.game.*;
+import rails.game.move.CashMove;
import rails.game.state.State;
+import rails.util.LocalText;
+import rails.util.Util;
/**
* This class manages the playing rounds by supervising all implementations of
@@ -12,7 +16,7 @@
*/
public class GameManager_18EU extends GameManager {
- protected State playerToStartFMERound =
+ protected State playerToStartFMERound =
new State("playerToStartFMERound", Player.class);
@Override
@@ -20,7 +24,7 @@
if (round instanceof OperatingRound_18EU) {
if (playerToStartFMERound.get() != null
&& relativeORNumber.intValue() == numOfORs.intValue()) {
- createRound (FinalMinorExchangeRound.class).start
+ createRound (FinalMinorExchangeRound.class).start
((Player)playerToStartFMERound.get());
playerToStartFMERound.set(null);
} else {
@@ -41,7 +45,53 @@
public Player getPlayerToStartFMERound() {
return (Player) playerToStartFMERound.get();
}
-
-
+ @Override
+ protected void processBankruptcy () {
+ Player player, newPresident;
+ int numberOfPlayers = getNumberOfPlayers();
+ int maxShare;
+ int share;
+
+ // Assume default case as in 18EU: all assets to Bank/Pool
+ Player bankrupter = getCurrentPlayer();
+ new CashMove (bankrupter, bank, bankrupter.getCash());
+ Portfolio bpf = bankrupter.getPortfolio();
+ List<PublicCompanyI> presidencies = new ArrayList<PublicCompanyI>();
+ for (PublicCertificateI cert : bpf.getCertificates()) {
+ if (cert.isPresidentShare()) presidencies.add(cert.getCompany());
+ }
+ for (PublicCompanyI company : presidencies) {
+ // Check if the presidency is dumped on someone
+ newPresident = null;
+ maxShare = 0;
+ for (int index=getCurrentPlayerIndex()+1;
+ index<getCurrentPlayerIndex()+numberOfPlayers; index++) {
+ player = getPlayerByIndex(index%numberOfPlayers);
+ share = player.getPortfolio().getShare(company);
+ if (share >= company.getPresidentsShare().getShare()
+ && (share > maxShare)) {
+ maxShare = share;
+ newPresident = player;
+ }
+ }
+ if (newPresident != null) {
+ bankrupter.getPortfolio().swapPresidentCertificate(company,
+ newPresident.getPortfolio());
+ } else {
+ company.setClosed();
+ ReportBuffer.add(LocalText.getText("CompanyCloses", company.getName()));
+ // TODO: can be restarted (in 18EU)
+ }
+ }
+ // Dump all shares
+ Util.moveObjects(bankrupter.getPortfolio().getCertificates(), bank.getPool());
+
+ bankrupter.setBankrupt();
+
+ // Finish the share selling round
+ if (getCurrentRound() instanceof ShareSellingRound) {
+ finishShareSellingRound();
+ }
+ }
}
Modified: trunk/18xx/rails/game/specific/_18EU/OperatingRound_18EU.java
===================================================================
--- trunk/18xx/rails/game/specific/_18EU/OperatingRound_18EU.java 2010-08-21 19:34:52 UTC (rev 1397)
+++ trunk/18xx/rails/game/specific/_18EU/OperatingRound_18EU.java 2010-08-21 19:36:46 UTC (rev 1398)
@@ -266,7 +266,9 @@
savedAction = null;
finishTurn();
}
- super.resume();
+ if (gameManager.getCurrentRound() == this) {
+ super.resume();
+ }
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|