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