From: Erik V. <ev...@us...> - 2010-03-05 22:38:39
|
Update of /cvsroot/rails/18xx/rails/game/specific/_1835 In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv24719/rails/game/specific/_1835 Modified Files: PrussianFormationRound.java Log Message: More aspects of Prussian formation Index: PrussianFormationRound.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/specific/_1835/PrussianFormationRound.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** PrussianFormationRound.java 4 Mar 2010 22:08:24 -0000 1.4 --- PrussianFormationRound.java 5 Mar 2010 22:38:31 -0000 1.5 *************** *** 2,11 **** --- 2,17 ---- import java.util.ArrayList; + import java.util.HashMap; import java.util.List; + import java.util.Map; + import java.util.TreeSet; import rails.common.GuiDef; import rails.game.*; + import rails.game.action.ExchangeableToken; import rails.game.action.PossibleAction; + import rails.game.move.CashMove; import rails.game.special.ExchangeForShare; + import rails.game.special.SellBonusToken; import rails.game.special.SpecialPropertyI; import rails.util.LocalText; *************** *** 171,175 **** // Execute prussian.start(); - prussian.setFloated(); ((GameManager_1835)gameManager).setPrussianFormationStartingPlayer(currentPlayer); String message = LocalText.getText("START_MERGED_COMPANY", --- 177,180 ---- *************** *** 180,183 **** --- 185,189 ---- executeExchange (action.getFoldedCompanies(), true); + prussian.setFloated(); return true; *************** *** 219,223 **** president); cert.moveTo(currentPlayer.getPortfolio()); ! company.setClosed(); ReportBuffer.add(LocalText.getText("MERGE_MINOR_LOG", currentPlayer.getName(), --- 225,229 ---- president); cert.moveTo(currentPlayer.getPortfolio()); ! //company.setClosed(); ReportBuffer.add(LocalText.getText("MERGE_MINOR_LOG", currentPlayer.getName(), *************** *** 234,240 **** --- 240,301 ---- ipo.getName(), company.getName() )); + + + if (company instanceof PublicCompanyI) { + + PublicCompanyI minor = (PublicCompanyI) company; + + // Replace the home token + BaseToken token = (BaseToken) minor.getTokens().get(0); + City city = (City) token.getHolder(); + MapHex hex = city.getHolder(); + token.moveTo(minor); + if (!hex.hasTokenOfCompany(prussian) && hex.layBaseToken(prussian, city.getNumber())) { + /* TODO: the false return value must be impossible. */ + ReportBuffer.add(LocalText.getText("ExchangesBaseToken", + PR_ID, minor.getName(), + city.getName())); + + prussian.layBaseToken(hex, 0); + } + + // Move any cash + if (minor.getCash() > 0) { + new CashMove (minor, prussian, minor.getCash()); + } + + // Move any trains + List<TrainI> trains = new ArrayList<TrainI> (minor.getPortfolio().getTrainList()); + for (TrainI train : trains) { + train.moveTo(prussian.getPortfolio()); + } + } + + // Close the merged companies + company.setClosed(); + } + + // Check the trains, autodiscard any excess non-permanent trains + int trainLimit = prussian.getTrainLimit(gameManager.getCurrentPlayerIndex()); + List<TrainI> trains = prussian.getPortfolio().getTrainList(); + if (prussian.getNumberOfTrains() > trainLimit) { + ReportBuffer.add(""); + int numberToDiscard = prussian.getNumberOfTrains() - trainLimit; + List<TrainI> trainsToDiscard = new ArrayList<TrainI>(4); + for (TrainI train : trains) { + if (!train.getType().isPermanent()) { + trainsToDiscard.add(train); + if (--numberToDiscard == 0) break; + } + } + for (TrainI train : trainsToDiscard) { + train.moveTo(pool); + ReportBuffer.add(LocalText.getText("CompanyDiscardsTrain", + PR_ID, train.getName())); + } } } + public static boolean prussianIsComplete(GameManagerI gameManager) { List<PublicCertificateI> unissued |