From: Erik V. <ev...@us...> - 2008-11-20 21:49:45
|
Update of /cvsroot/rails/18xx/rails/game/specific/_1856 In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv18962/rails/game/specific/_1856 Modified Files: StockRound_1856.java OperatingRound_1856.java Added Files: PublicCompany_1856.java Log Message: Implemented 1856 capitalisation rules. Implemented temporary procedure for destination reaching (checkboxes in OR) Cleanups Index: StockRound_1856.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/specific/_1856/StockRound_1856.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** StockRound_1856.java 5 Nov 2008 22:44:26 -0000 1.2 --- StockRound_1856.java 20 Nov 2008 21:49:38 -0000 1.3 *************** *** 1,8 **** package rails.game.specific._1856; import rails.game.PublicCompanyI; import rails.game.StockRound; ! import rails.game.TrainI; ! import rails.game.TrainManager; public class StockRound_1856 extends StockRound { --- 1,14 ---- package rails.game.specific._1856; + import rails.game.Bank; + import rails.game.CashHolder; + import rails.game.Certificate; + import rails.game.Portfolio; + import rails.game.PublicCertificateI; import rails.game.PublicCompanyI; + import rails.game.ReportBuffer; import rails.game.StockRound; ! import rails.game.move.CashMove; ! import rails.util.LocalText; public class StockRound_1856 extends StockRound { *************** *** 19,40 **** int unsoldPercentage = company.getUnsoldPercentage(); ! TrainI nextAvailableTrain = TrainManager.get().getAvailableNewTrains().get(0); ! int trainNumber; ! try { ! trainNumber = Integer.parseInt(nextAvailableTrain.getName()); ! } catch (NumberFormatException e) { ! trainNumber = 6; // Diesel! ! } ! int floatPercentage = 10 * trainNumber; log.debug ("Floatpercentage is "+floatPercentage); - //int floatPercentage = Math.min(60, (Integer)getCurrentPhase().getParameter("floatPercentage")); - if (unsoldPercentage <= 100 - floatPercentage) { ! // Company floats ! floatCompany(company); } } } --- 25,85 ---- int unsoldPercentage = company.getUnsoldPercentage(); ! PublicCompany_1856 comp = (PublicCompany_1856) company; ! int trainNumberAtStart = comp.getTrainNumberAvailableAtStart(); ! int floatPercentage = 10 * trainNumberAtStart; log.debug ("Floatpercentage is "+floatPercentage); if (unsoldPercentage <= 100 - floatPercentage) { ! // Company floats. ! // In 1856 this does not mean that the company will operate, ! // only that it will be added to the list of companies ! // being considered for an OR turn. ! // See OperatingRound_1856 for the actual check. ! if (!company.hasFloated()) { ! floatCompany(company); ! } } } + protected CashHolder getSharePriceRecipient(Certificate cert, int price) { + + CashHolder recipient; + Portfolio oldHolder = (Portfolio) cert.getHolder(); + + if (price != 0 + && cert instanceof PublicCertificateI + && oldHolder == Bank.getIpo()) { + + PublicCompany_1856 comp = (PublicCompany_1856)((PublicCertificateI) cert).getCompany(); + + switch (comp.getTrainNumberAvailableAtStart()) { + case 2: + case 3: + case 4: + // Note, that the share has not yet been moved + if (comp.getUnsoldPercentage() <= 50 + && !comp.hasReachedDestination()) { + recipient = oldHolder.getOwner(); // i.e. the Bank + comp.addMoneyInEscrow(price); + ReportBuffer.addWaiting(LocalText.getText("HoldMoneyInEscrow", new String[] { + Bank.format(comp.getMoneyInEscrow()), + comp.getName() + })); + break; + } + // fall through + case 5: + recipient = ((PublicCertificateI)cert).getCompany(); + break; + case 6: + default: + recipient = oldHolder.getOwner(); + } + } else { + recipient = oldHolder.getOwner(); + } + return recipient; + } + } Index: OperatingRound_1856.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/game/specific/_1856/OperatingRound_1856.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OperatingRound_1856.java 15 Nov 2008 13:44:25 -0000 1.1 --- OperatingRound_1856.java 20 Nov 2008 21:49:38 -0000 1.2 *************** *** 1,8 **** --- 1,16 ---- package rails.game.specific._1856; + import java.util.ArrayList; + import java.util.List; + + import rails.game.Bank; import rails.game.DisplayBuffer; import rails.game.OperatingRound; + import rails.game.PublicCompanyI; + import rails.game.ReportBuffer; import rails.game.TrainI; import rails.game.TrainManager; + import rails.game.action.ReachDestinations; + import rails.game.move.CashMove; import rails.game.state.IntegerState; import rails.util.LocalText; *************** *** 70,72 **** --- 78,109 ---- } + protected void setDestinationActions() { + + List<PublicCompanyI> possibleDestinations = new ArrayList<PublicCompanyI>(); + for (PublicCompanyI comp : operatingCompanyArray) { + if (comp.hasDestination() + && ((PublicCompany_1856)comp).getTrainNumberAvailableAtStart() < 5 + && !comp.hasReachedDestination()) { + possibleDestinations.add (comp); + } + } + if (possibleDestinations.size() > 0) { + possibleActions.add(new ReachDestinations (possibleDestinations)); + } + } + + protected void reachDestination (PublicCompanyI company) { + + PublicCompany_1856 comp = (PublicCompany_1856) company; + int cashInEscrow = comp.getMoneyInEscrow(); + if (cashInEscrow > 0) { + new CashMove (null, company, cashInEscrow); + ReportBuffer.add(LocalText.getText("ReleasedFromEscrow", new String[] { + company.getName(), + Bank.format(cashInEscrow) + })); + } + + } + } --- NEW FILE: PublicCompany_1856.java --- package rails.game.specific._1856; import rails.game.PublicCompany; import rails.game.StockSpaceI; import rails.game.TrainI; import rails.game.TrainManager; import rails.game.state.IntegerState; public class PublicCompany_1856 extends PublicCompany { private IntegerState trainNumberAvailableAtStart; private IntegerState moneyInEscrow; public void start(StockSpaceI startSpace) { super.start(startSpace); TrainI nextAvailableTrain = TrainManager.get().getAvailableNewTrains().get(0); int trainNumber; try { trainNumber = Integer.parseInt(nextAvailableTrain.getName()); } catch (NumberFormatException e) { trainNumber = 6; // Diesel! } trainNumberAvailableAtStart = new IntegerState (name+"_trainAtStart"); trainNumberAvailableAtStart.set(trainNumber); if (trainNumber == 6) { this.capitalisation = CAPITALISE_FULL; } moneyInEscrow = new IntegerState (name+"_moneyInEscrow", 0); } public int getTrainNumberAvailableAtStart () { return trainNumberAvailableAtStart.intValue(); } public void setMoneyInEscrow (int amount) { moneyInEscrow.set(amount); } public void addMoneyInEscrow (int amount) { moneyInEscrow.add(amount); } public int getMoneyInEscrow () { return moneyInEscrow.intValue(); } } |