From: <ev...@us...> - 2011-03-15 22:27:13
|
Revision: 1499 http://rails.svn.sourceforge.net/rails/?rev=1499&view=rev Author: evos Date: 2011-03-15 22:27:07 +0000 (Tue, 15 Mar 2011) Log Message: ----------- Added "sell train to foreigners" feature of 1844 and 1824 Modified Paths: -------------- trunk/18xx/LocalisedText.properties trunk/18xx/rails/game/GameDef.java trunk/18xx/rails/game/GameManager.java trunk/18xx/rails/game/OperatingRound.java trunk/18xx/rails/game/TileManager.java trunk/18xx/rails/game/TrainManager.java Modified: trunk/18xx/LocalisedText.properties =================================================================== --- trunk/18xx/LocalisedText.properties 2011-03-14 21:18:55 UTC (rev 1498) +++ trunk/18xx/LocalisedText.properties 2011-03-15 22:27:07 UTC (rev 1499) @@ -500,6 +500,7 @@ ReleasesTrains=Makes {0}-trains available for purchasing Reload=Reload RemainingTiles=Remaining tiles +RemoveTrain=An unsold {0}-train is removed from the game RepayLoans=Repay loan(s) RepayLoan=Repay {0} loan(s) of {1} for {2} REPORT=Report Window Modified: trunk/18xx/rails/game/GameDef.java =================================================================== --- trunk/18xx/rails/game/GameDef.java 2011-03-14 21:18:55 UTC (rev 1498) +++ trunk/18xx/rails/game/GameDef.java 2011-03-15 22:27:07 UTC (rev 1499) @@ -18,7 +18,8 @@ TREASURY_SHARE_LIMIT(50), FIXED_PRICE_TRAINS_BETWEEN_PRESIDENTS(false), SKIP_FIRST_STOCK_ROUND(false), - NO_SALE_OF_JUST_BOUGHT_CERT(false); + NO_SALE_OF_JUST_BOUGHT_CERT(false), + REMOVE_TRAIN_BEFORE_SR(false); private Object defaultValue; Modified: trunk/18xx/rails/game/GameManager.java =================================================================== --- trunk/18xx/rails/game/GameManager.java 2011-03-14 21:18:55 UTC (rev 1498) +++ trunk/18xx/rails/game/GameManager.java 2011-03-15 22:27:07 UTC (rev 1499) @@ -642,6 +642,7 @@ if (bank.isBroken() && gameEndsAfterSetOfORs) { finishGame(); } else { + ((OperatingRound)round).checkForeignSales(); startStockRound(); } } Modified: trunk/18xx/rails/game/OperatingRound.java =================================================================== --- trunk/18xx/rails/game/OperatingRound.java 2011-03-14 21:18:55 UTC (rev 1498) +++ trunk/18xx/rails/game/OperatingRound.java 2011-03-15 22:27:07 UTC (rev 1499) @@ -7,8 +7,7 @@ import rails.game.action.*; import rails.game.correct.ClosePrivate; import rails.game.correct.OperatingCost; -import rails.game.move.CashMove; -import rails.game.move.MapChange; +import rails.game.move.*; import rails.game.special.*; import rails.game.state.*; import rails.util.LocalText; @@ -1822,6 +1821,7 @@ operatingCompany.get().buyTrain(train, price); if (oldHolder == ipo) { train.getType().addToBoughtFromIPO(); + trainManager.setAnyTrainBought(true); // Clone the train if infinitely available if (train.getType().hasInfiniteAmount()) { ipo.addTrain(train.getType().cloneTrain()); @@ -2834,7 +2834,7 @@ public void payLoanInterest () { int amount = operatingCompany.get().getCurrentLoanValue() - * operatingCompany.get().getLoanInterestPct() / 100; + * operatingCompany.get().getLoanInterestPct() / 100; new CashMove (operatingCompany.get(), bank, amount); DisplayBuffer.add(LocalText.getText("CompanyPaysLoanInterest", operatingCompany.get().getName(), @@ -2844,6 +2844,15 @@ Bank.format(operatingCompany.get().getValuePerLoan()))); } + public void checkForeignSales() { + if (getGameParameterAsBoolean(GameDef.Parm.REMOVE_TRAIN_BEFORE_SR) + && trainManager.isAnyTrainBought()) { + TrainI train = trainManager.getAvailableNewTrains().get(0); + if (train.getType().hasInfiniteAmount()) return; + new ObjectMove (train, ipo, scrapHeap); + ReportBuffer.add(LocalText.getText("RemoveTrain", train.getName())); + } + } /* TODO This is just a start of a possible approach to a Help system */ @Override Modified: trunk/18xx/rails/game/TileManager.java =================================================================== --- trunk/18xx/rails/game/TileManager.java 2011-03-14 21:18:55 UTC (rev 1498) +++ trunk/18xx/rails/game/TileManager.java 2011-03-15 22:27:07 UTC (rev 1499) @@ -38,7 +38,6 @@ if (tileDefFileName == null) throw new ConfigurationException(LocalText.getText("NoTilesXML")); - //directories.add("data/" + ComponentManager.getGameName()); directories.add("data/" + GameManager.getInstance().getGameName()); Tag tileDefTop = Tag.findTopTagInFile(tileDefFileName, directories, "Tiles"); Modified: trunk/18xx/rails/game/TrainManager.java =================================================================== --- trunk/18xx/rails/game/TrainManager.java 2011-03-14 21:18:55 UTC (rev 1498) +++ trunk/18xx/rails/game/TrainManager.java 2011-03-15 22:27:07 UTC (rev 1499) @@ -3,6 +3,7 @@ import java.util.*; +import rails.game.state.BooleanState; import rails.game.state.IntegerState; import rails.util.LocalText; import rails.util.Tag; @@ -16,8 +17,10 @@ protected Map<String, TrainI> trainMap = new HashMap<String, TrainI>(); + + private boolean removeTrain = false; + - // Dynamic attributes protected Portfolio unavailable = null; @@ -32,6 +35,9 @@ protected GameManagerI gameManager = null; protected Bank bank = null; + + /** Required for the sell-train-to-foreigners feature of some games */ + protected BooleanState anyTrainBought = new BooleanState ("AnyTrainBought", false); // Non-game attributes protected Portfolio ipo = null; @@ -78,7 +84,7 @@ Tag rulesTag = tag.getChild("TrainBuyingRules"); if (rulesTag != null) { // A 1851 special - GameManager.getInstance().setGameParameter(GameDef.Parm.FIXED_PRICE_TRAINS_BETWEEN_PRESIDENTS, + gameManager.setGameParameter(GameDef.Parm.FIXED_PRICE_TRAINS_BETWEEN_PRESIDENTS, rulesTag.getChild("FaceValueIfDifferentPresidents") != null); } @@ -96,6 +102,14 @@ mTrainTypes.get(type.getRustedTrainTypeName()).setPermanent(false); } } + + // Are trains sold to foreigners? + Tag removeTrainTag = tag.getChild("RemoveTrainBeforeSR"); + if (removeTrainTag != null) { + // Trains "bought by foreigners" (1844, 1824) + removeTrain = true; // completed in finishConfiguration() + } + } public void finishConfiguration (GameManagerI gameManager) @@ -112,8 +126,13 @@ // By default, set the first train type to "available". newTypeIndex.set(0); lTrainTypes.get(newTypeIndex.intValue()).setAvailable(bank); - } + // Trains "bought by foreigners" (1844, 1824) + if (removeTrain) { + gameManager.setGameParameter(GameDef.Parm.REMOVE_TRAIN_BEFORE_SR, true); + } +} + public void addTrain (String uniqueID, TrainI train) { trainMap.put(uniqueID, train); } @@ -218,7 +237,7 @@ } return b.toString(); } - + public TrainTypeI getTypeByName(String name) { return mTrainTypes.get(name); } @@ -239,4 +258,13 @@ return phaseHasChanged; } + public boolean isAnyTrainBought () { + return anyTrainBought.booleanValue(); + } + + public void setAnyTrainBought (boolean newValue) { + if (isAnyTrainBought() != newValue) { + anyTrainBought.set(newValue); + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |