Discussion:
[Freecol-developers] [PATCH] common: model: Turn: optimize-away class instances for just an int
Enrico Weigelt, metux IT consult
2017-01-25 08:46:22 UTC
Permalink
---
.../freecol/client/control/InGameController.java | 36 ++++---
.../freecol/client/control/PreGameController.java | 3 +-
src/net/sf/freecol/client/gui/GrayLayer.java | 4 +-
src/net/sf/freecol/client/gui/ModifierFormat.java | 3 +-
.../freecol/client/gui/dialog/PreCombatDialog.java | 3 +-
.../sf/freecol/client/gui/menu/InGameMenuBar.java | 3 +-
.../freecol/client/gui/panel/BuildQueuePanel.java | 6 +-
.../client/gui/panel/WorkProductionPanel.java | 3 +-
.../gui/panel/colopedia/FatherDetailPanel.java | 6 +-
.../report/ReportContinentalCongressPanel.java | 8 +-
.../gui/panel/report/ReportExplorationPanel.java | 6 +-
.../gui/panel/report/ReportHistoryPanel.java | 3 +-
.../freecol/client/gui/tooltip/RebelToolTip.java | 3 +-
src/net/sf/freecol/common/model/Building.java | 10 +-
src/net/sf/freecol/common/model/BuildingType.java | 2 +-
src/net/sf/freecol/common/model/Colony.java | 16 +--
src/net/sf/freecol/common/model/ColonyTile.java | 2 +-
src/net/sf/freecol/common/model/Europe.java | 2 +-
src/net/sf/freecol/common/model/Feature.java | 69 +++++++------
.../sf/freecol/common/model/FeatureContainer.java | 18 ++--
src/net/sf/freecol/common/model/FreeColObject.java | 23 +++--
src/net/sf/freecol/common/model/Game.java | 14 ++-
src/net/sf/freecol/common/model/HighScore.java | 4 +-
src/net/sf/freecol/common/model/HistoryEvent.java | 14 +--
src/net/sf/freecol/common/model/LastSale.java | 12 +--
.../sf/freecol/common/model/LostCityRumour.java | 4 +-
src/net/sf/freecol/common/model/Modifier.java | 14 +--
src/net/sf/freecol/common/model/Monarch.java | 6 +-
src/net/sf/freecol/common/model/Operand.java | 2 +-
src/net/sf/freecol/common/model/Player.java | 10 +-
.../sf/freecol/common/model/ProductionCache.java | 2 +-
src/net/sf/freecol/common/model/Region.java | 15 ++-
src/net/sf/freecol/common/model/Resource.java | 2 +-
src/net/sf/freecol/common/model/Role.java | 4 +-
src/net/sf/freecol/common/model/Settlement.java | 2 +-
.../sf/freecol/common/model/SimpleCombatModel.java | 8 +-
src/net/sf/freecol/common/model/Specification.java | 3 +-
src/net/sf/freecol/common/model/Tile.java | 4 +-
.../freecol/common/model/TileImprovementType.java | 2 +-
src/net/sf/freecol/common/model/TileType.java | 2 +-
src/net/sf/freecol/common/model/Turn.java | 111 ++-------------------
src/net/sf/freecol/common/model/Unit.java | 13 ++-
src/net/sf/freecol/common/model/UnitType.java | 5 +-
src/net/sf/freecol/common/model/WorkLocation.java | 2 +-
.../freecol/common/networking/NewTurnMessage.java | 5 +-
src/net/sf/freecol/server/ai/AIColony.java | 16 +--
src/net/sf/freecol/server/ai/EuropeanAIPlayer.java | 20 ++--
src/net/sf/freecol/server/ai/NativeAIPlayer.java | 10 +-
src/net/sf/freecol/server/ai/goal/Goal.java | 5 +-
.../freecol/server/control/InGameController.java | 10 +-
src/net/sf/freecol/server/model/ServerGame.java | 2 +-
.../server/model/ServerIndianSettlement.java | 2 +-
src/net/sf/freecol/server/model/ServerPlayer.java | 12 +--
src/net/sf/freecol/server/model/ServerRegion.java | 4 +-
src/net/sf/freecol/server/model/ServerUnit.java | 2 +-
.../net/sf/freecol/common/model/BuildingTest.java | 4 +-
.../net/sf/freecol/common/model/ColonyTest.java | 2 +-
test/src/net/sf/freecol/common/model/GameTest.java | 10 +-
.../net/sf/freecol/common/model/ModifierTest.java | 47 +++++----
.../net/sf/freecol/common/model/MonarchTest.java | 2 +-
test/src/net/sf/freecol/common/model/TileTest.java | 2 +-
.../freecol/server/generator/MapGeneratorTest.java | 2 +-
.../sf/freecol/server/model/ServerPlayerTest.java | 8 +-
63 files changed, 274 insertions(+), 375 deletions(-)

diff --git a/src/net/sf/freecol/client/control/InGameController.java b/src/net/sf/freecol/client/control/InGameController.java
index e8ba77ef074..c68d418a4d5 100644
--- a/src/net/sf/freecol/client/control/InGameController.java
+++ b/src/net/sf/freecol/client/control/InGameController.java
@@ -510,10 +510,10 @@ public final class InGameController extends FreeColClientHolder {
private String getSaveGameString(Game game) {
final Player player = getMyPlayer();
final String gid = Integer.toHexString(game.getUUID().hashCode());
- final Turn turn = game.getTurn();
+ final int turn = game.getTurn();
return (/* player.getName() + "_" */ gid
+ "_" + Messages.message(player.getNationLabel())
- + "_" + turn.getSaveGameSuffix()
+ + "_" + Turn.getSaveGameSuffix(turn)
+ "." + FreeCol.FREECOL_SAVE_EXTENSION)
.replaceAll(" ", "_");
}
@@ -561,7 +561,7 @@ public final class InGameController extends FreeColClientHolder {

// conditional save after user-set period
int saveGamePeriod = options.getInteger(ClientOptions.AUTOSAVE_PERIOD);
- int turnNumber = game.getTurn().getNumber();
+ int turnNumber = game.getTurn();
if (saveGamePeriod >= 1 && turnNumber % saveGamePeriod == 0) {
String fileName = prefix + "-" + getSaveGameString(game);
saveGame(FreeColDirectories.getAutosaveFile(fileName));
@@ -613,8 +613,8 @@ public final class InGameController extends FreeColClientHolder {
* @param key The key for a message to ignore.
* @param turn The current {@code Turn}.
*/
- private synchronized void startIgnoringMessage(String key, Turn turn) {
- messagesToIgnore.put(key, turn.getNumber());
+ private synchronized void startIgnoringMessage(String key, int turn) {
+ messagesToIgnore.put(key, turn);
logger.finer("Ignore message start: " + key);
}

@@ -633,8 +633,8 @@ public final class InGameController extends FreeColClientHolder {
*
* @param turn The {@code Turn} value to test against.
*/
- private synchronized void reapIgnoredMessages(Turn turn) {
- removeInPlace(messagesToIgnore, e -> e.getValue() < turn.getNumber());
+ private synchronized void reapIgnoredMessages(int turn) {
+ removeInPlace(messagesToIgnore, e -> e.getValue() < turn);
}

/**
@@ -645,11 +645,11 @@ public final class InGameController extends FreeColClientHolder {
* @param turn The current {@code Turn}.
* @return True if the message should continue to be ignored.
*/
- private synchronized boolean continueIgnoreMessage(String key, Turn turn) {
+ private synchronized boolean continueIgnoreMessage(String key, int turn) {
Integer value;
if (key != null
&& (value = messagesToIgnore.get(key)) != null
- && value + 1 == turn.getNumber()) {
+ && value + 1 == turn) {
messagesToIgnore.put(key, value + 1);
logger.finer("Ignore message continue: " + key);
return true;
@@ -674,7 +674,7 @@ public final class InGameController extends FreeColClientHolder {
public boolean displayModelMessages(final boolean allMessages,
final boolean endOfTurn) {
final Player player = getMyPlayer();
- final Turn thisTurn = getGame().getTurn();
+ final int thisTurn = getGame().getTurn();
final ArrayList<ModelMessage> messages = new ArrayList<>();

for (ModelMessage m : ((allMessages) ? player.getModelMessages()
@@ -3328,7 +3328,7 @@ public final class InGameController extends FreeColClientHolder {
|| (key = message.getIgnoredMessageKey()) == null) return false;

if (flag) {
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
if (!continueIgnoreMessage(key, turn)) {
startIgnoringMessage(key, turn);
}
@@ -4094,20 +4094,18 @@ public final class InGameController extends FreeColClientHolder {
logger.warning("Bad turn in newTurn: " + turn);
return false;
}
- Turn newTurn = new Turn(turn);
- game.setTurn(newTurn);
- logger.info("New turn: " + newTurn + "/" + turn);
+ game.setTurn(turn);
+ logger.info("New turn: " + turn);

if (getClientOptions().getBoolean(ClientOptions.AUDIO_ALERTS)) {
sound("sound.event.alertSound");
}

- final Turn currTurn = game.getTurn();
- if (currTurn.isFirstSeasonTurn()) {
+ if (turn == Turn.FIRST_TURN) {
player.addModelMessage(new ModelMessage(MessageType.WARNING,
"twoTurnsPerYear", player)
- .addStringTemplate("%year%", currTurn.getLabel())
- .addAmount("%amount%", currTurn.getSeasonNumber()));
+ .addStringTemplate("%year%", Turn.getLabel(turn))
+ .addAmount("%amount%", Turn.getSeasonNumber()));
}
player.clearNationCache();
return true;
@@ -4597,7 +4595,7 @@ public final class InGameController extends FreeColClientHolder {

// Save the game (if it isn't newly loaded)
if (getFreeColServer() != null
- && game.getTurn().getNumber() > 0) autoSaveGame();
+ && game.getTurn() > 0) autoSaveGame();

// Get turn report out quickly before more message display occurs.
player.removeDisplayedModelMessages();
diff --git a/src/net/sf/freecol/client/control/PreGameController.java b/src/net/sf/freecol/client/control/PreGameController.java
index 3db4269c65f..33709012e08 100644
--- a/src/net/sf/freecol/client/control/PreGameController.java
+++ b/src/net/sf/freecol/client/control/PreGameController.java
@@ -37,6 +37,7 @@ import net.sf.freecol.common.model.NationType;
import net.sf.freecol.common.model.Player;
import net.sf.freecol.common.model.StringTemplate;
import net.sf.freecol.common.model.Tile;
+import net.sf.freecol.common.model.Turn;
import net.sf.freecol.common.model.Unit;
import net.sf.freecol.common.option.GameOptions;
import net.sf.freecol.common.option.MapGeneratorOptions;
@@ -188,7 +189,7 @@ public final class PreGameController extends FreeColClientHolder {
}

// Tutorial message if needed
- if (game.getTurn().getNumber() == 1) {
+ if (game.getTurn() == Turn.FIRST_TURN) {
player.addStartGameMessage();
}
igc().nextModelMessage();
diff --git a/src/net/sf/freecol/client/gui/GrayLayer.java b/src/net/sf/freecol/client/gui/GrayLayer.java
index 1d3c9e34741..99af3fe0c35 100644
--- a/src/net/sf/freecol/client/gui/GrayLayer.java
+++ b/src/net/sf/freecol/client/gui/GrayLayer.java
@@ -34,6 +34,7 @@ import net.sf.freecol.client.FreeColClient;
import net.sf.freecol.client.gui.panel.InfoPanel;
import net.sf.freecol.common.i18n.Messages;
import net.sf.freecol.common.model.Player;
+import net.sf.freecol.common.model.Turn;


/**
@@ -101,8 +102,7 @@ public class GrayLayer extends Component {
Color colour = null;

if (player == null) {
- message = Messages.message(freeColClient.getGame().getTurn()
- .getLabel());
+ message = Messages.message(Turn.getLabel(freeColClient.getGame().getTurn()));
colour = Color.WHITE;

} else {
diff --git a/src/net/sf/freecol/client/gui/ModifierFormat.java b/src/net/sf/freecol/client/gui/ModifierFormat.java
index c15c78808dd..8483f51b16c 100644
--- a/src/net/sf/freecol/client/gui/ModifierFormat.java
+++ b/src/net/sf/freecol/client/gui/ModifierFormat.java
@@ -34,7 +34,6 @@ import net.sf.freecol.common.model.Modifier.ModifierType;
import net.sf.freecol.common.model.Nameable;
import net.sf.freecol.common.model.Named;
import net.sf.freecol.common.model.Scope;
-import net.sf.freecol.common.model.Turn;
import static net.sf.freecol.common.util.CollectionUtils.*;


@@ -100,7 +99,7 @@ public class ModifierFormat {

public static JLabel[] getModifierLabels(Modifier modifier,
FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
String sourceName = getSourceName(modifier.getSource());
if (fcgot != null && modifier.appliesTo(fcgot)) {
sourceName += " (" + Messages.getName(fcgot) + ")";
diff --git a/src/net/sf/freecol/client/gui/dialog/PreCombatDialog.java b/src/net/sf/freecol/client/gui/dialog/PreCombatDialog.java
index cd4161a6c63..3a9c6fdb200 100644
--- a/src/net/sf/freecol/client/gui/dialog/PreCombatDialog.java
+++ b/src/net/sf/freecol/client/gui/dialog/PreCombatDialog.java
@@ -42,7 +42,6 @@ import net.sf.freecol.common.model.FreeColGameObject;
import net.sf.freecol.common.model.Game;
import net.sf.freecol.common.model.Modifier;
import net.sf.freecol.common.model.Settlement;
-import net.sf.freecol.common.model.Turn;
import net.sf.freecol.common.model.Unit;
import static net.sf.freecol.common.util.CollectionUtils.*;

@@ -68,7 +67,7 @@ public class PreCombatDialog extends FreeColConfirmDialog {
final ImageLibrary lib = freeColClient.getGUI().getImageLibrary();
final Game game = attacker.getGame();
final CombatModel combatModel = game.getCombatModel();
- final Turn turn = game.getTurn();
+ final int turn = game.getTurn();
final Set<Modifier> attackModifiers
= combatModel.getOffensiveModifiers(attacker, defender);
final Set<Modifier> defenceModifiers
diff --git a/src/net/sf/freecol/client/gui/menu/InGameMenuBar.java b/src/net/sf/freecol/client/gui/menu/InGameMenuBar.java
index 856ee5f4142..ba8ffcf4437 100644
--- a/src/net/sf/freecol/client/gui/menu/InGameMenuBar.java
+++ b/src/net/sf/freecol/client/gui/menu/InGameMenuBar.java
@@ -97,6 +97,7 @@ import net.sf.freecol.common.debug.FreeColDebugger;
import net.sf.freecol.common.i18n.Messages;
import net.sf.freecol.common.model.StringTemplate;
import net.sf.freecol.common.model.TileImprovementType;
+import net.sf.freecol.common.model.Turn;


/**
@@ -333,7 +334,7 @@ public class InGameMenuBar extends FreeColMenuBar {
.addAmount("%score%",
freeColClient.getMyPlayer().getScore())
.addStringTemplate("%year%",
- freeColClient.getGame().getTurn().getLabel()));
+ Turn.getLabel(freeColClient.getGame().getTurn())));
Rectangle2D displayStringBounds
= g2d.getFontMetrics().getStringBounds(displayString, g);
int y = Math.round(12f*freeColClient.getGUI().getImageLibrary().getScaleFactor())
diff --git a/src/net/sf/freecol/client/gui/panel/BuildQueuePanel.java b/src/net/sf/freecol/client/gui/panel/BuildQueuePanel.java
index b68c3b05add..f1b6237fbd9 100644
--- a/src/net/sf/freecol/client/gui/panel/BuildQueuePanel.java
+++ b/src/net/sf/freecol/client/gui/panel/BuildQueuePanel.java
@@ -738,7 +738,7 @@ public class BuildQueuePanel extends FreeColPanel implements ItemListener {
forEachMapEntry(bt.getRequiredAbilities(), e -> {
final String id = e.getKey();
final boolean value = e.getValue();
- if (this.featureContainer.hasAbility(id, null, null) != value
+ if (this.featureContainer.hasAbility(id, null, Turn.UNDEFINED) != value
&& this.colony.hasAbility(id) != value) {
FreeColSpecObjectType source
= first(spec.getTypesProviding(id, value));
@@ -839,7 +839,7 @@ public class BuildQueuePanel extends FreeColPanel implements ItemListener {
*/
private void updateUnitList() {
final Specification spec = getSpecification();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
DefaultListModel<UnitType> units
= (DefaultListModel<UnitType>)this.unitList.getModel();
units.clear();
@@ -869,7 +869,7 @@ public class BuildQueuePanel extends FreeColPanel implements ItemListener {
if (!checkAbilities(ut, reasons)) unbuildableTypes.add(ut);

// Missing unit build ability?
- if (!this.featureContainer.hasAbility(Ability.BUILD, ut, null)
+ if (!this.featureContainer.hasAbility(Ability.BUILD, ut, Turn.UNDEFINED)
&& !this.colony.hasAbility(Ability.BUILD, ut, turn)) {
Ability buildAbility = find(spec.getAbilities(Ability.BUILD),
a -> (a.appliesTo(ut)
diff --git a/src/net/sf/freecol/client/gui/panel/WorkProductionPanel.java b/src/net/sf/freecol/client/gui/panel/WorkProductionPanel.java
index b6e97ba4339..db0d21a1a76 100644
--- a/src/net/sf/freecol/client/gui/panel/WorkProductionPanel.java
+++ b/src/net/sf/freecol/client/gui/panel/WorkProductionPanel.java
@@ -38,7 +38,6 @@ import net.sf.freecol.common.model.GoodsType;
import net.sf.freecol.common.model.Modifier;
import net.sf.freecol.common.model.Tile;
import net.sf.freecol.common.model.TileType;
-import net.sf.freecol.common.model.Turn;
import net.sf.freecol.common.model.Unit;
import net.sf.freecol.common.model.UnitType;
import net.sf.freecol.common.model.WorkLocation;
@@ -50,7 +49,7 @@ import static net.sf.freecol.common.util.CollectionUtils.*;
*/
public class WorkProductionPanel extends FreeColPanel {

- private final Turn turn = getGame().getTurn();
+ private final int turn = getGame().getTurn();


/**
diff --git a/src/net/sf/freecol/client/gui/panel/colopedia/FatherDetailPanel.java b/src/net/sf/freecol/client/gui/panel/colopedia/FatherDetailPanel.java
index 6cd2769876c..ae317b0e155 100644
--- a/src/net/sf/freecol/client/gui/panel/colopedia/FatherDetailPanel.java
+++ b/src/net/sf/freecol/client/gui/panel/colopedia/FatherDetailPanel.java
@@ -153,13 +153,13 @@ public class FatherDetailPanel
.add(father.getId() + ".birthAndDeath")
.addName("] ")
.add(father.getId() + ".text");
- final Turn turn = getMyPlayer().getElectionTurns().get(name);
- if (turn != null) {
+ final int turn = getMyPlayer().getElectionTurns().get(name);
+ if (turn != Turn.UNDEFINED) {
template
.addName("\n\n")
.add("report.continentalCongress.elected")
.addName(" ")
- .addStringTemplate(turn.getLabel());
+ .addStringTemplate(Turn.getLabel(turn));
}

panel.add(header, "span, align center, wrap 40");
diff --git a/src/net/sf/freecol/client/gui/panel/report/ReportContinentalCongressPanel.java b/src/net/sf/freecol/client/gui/panel/report/ReportContinentalCongressPanel.java
index 5bfbde184bd..dad5b540479 100644
--- a/src/net/sf/freecol/client/gui/panel/report/ReportContinentalCongressPanel.java
+++ b/src/net/sf/freecol/client/gui/panel/report/ReportContinentalCongressPanel.java
@@ -109,12 +109,12 @@ public final class ReportContinentalCongressPanel extends ReportPanel {
imageScrollPane, null);
}
final int age = getGame().getAge();
- Map<String, Turn> electionTurns = getMyPlayer().getElectionTurns();
+ Map<String, Integer> electionTurns = getMyPlayer().getElectionTurns();
for (FoundingFather father : getSpecification().getFoundingFathers()) {
String name = Messages.getName(father);
JPanel panel = panels.get(father.getType());
Image image;
- Turn turn = null;
+ int turn = Turn.UNDEFINED;
if (player.hasFather(father)) {
image = ImageLibrary.getFoundingFatherImage(father, false);
turn = electionTurns.get(Messages.nameKey(father));
@@ -126,10 +126,10 @@ public final class ReportContinentalCongressPanel extends ReportPanel {
null, father.getId());
button.addActionListener(this);
panel.add(button);
- panel.add((turn != null)
+ panel.add((turn != Turn.UNDEFINED)
? Utility.localizedLabel(StringTemplate
.template("report.continentalCongress.elected")
- .addStringTemplate("%turn%", turn.getLabel()))
+ .addStringTemplate("%turn%", Turn.getLabel(turn)))
: (father == currentFather)
? Utility.localizedLabel("report.continentalCongress.recruiting")
: Utility.localizedLabel("report.continentalCongress.available"));
diff --git a/src/net/sf/freecol/client/gui/panel/report/ReportExplorationPanel.java b/src/net/sf/freecol/client/gui/panel/report/ReportExplorationPanel.java
index e314fd6a064..7ebd2363eca 100644
--- a/src/net/sf/freecol/client/gui/panel/report/ReportExplorationPanel.java
+++ b/src/net/sf/freecol/client/gui/panel/report/ReportExplorationPanel.java
@@ -31,6 +31,7 @@ import net.sf.freecol.client.FreeColClient;
import net.sf.freecol.client.gui.FontLibrary;
import net.sf.freecol.client.gui.panel.*;
import net.sf.freecol.common.model.Region;
+import net.sf.freecol.common.model.Turn;
import net.sf.freecol.common.util.*;

import static net.sf.freecol.common.util.CollectionUtils.*;
@@ -44,7 +45,7 @@ public final class ReportExplorationPanel extends ReportPanel {
/** Comparator for discovered regions, by descending turn and score. */
private static final Comparator<Region> regionComparator
= Comparator.comparingInt((Region r) ->
- r.getDiscoveredIn().getNumber()).reversed()
+ r.getDiscoveredIn()).reversed()
.thenComparingInt(Region::getScoreValue).reversed();


@@ -86,8 +87,7 @@ public final class ReportExplorationPanel extends ReportPanel {
Function.identity(), regionComparator)) {
reportPanel.add(new JLabel(region.getName()));
reportPanel.add(Utility.localizedLabel(region.getType().getNameKey()));
- reportPanel.add(Utility.localizedLabel(region.getDiscoveredIn()
- .getLabel()));
+ reportPanel.add(Utility.localizedLabel(Turn.getLabel(region.getDiscoveredIn())));
reportPanel.add(Utility.localizedLabel(region.getDiscoveredBy()
.getCountryLabel()));
reportPanel.add(new JLabel(String.valueOf(region.getScoreValue())));
diff --git a/src/net/sf/freecol/client/gui/panel/report/ReportHistoryPanel.java b/src/net/sf/freecol/client/gui/panel/report/ReportHistoryPanel.java
index 0b1e7d01a44..a3cf39d947c 100644
--- a/src/net/sf/freecol/client/gui/panel/report/ReportHistoryPanel.java
+++ b/src/net/sf/freecol/client/gui/panel/report/ReportHistoryPanel.java
@@ -26,6 +26,7 @@ import net.miginfocom.swing.MigLayout;
import net.sf.freecol.client.FreeColClient;
import net.sf.freecol.client.gui.panel.*;
import net.sf.freecol.common.model.HistoryEvent;
+import net.sf.freecol.common.model.Turn;


/**
@@ -50,7 +51,7 @@ public final class ReportHistoryPanel extends ReportPanel {
reportPanel.setLayout(new MigLayout("wrap 2", "[]20[fill]", ""));

for (HistoryEvent event : history) {
- reportPanel.add(Utility.localizedLabel(event.getTurn().getLabel()));
+ reportPanel.add(Utility.localizedLabel(Turn.getLabel(event.getTurn())));
reportPanel.add(Utility.localizedTextArea(event, 40));
}
}
diff --git a/src/net/sf/freecol/client/gui/tooltip/RebelToolTip.java b/src/net/sf/freecol/client/gui/tooltip/RebelToolTip.java
index 797e6214641..dc58b8e6c84 100644
--- a/src/net/sf/freecol/client/gui/tooltip/RebelToolTip.java
+++ b/src/net/sf/freecol/client/gui/tooltip/RebelToolTip.java
@@ -38,7 +38,6 @@ import net.sf.freecol.common.model.GoodsType;
import net.sf.freecol.common.model.Modifier;
import net.sf.freecol.common.model.Specification;
import net.sf.freecol.common.model.StringTemplate;
-import net.sf.freecol.common.model.Turn;
import net.sf.freecol.common.option.GameOptions;

import static net.sf.freecol.common.util.CollectionUtils.*;
@@ -60,7 +59,7 @@ public class RebelToolTip extends JToolTip {
final int population = colony.getUnitCount();
final int solPercent = colony.getSoL();
final int rebels = Colony.calculateRebels(population, solPercent);
- final Turn turn = colony.getGame().getTurn();
+ final int turn = colony.getGame().getTurn();
StringTemplate t;

setLayout(new MigLayout("fill, wrap 3", "[300px][50px, right][50px, right]", ""));
diff --git a/src/net/sf/freecol/common/model/Building.java b/src/net/sf/freecol/common/model/Building.java
index e07c180fc93..cb8bf9a1935 100644
--- a/src/net/sf/freecol/common/model/Building.java
+++ b/src/net/sf/freecol/common/model/Building.java
@@ -148,7 +148,7 @@ public class Building extends WorkLocation
* @return A stream of the applicable modifiers.
*/
public Stream<Modifier> getCompetenceModifiers(String id,
- UnitType unitType, Turn turn) {
+ UnitType unitType, int turn) {
final float competence = getCompetenceFactor();
return (competence == 1.0f) // Floating comparison OK!
? unitType.getModifiers(id, getType(), turn)
@@ -246,7 +246,7 @@ public class Building extends WorkLocation
ProductionInfo result = new ProductionInfo();
if (!hasOutputs()) return result;
final Specification spec = getSpecification();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
final boolean avoidOverflow
= hasAbility(Ability.AVOID_EXCESS_PRODUCTION);
final int capacity = getColony().getWarehouseCapacity();
@@ -566,7 +566,7 @@ public class Building extends WorkLocation
final String id = (goodsType == null) ? null : goodsType.getId();
final Colony colony = getColony();
final Player owner = getOwner();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();

return (unitType != null)
// With a unit, unit specific bonuses apply
@@ -642,7 +642,7 @@ public class Building extends WorkLocation
*/
@Override
public Stream<Ability> getAbilities(String id, FreeColSpecObjectType type,
- Turn turn) {
+ int turn) {
// Buildings have no abilities independent of their type (for now).
return getType().getAbilities(id, type, turn);
}
@@ -652,7 +652,7 @@ public class Building extends WorkLocation
*/
@Override
public Stream<Modifier> getModifiers(String id, FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
// Buildings have no modifiers independent of type
return getType().getModifiers(id, fcgot, turn);
}
diff --git a/src/net/sf/freecol/common/model/BuildingType.java b/src/net/sf/freecol/common/model/BuildingType.java
index 60d7d83efa5..9c6556fbde9 100644
--- a/src/net/sf/freecol/common/model/BuildingType.java
+++ b/src/net/sf/freecol/common/model/BuildingType.java
@@ -337,7 +337,7 @@ public final class BuildingType extends BuildableType
UnitType unitType) {
if (goodsType == null) return 0;
int amount = getBaseProduction(null, goodsType, unitType);
- amount = (int)applyModifiers(amount, null, goodsType.getId(),
+ amount = (int)applyModifiers(amount, Turn.UNDEFINED, goodsType.getId(),
unitType);
return (amount < 0) ? 0 : amount;
}
diff --git a/src/net/sf/freecol/common/model/Colony.java b/src/net/sf/freecol/common/model/Colony.java
index c471e6971b8..62d557aa6d8 100644
--- a/src/net/sf/freecol/common/model/Colony.java
+++ b/src/net/sf/freecol/common/model/Colony.java
@@ -134,7 +134,7 @@ public class Colony extends Settlement implements Nameable, TradeLocation {
protected int immigration;

/** The turn in which this colony was established. */
- protected Turn established = new Turn(0);
+ protected int established = 0;

/** A list of items to be built. */
protected final BuildQueue<BuildableType> buildQueue
@@ -316,7 +316,7 @@ public class Colony extends Settlement implements Nameable, TradeLocation {
*
* @return The establishment {@code Turn}.
*/
- public Turn getEstablished() {
+ public int getEstablished() {
return established;
}

@@ -325,7 +325,7 @@ public class Colony extends Settlement implements Nameable, TradeLocation {
*
* @param newEstablished The new {@code Turn} of establishment.
*/
- public void setEstablished(final Turn newEstablished) {
+ public void setEstablished(final int newEstablished) {
this.established = newEstablished;
}

@@ -2317,7 +2317,7 @@ public class Colony extends Settlement implements Nameable, TradeLocation {
* @param amount The amount of modification.
*/
private void modifySpecialGoods(GoodsType goodsType, int amount) {
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
List<Modifier> mods;

mods = toList(goodsType.getModifiers(Modifier.LIBERTY));
@@ -2399,8 +2399,8 @@ public class Colony extends Settlement implements Nameable, TradeLocation {
*/
@Override
public Stream<Ability> getAbilities(String id, FreeColSpecObjectType type,
- Turn turn) {
- if (turn == null) turn = getGame().getTurn();
+ int turn) {
+ if (turn == Turn.UNDEFINED) turn = getGame().getTurn();
return concat(super.getAbilities(id, type, turn),
((owner == null) ? Stream.<Ability>empty()
: owner.getAbilities(id, type, turn)));
@@ -2902,7 +2902,7 @@ public class Colony extends Settlement implements Nameable, TradeLocation {
// Delegated from Settlement
xw.writeAttribute(NAME_TAG, getName());

- xw.writeAttribute(ESTABLISHED_TAG, established.getNumber());
+ xw.writeAttribute(ESTABLISHED_TAG, established);

// SoL has to be visible for the popular support bonus to be
// visible to an attacking rebel player.
@@ -2987,7 +2987,7 @@ public class Colony extends Settlement implements Nameable, TradeLocation {
public void readAttributes(FreeColXMLReader xr) throws XMLStreamException {
super.readAttributes(xr);

- established = new Turn(xr.getAttribute(ESTABLISHED_TAG, 0));
+ established = xr.getAttribute(ESTABLISHED_TAG, 0);

sonsOfLiberty = xr.getAttribute(SONS_OF_LIBERTY_TAG, 0);

diff --git a/src/net/sf/freecol/common/model/ColonyTile.java b/src/net/sf/freecol/common/model/ColonyTile.java
index c6411f593b0..a422065d766 100644
--- a/src/net/sf/freecol/common/model/ColonyTile.java
+++ b/src/net/sf/freecol/common/model/ColonyTile.java
@@ -459,7 +459,7 @@ public class ColonyTile extends WorkLocation {
final String id = goodsType.getId();
final Colony colony = getColony();
final Player owner = colony.getOwner();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
return (unitType != null)
// Unit modifiers apply
? concat(workTile.getProductionModifiers(goodsType, unitType),
diff --git a/src/net/sf/freecol/common/model/Europe.java b/src/net/sf/freecol/common/model/Europe.java
index 9c6c3bb0c43..47ba746c0f4 100644
--- a/src/net/sf/freecol/common/model/Europe.java
+++ b/src/net/sf/freecol/common/model/Europe.java
@@ -506,7 +506,7 @@ public class Europe extends UnitLocation
*/
@Override
public Stream<Ability> getAbilities(String id, FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
return concat(super.getAbilities(id, fcgot, turn),
// Always able to dress a missionary.
((id == null || Ability.DRESS_MISSIONARY.equals(id))
diff --git a/src/net/sf/freecol/common/model/Feature.java b/src/net/sf/freecol/common/model/Feature.java
index 80819246769..8d38e15f2b2 100644
--- a/src/net/sf/freecol/common/model/Feature.java
+++ b/src/net/sf/freecol/common/model/Feature.java
@@ -29,6 +29,7 @@ import javax.xml.stream.XMLStreamException;
import net.sf.freecol.common.i18n.Messages;
import net.sf.freecol.common.io.FreeColXMLReader;
import net.sf.freecol.common.io.FreeColXMLWriter;
+import net.sf.freecol.common.model.Turn;
import static net.sf.freecol.common.util.CollectionUtils.*;
import net.sf.freecol.common.util.Utils;

@@ -45,10 +46,10 @@ public abstract class Feature extends FreeColSpecObject
private FreeColObject source;

/** The first Turn in which this Feature applies. */
- private Turn firstTurn;
+ private int firstTurn;

/** The last Turn in which this Feature applies. */
- private Turn lastTurn;
+ private int lastTurn;

/** The duration of this Feature. By default, the duration is unlimited. */
private int duration = 0;
@@ -99,7 +100,7 @@ public abstract class Feature extends FreeColSpecObject
* @return True if the feature is time limited.
*/
public final boolean hasTimeLimit() {
- return (firstTurn != null || lastTurn != null);
+ return (firstTurn != Turn.UNDEFINED || lastTurn != Turn.UNDEFINED);
}

/**
@@ -107,7 +108,7 @@ public abstract class Feature extends FreeColSpecObject
*
* @return The first turn, or null if none.
*/
- public final Turn getFirstTurn() {
+ public final int getFirstTurn() {
return firstTurn;
}

@@ -116,7 +117,7 @@ public abstract class Feature extends FreeColSpecObject
*
* @param newFirstTurn The new first turn value.
*/
- public final void setFirstTurn(final Turn newFirstTurn) {
+ public final void setFirstTurn(final int newFirstTurn) {
this.firstTurn = newFirstTurn;
}

@@ -125,7 +126,7 @@ public abstract class Feature extends FreeColSpecObject
*
* @return The last turn, or null if none.
*/
- public final Turn getLastTurn() {
+ public final int getLastTurn() {
return lastTurn;
}

@@ -134,7 +135,7 @@ public abstract class Feature extends FreeColSpecObject
*
* @param newLastTurn The new last turn value.
*/
- public final void setLastTurn(final Turn newLastTurn) {
+ public final void setLastTurn(final int newLastTurn) {
this.lastTurn = newLastTurn;
}

@@ -210,10 +211,10 @@ public abstract class Feature extends FreeColSpecObject
* @param turn The {@code Turn} to test.
* @return True if the turn is null or not outside a valid time limit.
*/
- protected boolean appliesTo(final Turn turn) {
- return !(turn != null
- && (firstTurn != null && turn.getNumber() < firstTurn.getNumber()
- || lastTurn != null && turn.getNumber() > lastTurn.getNumber()));
+ protected boolean appliesTo(final int turn) {
+ return !(turn != Turn.UNDEFINED
+ && (firstTurn != Turn.UNDEFINED && turn < firstTurn
+ || lastTurn != Turn.UNDEFINED && turn > lastTurn));
}

/**
@@ -224,7 +225,7 @@ public abstract class Feature extends FreeColSpecObject
* @return True if the feature applies.
*/
protected boolean appliesTo(final FreeColSpecObjectType objectType,
- final Turn turn) {
+ final int turn) {
return appliesTo(turn) && appliesTo(objectType);
}

@@ -235,9 +236,9 @@ public abstract class Feature extends FreeColSpecObject
* @return True if the Feature has an lastTurn turn smaller than the
* given turn.
*/
- public boolean isOutOfDate(Turn turn) {
- return turn != null && lastTurn != null
- && turn.getNumber() > lastTurn.getNumber();
+ public boolean isOutOfDate(int turn) {
+ return turn != Turn.UNDEFINED && lastTurn != Turn.UNDEFINED
+ && turn > lastTurn;
}

/**
@@ -332,13 +333,11 @@ public abstract class Feature extends FreeColSpecObject
xw.writeAttribute(SOURCE_TAG, getSource());
}

- if (getFirstTurn() != null) {
- xw.writeAttribute(FIRST_TURN_TAG, getFirstTurn().getNumber());
- }
+ if (getFirstTurn() != Turn.UNDEFINED)
+ xw.writeAttribute(FIRST_TURN_TAG, getFirstTurn());

- if (getLastTurn() != null) {
- xw.writeAttribute(LAST_TURN_TAG, getLastTurn().getNumber());
- }
+ if (getLastTurn() != Turn.UNDEFINED)
+ xw.writeAttribute(LAST_TURN_TAG, getLastTurn());

if (duration != 0) {
xw.writeAttribute(DURATION_TAG, duration);
@@ -375,11 +374,11 @@ public abstract class Feature extends FreeColSpecObject
setSource(spec.findType(str));
}

- int firstTurn = xr.getAttribute(FIRST_TURN_TAG, UNDEFINED);
- if (firstTurn != UNDEFINED) setFirstTurn(new Turn(firstTurn));
+ int firstTurn = xr.getAttribute(FIRST_TURN_TAG, Turn.UNDEFINED);
+ if (firstTurn != Turn.UNDEFINED) setFirstTurn(firstTurn);

- int lastTurn = xr.getAttribute(LAST_TURN_TAG, UNDEFINED);
- if (lastTurn != UNDEFINED) setLastTurn(new Turn(lastTurn));
+ int lastTurn = xr.getAttribute(LAST_TURN_TAG, Turn.UNDEFINED);
+ if (lastTurn != Turn.UNDEFINED) setLastTurn(lastTurn);

duration = xr.getAttribute(DURATION_TAG, 0);

@@ -431,18 +430,18 @@ public abstract class Feature extends FreeColSpecObject
|| this.duration != feature.duration
|| this.temporary != feature.temporary)
return false;
- if (firstTurn == null) {
- if (feature.firstTurn != null) return false;
- } else if (feature.firstTurn == null) {
+ if (firstTurn == Turn.UNDEFINED) {
+ if (feature.firstTurn != Turn.UNDEFINED) return false;
+ } else if (feature.firstTurn == Turn.UNDEFINED) {
return false;
- } else if (firstTurn.getNumber() != feature.firstTurn.getNumber()) {
+ } else if (firstTurn != feature.firstTurn) {
return false;
}
- if (lastTurn == null) {
- if (feature.lastTurn != null) return false;
- } else if (feature.lastTurn == null) {
+ if (lastTurn == Turn.UNDEFINED) {
+ if (feature.lastTurn != Turn.UNDEFINED) return false;
+ } else if (feature.lastTurn == Turn.UNDEFINED) {
return false;
- } else if (lastTurn.getNumber() != feature.lastTurn.getNumber()) {
+ } else if (lastTurn != feature.lastTurn) {
return false;
}
List<Scope> tScopes = getScopeList();
@@ -464,8 +463,8 @@ public abstract class Feature extends FreeColSpecObject
public int hashCode() {
int hash = super.hashCode();
hash += 31 * hash + Utils.hashCode(source);
- hash += 31 * hash + ((firstTurn == null) ? 0 : firstTurn.getNumber());
- hash += 31 * hash + ((lastTurn == null) ? 0 : lastTurn.getNumber());
+ hash += 31 * hash + ((firstTurn == Turn.UNDEFINED) ? 0 : firstTurn);
+ hash += 31 * hash + ((lastTurn == Turn.UNDEFINED) ? 0 : lastTurn);
hash += 31 * hash + duration;
hash += 31 * ((temporary) ? 1 : 0);
// FIXME: is this safe? It is an easy way to ignore
diff --git a/src/net/sf/freecol/common/model/FeatureContainer.java b/src/net/sf/freecol/common/model/FeatureContainer.java
index c76a4969a17..69eec27393c 100644
--- a/src/net/sf/freecol/common/model/FeatureContainer.java
+++ b/src/net/sf/freecol/common/model/FeatureContainer.java
@@ -124,7 +124,7 @@ public final class FeatureContainer {
* @return True if the ability is present.
*/
public boolean hasAbility(String id, FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
return FeatureContainer.hasAbility(getAbilities(id, fcgot, turn));
}

@@ -139,7 +139,7 @@ public final class FeatureContainer {
* @return A stream of abilities.
*/
public Stream<Ability> getAbilities(String id, FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
Set<Ability> result = new HashSet<>();
if (abilitiesPresent()) {
synchronized (abilitiesLock) {
@@ -220,7 +220,7 @@ public final class FeatureContainer {
*/
public Stream<Modifier> getModifiers(String id,
FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
if (!modifiersPresent()) return Stream.<Modifier>empty();
Set<Modifier> mset = new HashSet<>();
synchronized (modifiersLock) {
@@ -246,7 +246,7 @@ public final class FeatureContainer {
* modifier applies to.
* @return The modified number.
*/
- public final float applyModifiers(float number, Turn turn,
+ public final float applyModifiers(float number, int turn,
String id, FreeColSpecObjectType fcgot) {
return applyModifiers(number, turn, getModifiers(id, fcgot, turn));
}
@@ -259,7 +259,7 @@ public final class FeatureContainer {
* @param mods The {@code Modifier}s to apply.
* @return The modified number.
*/
- public static float applyModifiers(float number, Turn turn,
+ public static float applyModifiers(float number, int turn,
Collection<Modifier> mods) {
return (mods == null || mods.isEmpty()) ? number
: applyModifiers_internal(number, turn,
@@ -466,7 +466,7 @@ public final class FeatureContainer {
*/
public void replaceSource(FreeColSpecObjectType oldSource,
FreeColSpecObjectType newSource) {
- for (Ability ability : transform(getAbilities(null, null, null),
+ for (Ability ability : transform(getAbilities(null, null, Turn.UNDEFINED),
a -> oldSource == null || a.getSource() == oldSource)) {
removeAbility(ability);
Ability newAbility = new Ability(ability);
@@ -474,7 +474,7 @@ public final class FeatureContainer {
addAbility(newAbility);
}

- for (Modifier modifier : transform(getModifiers(null, null, null),
+ for (Modifier modifier : transform(getModifiers(null, null, Turn.UNDEFINED),
m -> oldSource == null || m.getSource() == oldSource)) {
removeModifier(modifier);
Modifier newModifier = new Modifier(modifier);
@@ -494,7 +494,7 @@ public final class FeatureContainer {
StringBuilder sb = new StringBuilder(256);
sb.append("[FeatureContainer");
int siz = sb.length();
- for (Ability ability : iterable(getAbilities(null, null, null))) {
+ for (Ability ability : iterable(getAbilities(null, null, Turn.UNDEFINED))) {
sb.append(' ').append(ability);
}
if (sb.length() > siz) {
@@ -502,7 +502,7 @@ public final class FeatureContainer {
sb.append(']');
}
siz = sb.length();
- for (Modifier modifier : iterable(getModifiers(null, null, null))) {
+ for (Modifier modifier : iterable(getModifiers(null, null, Turn.UNDEFINED))) {
sb.append(' ').append(modifier);
}
if (sb.length() > siz) {
diff --git a/src/net/sf/freecol/common/model/FreeColObject.java b/src/net/sf/freecol/common/model/FreeColObject.java
index 72af78d16f8..45dd1d8a85b 100644
--- a/src/net/sf/freecol/common/model/FreeColObject.java
+++ b/src/net/sf/freecol/common/model/FreeColObject.java
@@ -42,6 +42,7 @@ import net.sf.freecol.common.ObjectWithId;
import net.sf.freecol.common.io.FreeColXMLReader;
import net.sf.freecol.common.io.FreeColXMLWriter;
import net.sf.freecol.common.io.FreeColXMLWriter.WriteScope;
+import net.sf.freecol.common.model.Turn;
import net.sf.freecol.common.util.Introspector;
import net.sf.freecol.common.util.LogBuilder;
import static net.sf.freecol.common.util.CollectionUtils.*;
@@ -394,7 +395,7 @@ public abstract class FreeColObject
* @return True if the ability is present.
*/
public final boolean hasAbility(String id, FreeColSpecObjectType fcgot) {
- return hasAbility(id, fcgot, null);
+ return hasAbility(id, fcgot, Turn.UNDEFINED);
}

/**
@@ -407,7 +408,7 @@ public abstract class FreeColObject
* @return True if the ability is present.
*/
public final boolean hasAbility(String id, FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
return FeatureContainer.hasAbility(getAbilities(id, fcgot, turn));
}

@@ -449,7 +450,7 @@ public abstract class FreeColObject
*/
public final Stream<Ability> getAbilities(String id,
FreeColSpecObjectType fcgot) {
- return getAbilities(id, fcgot, null);
+ return getAbilities(id, fcgot, Turn.UNDEFINED);
}

/**
@@ -465,7 +466,7 @@ public abstract class FreeColObject
*/
public Stream<Ability> getAbilities(String id,
FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
FeatureContainer fc = getFeatureContainer();
return (fc == null) ? Stream.<Ability>empty()
: fc.getAbilities(id, fcgot, turn);
@@ -523,7 +524,7 @@ public abstract class FreeColObject
* @return True if the modifier is present.
*/
public final boolean hasModifier(String id, FreeColSpecObjectType fcgot) {
- return hasModifier(id, fcgot, null);
+ return hasModifier(id, fcgot, Turn.UNDEFINED);
}

/**
@@ -536,7 +537,7 @@ public abstract class FreeColObject
* @return True if the modifier is present.
*/
public boolean hasModifier(String id, FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
return any(getModifiers(id, fcgot, turn));
}

@@ -605,7 +606,7 @@ public abstract class FreeColObject
*/
public Stream<Modifier> getModifiers(String id,
FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
FeatureContainer fc = getFeatureContainer();
return (fc == null) ? Stream.<Modifier>empty()
: fc.getModifiers(id, fcgot, turn);
@@ -620,7 +621,7 @@ public abstract class FreeColObject
* @param id The object identifier.
* @return The modified number.
*/
- public final float applyModifiers(float number, Turn turn, String id) {
+ public final float applyModifiers(float number, int turn, String id) {
return applyModifiers(number, turn, id, null);
}

@@ -635,7 +636,7 @@ public abstract class FreeColObject
* modifier applies to.
* @return The modified number.
*/
- public final float applyModifiers(float number, Turn turn,
+ public final float applyModifiers(float number, int turn,
String id, FreeColSpecObjectType fcgot) {
return applyModifiers(number, turn, getModifiers(id, fcgot, turn));
}
@@ -648,7 +649,7 @@ public abstract class FreeColObject
* @param mods The {@code Modifier}s to apply.
* @return The modified number.
*/
- public static final float applyModifiers(float number, Turn turn,
+ public static final float applyModifiers(float number, int turn,
Collection<Modifier> mods) {
return FeatureContainer.applyModifiers(number, turn, mods);
}
@@ -661,7 +662,7 @@ public abstract class FreeColObject
* @param mods The {@code Modifier}s to apply.
* @return The modified number.
*/
- public static final float applyModifiers(float number, Turn turn,
+ public static final float applyModifiers(float number, int turn,
Stream<Modifier> mods) {
return FeatureContainer.applyModifiers(number, turn, mods);
}
diff --git a/src/net/sf/freecol/common/model/Game.java b/src/net/sf/freecol/common/model/Game.java
index b49ac365718..aafd4181cc2 100644
--- a/src/net/sf/freecol/common/model/Game.java
+++ b/src/net/sf/freecol/common/model/Game.java
@@ -161,7 +161,7 @@ public class Game extends FreeColGameObject {
protected Player currentPlayer = null;

/** The current turn. */
- private Turn turn = new Turn(1);
+ private int turn = 1;

/** Whether the War of Spanish Succession has already taken place. */
private boolean spanishSuccession = false;
@@ -927,16 +927,20 @@ public class Game extends FreeColGameObject {
*
* @return The current {@code Turn}.
*/
- public Turn getTurn() {
+ public int getTurn() {
return turn;
}

+ public int getYear() {
+ return Turn.getYear(turn);
+ }
+
/**
* Sets the current turn in this game.
*
* @param newTurn The new {@code Turn} to set.
*/
- public void setTurn(Turn newTurn) {
+ public void setTurn(final int newTurn) {
turn = newTurn;
}

@@ -1338,7 +1342,7 @@ public class Game extends FreeColGameObject {

xw.writeAttribute(UUID_TAG, getUUID());

- xw.writeAttribute(TURN_TAG, getTurn().getNumber());
+ xw.writeAttribute(TURN_TAG, getTurn());

xw.writeAttribute(SPANISH_SUCCESSION_TAG, spanishSuccession);

@@ -1411,7 +1415,7 @@ public class Game extends FreeColGameObject {
}
}

- turn = new Turn(xr.getAttribute(TURN_TAG, 1));
+ turn = xr.getAttribute(TURN_TAG, 1);

spanishSuccession = xr.getAttribute(SPANISH_SUCCESSION_TAG, false);

diff --git a/src/net/sf/freecol/common/model/HighScore.java b/src/net/sf/freecol/common/model/HighScore.java
index 5c55dbab06a..384b89abfc1 100644
--- a/src/net/sf/freecol/common/model/HighScore.java
+++ b/src/net/sf/freecol/common/model/HighScore.java
@@ -156,7 +156,7 @@ public class HighScore extends FreeColObject {
private HighScore(Player player) {
Game game = player.getGame();
this.date = new Date();
- this.retirementTurn = game.getTurn().getNumber();
+ this.retirementTurn = game.getTurn();
this.score = player.getScore();
this.level = find(ScoreLevel.values(),
sl -> sl.getMinimumScore() <= this.score,
@@ -167,7 +167,7 @@ public class HighScore extends FreeColObject {
this.nColonies = count(player.getColonies());
this.nUnits = player.getUnitCount();
this.independenceTurn = (player.getPlayerType()
- == Player.PlayerType.INDEPENDENT) ? game.getTurn().getNumber()
+ == Player.PlayerType.INDEPENDENT) ? game.getTurn()
: -1;
this.nationName = Messages.message(player.getNationLabel());
this.difficulty = game.getSpecification().getDifficultyLevel();
diff --git a/src/net/sf/freecol/common/model/HistoryEvent.java b/src/net/sf/freecol/common/model/HistoryEvent.java
index 91e68321e85..39bf2cd063b 100644
--- a/src/net/sf/freecol/common/model/HistoryEvent.java
+++ b/src/net/sf/freecol/common/model/HistoryEvent.java
@@ -84,7 +84,7 @@ public class HistoryEvent extends StringTemplate {


/** The turn in which the event took place */
- private Turn turn;
+ private int turn;

/** The type of event. */
private HistoryEventType eventType;
@@ -109,7 +109,7 @@ public class HistoryEvent extends StringTemplate {
* @param player An optional {@code Player} responsible for
* this event.
*/
- public HistoryEvent(Turn turn, HistoryEventType eventType, Player player) {
+ public HistoryEvent(int turn, HistoryEventType eventType, Player player) {
super(eventType.getDescriptionKey(), null, TemplateType.TEMPLATE);
this.turn = turn;
this.eventType = eventType;
@@ -132,7 +132,7 @@ public class HistoryEvent extends StringTemplate {
*
* @return The turn.
*/
- public final Turn getTurn() {
+ public final int getTurn() {
return turn;
}

@@ -219,7 +219,7 @@ public class HistoryEvent extends StringTemplate {
protected void writeAttributes(FreeColXMLWriter xw) throws XMLStreamException {
super.writeAttributes(xw);

- xw.writeAttribute(TURN_TAG, this.turn.getNumber());
+ xw.writeAttribute(TURN_TAG, this.turn);

xw.writeAttribute(EVENT_TYPE_TAG, this.eventType);

@@ -235,7 +235,7 @@ public class HistoryEvent extends StringTemplate {
protected void readAttributes(FreeColXMLReader xr) throws XMLStreamException {
super.readAttributes(xr);

- turn = new Turn(xr.getAttribute(TURN_TAG, 0));
+ turn = xr.getAttribute(TURN_TAG, 0);

eventType = xr.getAttribute(EVENT_TYPE_TAG,
HistoryEventType.class, (HistoryEventType)null);
@@ -274,7 +274,7 @@ public class HistoryEvent extends StringTemplate {
@Override
public int hashCode() {
int hash = super.hashCode();
- hash = 31 * hash + this.turn.hashCode();
+ hash = 31 * hash + this.turn;
hash = 31 * hash + this.eventType.ordinal();
if (this.playerId != null) hash = 31 * hash + this.playerId.hashCode();
hash = 31 * hash + this.score;
@@ -289,7 +289,7 @@ public class HistoryEvent extends StringTemplate {
StringBuilder sb = new StringBuilder(32);
sb.append('[').append(getId())
.append(' ').append(eventType)
- .append(" (").append(turn.getYear()).append(')');
+ .append(" (").append(Turn.getYear(turn)).append(')');
if (playerId != null) {
sb.append(" playerId=").append(playerId)
.append(" score=").append(score);
diff --git a/src/net/sf/freecol/common/model/LastSale.java b/src/net/sf/freecol/common/model/LastSale.java
index 59c8edf1065..23102b43d0f 100644
--- a/src/net/sf/freecol/common/model/LastSale.java
+++ b/src/net/sf/freecol/common/model/LastSale.java
@@ -34,7 +34,7 @@ public final class LastSale extends FreeColObject {
public static final String TAG = "lastSale";

/** When a sale was made. */
- private Turn when;
+ private int when;

/** The price per unit returned from the sale. */
private int price;
@@ -54,7 +54,7 @@ public final class LastSale extends FreeColObject {
* @param price The per-unit price of the sale.
*/
public LastSale(Location where, GoodsType what,
- Turn when, int price) {
+ int when, int price) {
this(makeKey(where, what), when, price);
}

@@ -65,7 +65,7 @@ public final class LastSale extends FreeColObject {
* @param when In which {@code Turn} the sale occurred.
* @param price The per-unit price of the sale.
*/
- public LastSale(String id, Turn when, int price) {
+ public LastSale(String id, int when, int price) {
setId(id);
this.when = when;
this.price = price;
@@ -87,7 +87,7 @@ public final class LastSale extends FreeColObject {
*
* @return The {@code Turn} when the sale was made.
*/
- public Turn getWhen() {
+ public int getWhen() {
return when;
}

@@ -126,7 +126,7 @@ public final class LastSale extends FreeColObject {
protected void writeAttributes(FreeColXMLWriter xw) throws XMLStreamException {
super.writeAttributes(xw);

- xw.writeAttribute(WHEN_TAG, when.getNumber());
+ xw.writeAttribute(WHEN_TAG, when);

xw.writeAttribute(PRICE_TAG, price);
}
@@ -138,7 +138,7 @@ public final class LastSale extends FreeColObject {
public void readAttributes(FreeColXMLReader xr) throws XMLStreamException {
super.readAttributes(xr);

- when = new Turn(xr.getAttribute(WHEN_TAG, 0));
+ when = xr.getAttribute(WHEN_TAG, 0);

price = xr.getAttribute(PRICE_TAG, 0);
}
diff --git a/src/net/sf/freecol/common/model/LostCityRumour.java b/src/net/sf/freecol/common/model/LostCityRumour.java
index 12526637a2c..07158bbcf1b 100644
--- a/src/net/sf/freecol/common/model/LostCityRumour.java
+++ b/src/net/sf/freecol/common/model/LostCityRumour.java
@@ -278,13 +278,13 @@ public class LostCityRumour extends TileItem {
? new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
RumourType.NOTHING.getAlternateDescriptionKey("mounds"),
player)
- : (game.getTurn().getYear() % 100 == 12
+ : (game.getYear() % 100 == 12
&& randomInt(logger, "Mayans?", random, 4) == 0)
? new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
RumourType.NOTHING.getAlternateDescriptionKey("mayans"),
player)
.addAmount("%years%",
- MAYAN_PROPHESY_YEAR - game.getTurn().getYear())
+ MAYAN_PROPHESY_YEAR - game.getYear())
: new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
NameCache.getRumourNothingKey(random),
player);
diff --git a/src/net/sf/freecol/common/model/Modifier.java b/src/net/sf/freecol/common/model/Modifier.java
index 0d42e3039aa..755cc58c3de 100644
--- a/src/net/sf/freecol/common/model/Modifier.java
+++ b/src/net/sf/freecol/common/model/Modifier.java
@@ -294,7 +294,7 @@ public class Modifier extends Feature {
* @return A new timed modifier.
*/
public static Modifier makeTimedModifier(String id, Modifier template,
- Turn start) {
+ int start) {
Modifier modifier = new Modifier(id, template);
float inc = template.getIncrement();
int duration = template.getDuration();
@@ -304,7 +304,7 @@ public class Modifier extends Feature {
duration = (int)(template.getValue()/-inc);
}
modifier.setIncrement(template.getIncrementType(), inc, start,
- new Turn(start.getNumber() + duration));
+ start + duration);
return modifier;
}

@@ -343,10 +343,10 @@ public class Modifier extends Feature {
* @param turn The {@code Turn} to check.
* @return The turn-dependent modifier value.
*/
- public final float getValue(Turn turn) {
+ public final float getValue(int turn) {
if (appliesTo(turn)) {
if (hasIncrement()) {
- float f = (turn.getNumber() - getFirstTurn().getNumber())
+ float f = (turn - getFirstTurn())
* increment;
return apply(value, f, incrementType);
} else {
@@ -430,8 +430,8 @@ public class Modifier extends Feature {
*/
public final Modifier setIncrement(final ModifierType incrementType,
final float increment,
- Turn firstTurn, Turn lastTurn) {
- if (firstTurn == null) {
+ int firstTurn, int lastTurn) {
+ if (firstTurn == Turn.UNDEFINED) {
throw new IllegalArgumentException("Null firstTurn");
}
this.incrementType = incrementType;
@@ -514,7 +514,7 @@ public class Modifier extends Feature {
* @param turn The {@code Turn} to evaluate increments in.
* @return The modified number.
*/
- public float applyTo(float number, Turn turn) {
+ public float applyTo(float number, int turn) {
return (incrementType == null) ? apply(number, value)
: apply(number, getValue(turn), getType());
}
diff --git a/src/net/sf/freecol/common/model/Monarch.java b/src/net/sf/freecol/common/model/Monarch.java
index d603c0f059e..6bfc6260844 100644
--- a/src/net/sf/freecol/common/model/Monarch.java
+++ b/src/net/sf/freecol/common/model/Monarch.java
@@ -410,7 +410,7 @@ public final class Monarch extends FreeColGameObject implements Named {
final Specification spec = getSpecification();
List<RandomChoice<MonarchAction>> choices = new ArrayList<>();
int dx = 1 + spec.getInteger(GameOptions.MONARCH_MEDDLING);
- int turn = getGame().getTurn().getNumber();
+ int turn = getGame().getTurn();
int grace = (6 - dx) * 10; // 10-50

// Nothing happens during the first few turns, if there are no
@@ -466,7 +466,7 @@ public final class Monarch extends FreeColGameObject implements Named {
public int raiseTax(Random random) {
final Specification spec = getSpecification();
int taxAdjustment = spec.getInteger(GameOptions.TAX_ADJUSTMENT);
- int turn = getGame().getTurn().getNumber();
+ int turn = getGame().getTurn();
int oldTax = player.getTax();
int adjust = Math.max(1, (6 - taxAdjustment) * 10); // 20-60
adjust = 1 + randomInt(logger, "Tax rise", random, 5 + turn/adjust);
@@ -547,7 +547,7 @@ public final class Monarch extends FreeColGameObject implements Named {
int interventionTurns = spec.getInteger(GameOptions.INTERVENTION_TURNS);
if (interventionTurns > 0) {
Force ivf = getInterventionForce();
- int updates = getGame().getTurn().getNumber() / interventionTurns;
+ int updates = getGame().getTurn() / interventionTurns;
for (AbstractUnit unit : ivf.getLandUnitsList()) {
// add units depending on current turn
int value = unit.getNumber() + updates;
diff --git a/src/net/sf/freecol/common/model/Operand.java b/src/net/sf/freecol/common/model/Operand.java
index c4d661b7acb..5a393b3e8f7 100644
--- a/src/net/sf/freecol/common/model/Operand.java
+++ b/src/net/sf/freecol/common/model/Operand.java
@@ -194,7 +194,7 @@ public class Operand extends Scope {
result = game.invokeMethod(methodName, Integer.class, 0);
break;
case YEAR:
- result = game.getTurn().getYear();
+ result = Turn.getYear(game.getTurn());
break;
case OPTION:
result = game.getSpecification().getInteger(getType());
diff --git a/src/net/sf/freecol/common/model/Player.java b/src/net/sf/freecol/common/model/Player.java
index d2cc3472e93..4d399cd4841 100644
--- a/src/net/sf/freecol/common/model/Player.java
+++ b/src/net/sf/freecol/common/model/Player.java
@@ -1170,7 +1170,7 @@ public class Player extends FreeColGameObject implements Nameable {
if (!isColonial()) return;

final Specification spec = getSpecification();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
final int current = immigrationRequired;
int base = spec.getInteger(GameOptions.CROSSES_INCREMENT);
// If the religious unrest bonus is present, immigrationRequired
@@ -1429,7 +1429,7 @@ public class Player extends FreeColGameObject implements Nameable {
*
* @return A map of father id to {@code Turn}s.
*/
- public java.util.Map<String, Turn> getElectionTurns() {
+ public java.util.Map<String, Integer> getElectionTurns() {
return transform(getHistory(),
matchKey(HistoryEvent.HistoryEventType.FOUNDING_FATHER,
HistoryEvent::getEventType),
@@ -1614,7 +1614,7 @@ public class Player extends FreeColGameObject implements Nameable {
: StringTemplate.template("model.indianSettlement.lastSale")
.addNamed("%goodsType%", what)
.addAmount("%price%", data.getPrice())
- .addStringTemplate("%turn%", data.getWhen().getLabel());
+ .addStringTemplate("%turn%", Turn.getLabel(data.getWhen()));
}

/**
@@ -3591,7 +3591,7 @@ public class Player extends FreeColGameObject implements Nameable {
* @param what A description of the cheating.
*/
public void logCheat(String what) {
- logger.finest("CHEAT: " + getGame().getTurn().getNumber()
+ logger.finest("CHEAT: " + getGame().getTurn()
+ " " + lastPart(getNationId(), ".")
+ " " + what);
}
@@ -3810,7 +3810,7 @@ public class Player extends FreeColGameObject implements Nameable {
ability.toXML(xw);
}

- Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
for (Modifier modifier : transform(getSortedModifiers(), m ->
m.isTemporary() && !m.isOutOfDate(turn))) {
modifier.toXML(xw);
diff --git a/src/net/sf/freecol/common/model/ProductionCache.java b/src/net/sf/freecol/common/model/ProductionCache.java
index 9d57639701c..e417010b6dc 100644
--- a/src/net/sf/freecol/common/model/ProductionCache.java
+++ b/src/net/sf/freecol/common/model/ProductionCache.java
@@ -137,7 +137,7 @@ public class ProductionCache {
+ getGoodsCount(g.getType()));
} else {
surplus.setAmount((int)FeatureContainer
- .applyModifiers(surplus.getAmount(), null, modifiers));
+ .applyModifiers(surplus.getAmount(), Turn.UNDEFINED, modifiers));
}
goods.add(surplus);
}
diff --git a/src/net/sf/freecol/common/model/Region.java b/src/net/sf/freecol/common/model/Region.java
index fda087516b9..8f345f9b751 100644
--- a/src/net/sf/freecol/common/model/Region.java
+++ b/src/net/sf/freecol/common/model/Region.java
@@ -145,7 +145,7 @@ public class Region extends FreeColGameObject implements Nameable {
protected boolean discoverable = false;

/** Which Turn the region was discovered in. */
- protected Turn discoveredIn;
+ protected int discoveredIn;

/** Which Player the Region was discovered by. */
protected Player discoveredBy;
@@ -366,7 +366,7 @@ public class Region extends FreeColGameObject implements Nameable {
*
* @return The discovery turn.
*/
- public final Turn getDiscoveredIn() {
+ public final int getDiscoveredIn() {
return this.discoveredIn;
}

@@ -375,7 +375,7 @@ public class Region extends FreeColGameObject implements Nameable {
*
* @param newDiscoveredIn The new discoveredy turn.
*/
- public final void setDiscoveredIn(final Turn newDiscoveredIn) {
+ public final void setDiscoveredIn(final int newDiscoveredIn) {
this.discoveredIn = newDiscoveredIn;
}

@@ -422,7 +422,7 @@ public class Region extends FreeColGameObject implements Nameable {
* @param turn The {@code Turn} of discovery.
* @return A list of discovered {@code Region}s.
*/
- public List<Region> discover(Player player, Turn turn) {
+ public List<Region> discover(Player player, int turn) {
List<Region> result = new ArrayList<>();
this.discoveredBy = player;
this.discoveredIn = turn;
@@ -519,8 +519,8 @@ public class Region extends FreeColGameObject implements Nameable {
xw.writeAttribute(PARENT_TAG, parent);
}

- if (discoveredIn != null) {
- xw.writeAttribute(DISCOVERED_IN_TAG, discoveredIn.getNumber());
+ if (discoveredIn != Turn.UNDEFINED) {
+ xw.writeAttribute(DISCOVERED_IN_TAG, discoveredIn);
}

if (discoveredBy != null) {
@@ -574,8 +574,7 @@ public class Region extends FreeColGameObject implements Nameable {

scoreValue = xr.getAttribute(SCORE_VALUE_TAG, 0);

- int turn = xr.getAttribute(DISCOVERED_IN_TAG, UNDEFINED);
- discoveredIn = (turn == UNDEFINED) ? null : new Turn(turn);
+ discoveredIn = xr.getAttribute(DISCOVERED_IN_TAG, Turn.UNDEFINED);

discoveredBy = xr.findFreeColGameObject(getGame(), DISCOVERED_BY_TAG,
Player.class, (Player)null, false);
diff --git a/src/net/sf/freecol/common/model/Resource.java b/src/net/sf/freecol/common/model/Resource.java
index 47f5545269b..8abcc8525ab 100644
--- a/src/net/sf/freecol/common/model/Resource.java
+++ b/src/net/sf/freecol/common/model/Resource.java
@@ -210,7 +210,7 @@ public class Resource extends TileItem {
@Override
public int applyBonus(GoodsType goodsType, UnitType unitType,
int potential) {
- int amount = -potential + (int)applyModifiers(potential, null,
+ int amount = -potential + (int)applyModifiers(potential, Turn.UNDEFINED,
type.getModifiers(goodsType.getId(), unitType));
return potential
+ ((quantity == UNLIMITED || quantity > amount) ? amount
diff --git a/src/net/sf/freecol/common/model/Role.java b/src/net/sf/freecol/common/model/Role.java
index 315213874a9..6480acbbbc2 100644
--- a/src/net/sf/freecol/common/model/Role.java
+++ b/src/net/sf/freecol/common/model/Role.java
@@ -277,7 +277,7 @@ public class Role extends BuildableType {
* @return The offense value.
*/
public double getOffence() {
- return applyModifiers(0.0f, null, Modifier.OFFENCE);
+ return applyModifiers(0.0f, Turn.UNDEFINED, Modifier.OFFENCE);
}

/**
@@ -295,7 +295,7 @@ public class Role extends BuildableType {
* @return The defence value.
*/
private double getDefence() {
- return applyModifiers(0.0f, null, Modifier.DEFENCE);
+ return applyModifiers(0.0f, Turn.UNDEFINED, Modifier.DEFENCE);
}

/**
diff --git a/src/net/sf/freecol/common/model/Settlement.java b/src/net/sf/freecol/common/model/Settlement.java
index 51ce5ff56a9..7fcdbb32665 100644
--- a/src/net/sf/freecol/common/model/Settlement.java
+++ b/src/net/sf/freecol/common/model/Settlement.java
@@ -807,7 +807,7 @@ public abstract class Settlement extends GoodsLocation
if (ability.isIndependent()) ability.toXML(xw);
}

- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
for (Modifier modifier : getSortedModifiers()) {
if (modifier.hasIncrement()
&& modifier.isOutOfDate(turn)) continue;
diff --git a/src/net/sf/freecol/common/model/SimpleCombatModel.java b/src/net/sf/freecol/common/model/SimpleCombatModel.java
index 907584a7910..53d7a6b95da 100644
--- a/src/net/sf/freecol/common/model/SimpleCombatModel.java
+++ b/src/net/sf/freecol/common/model/SimpleCombatModel.java
@@ -149,7 +149,7 @@ public class SimpleCombatModel extends CombatModel {
|| combatIsAttack(attacker, defender)
|| combatIsSettlementAttack(attacker, defender)) {
Set<Modifier> mods = getOffensiveModifiers(attacker, defender);
- Turn turn = attacker.getGame().getTurn();
+ int turn = attacker.getGame().getTurn();
result = FeatureContainer.applyModifiers(0.0f, turn, mods);
if (lb != null) {
logModifiers(lb, mods);
@@ -202,7 +202,7 @@ public class SimpleCombatModel extends CombatModel {
|| combatIsSettlementAttack(attacker, defender)
|| combatIsBombard(attacker, defender)) {
Set<Modifier> mods = getDefensiveModifiers(attacker, defender);
- Turn turn = defender.getGame().getTurn();
+ int turn = defender.getGame().getTurn();
result = FeatureContainer.applyModifiers(0.0f, turn, mods);
if (lb != null) {
logModifiers(lb, mods);
@@ -232,7 +232,7 @@ public class SimpleCombatModel extends CombatModel {
|| combatIsAttack(attacker, defender)
|| combatIsSettlementAttack(attacker, defender)) {
final Unit attackerUnit = (Unit)attacker;
- final Turn turn = attackerUnit.getGame().getTurn();
+ final int turn = attackerUnit.getGame().getTurn();

// Base offense
result.add(new Modifier(Modifier.OFFENCE,
@@ -423,7 +423,7 @@ public class SimpleCombatModel extends CombatModel {
|| combatIsAttack(attacker, defender)
|| combatIsBombard(attacker, defender)) {
final Unit defenderUnit = (Unit)defender;
- final Turn turn = defenderUnit.getGame().getTurn();
+ final int turn = defenderUnit.getGame().getTurn();

// Base defence
result.add(new Modifier(Modifier.DEFENCE,
diff --git a/src/net/sf/freecol/common/model/Specification.java b/src/net/sf/freecol/common/model/Specification.java
index 6b293ae37b1..54e5bc41228 100644
--- a/src/net/sf/freecol/common/model/Specification.java
+++ b/src/net/sf/freecol/common/model/Specification.java
@@ -1891,8 +1891,7 @@ public final class Specification {
* @param turn The {@code Turn} to check.
* @return The age of the given turn.
*/
- public int getAge(Turn turn) {
- int n = turn.getNumber();
+ public int getAge(final int n) {
return (n < ages[0]) ? -1
: (n < ages[1]) ? 0
: (n < ages[2]) ? 1
diff --git a/src/net/sf/freecol/common/model/Tile.java b/src/net/sf/freecol/common/model/Tile.java
index 444ba599470..42e11ca8317 100644
--- a/src/net/sf/freecol/common/model/Tile.java
+++ b/src/net/sf/freecol/common/model/Tile.java
@@ -1367,7 +1367,7 @@ public final class Tile extends UnitLocation implements Named, Ownable {
public double getDefenceValue() {
final TileType type = getType();
return (type == null) ? 0.0
- : applyModifiers(1.0f, null, type.getDefenceModifiers());
+ : applyModifiers(1.0f, Turn.UNDEFINED, type.getDefenceModifiers());
}

/**
@@ -2344,7 +2344,7 @@ public final class Tile extends UnitLocation implements Named, Ownable {
@Override
public Stream<Ability> getAbilities(String id,
FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
// Delegate to type
return getType().getAbilities(id, fcgot, turn);
}
diff --git a/src/net/sf/freecol/common/model/TileImprovementType.java b/src/net/sf/freecol/common/model/TileImprovementType.java
index 91574a535c4..1d40350ec12 100644
--- a/src/net/sf/freecol/common/model/TileImprovementType.java
+++ b/src/net/sf/freecol/common/model/TileImprovementType.java
@@ -370,7 +370,7 @@ public final class TileImprovementType extends FreeColSpecObjectType {
if (tt == null) { // simple bonus
int production = tile.getPotentialProduction(goodsType, colonistType);
if (production > 0) {
- float chg = applyModifiers(production, null,
+ float chg = applyModifiers(production, Turn.UNDEFINED,
goodsType.getId());
value = (int)(chg - production);
}
diff --git a/src/net/sf/freecol/common/model/TileType.java b/src/net/sf/freecol/common/model/TileType.java
index 21893cf7829..374aa158678 100644
--- a/src/net/sf/freecol/common/model/TileType.java
+++ b/src/net/sf/freecol/common/model/TileType.java
@@ -345,7 +345,7 @@ public final class TileType extends FreeColSpecObjectType
UnitType unitType) {
if (goodsType == null) return 0;
int amount = getBaseProduction(null, goodsType, unitType);
- amount = (int)applyModifiers(amount, null, goodsType.getId(),
+ amount = (int)applyModifiers(amount, Turn.UNDEFINED, goodsType.getId(),
unitType);
return (amount < 0) ? 0 : amount;
}
diff --git a/src/net/sf/freecol/common/model/Turn.java b/src/net/sf/freecol/common/model/Turn.java
index c185508a575..d1acb941478 100644
--- a/src/net/sf/freecol/common/model/Turn.java
+++ b/src/net/sf/freecol/common/model/Turn.java
@@ -37,20 +37,8 @@ public class Turn {
/** The number of seasons. */
private static int seasonNumber = 2;

-
- /** The numerical value of the Turn, never less than one. */
- private int turn = 1;
-
-
- /**
- * Creates a new {@code Turn} instance.
- *
- * @param turn The numeric value of the turn.
- */
- public Turn(int turn) {
- this.turn = turn;
- }
-
+ public static int UNDEFINED = FreeColObject.UNDEFINED;
+ public static int FIRST_TURN = 1;

/**
* Initialize the fundamental Turn year constants. Called from
@@ -125,33 +113,6 @@ public class Turn {
}

/**
- * Get the next turn, with a turn number one greater.
- *
- * @return The new {@code Turn}.
- */
- public Turn next() {
- return new Turn(turn + 1);
- }
-
- /**
- * Gets the turn number.
- *
- * @return The number of turns.
- */
- public int getNumber() {
- return turn;
- }
-
- /**
- * Gets the year this turn is in.
- *
- * @return The calculated year based on the turn number.
- */
- public int getYear() {
- return getYear(turn);
- }
-
- /**
* Gets the year the given turn is in.
*
* @param turn The turn number to get the year for.
@@ -177,25 +138,6 @@ public class Turn {
}

/**
- * Gets the season index of this turn.
- *
- * @return The season index corresponding to the current turn
- * number, or negative if before the season year.
- */
- public int getSeason() {
- return getSeason(turn);
- }
-
- /**
- * Gets a localization template for this turn.
- *
- * @return A {@code StringTemplate} describing the turn.
- */
- public StringTemplate getLabel() {
- return getLabel(turn);
- }
-
- /**
* Gets a localization template for a given turn.
*
* @param turn The integer value of the turn to describe.
@@ -213,31 +155,22 @@ public class Turn {
}

/**
- * Is this turn the first one?
- *
- * @return True if this turn is the first turn.
- */
- public boolean isFirstTurn() {
- return turn == 1;
- }
-
- /**
* Is this turn the season year?
*
* @return True if this turn is the season year.
*/
- public boolean isFirstSeasonTurn() {
+ public static boolean isFirstSeasonTurn(final int turn) {
return turn == yearToTurn(getSeasonYear());
}

/**
- * Get the suffix for a save game name for this turn.
+ * Get the suffix for a save game name for given turn.
*
* @return The save game suffix.
*/
- public String getSaveGameSuffix() {
- final int season = getSeason();
- String result = String.valueOf(getYear());
+ public static String getSaveGameSuffix(int turn) {
+ final int season = getSeason(turn);
+ String result = String.valueOf(getYear(turn));
if (season >= 0) {
final int SeasonNumberDigits = String.valueOf(getSeasonNumber()).length(); // for leading zeroes
result += "_" + String.format("%0"+String.valueOf(SeasonNumberDigits)+"d", season+1)
@@ -258,34 +191,4 @@ public class Turn {
: (turns >= 0) ? Integer.toString(turns)
: ">" + Integer.toString(-turns - 1);
}
-
-
- // Override Object
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean equals(Object o) {
- if (o instanceof Turn) {
- return this.turn == ((Turn)o).turn;
- }
- return false;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int hashCode() {
- return turn;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String toString() {
- return String.valueOf(turn);
- }
}
diff --git a/src/net/sf/freecol/common/model/Unit.java b/src/net/sf/freecol/common/model/Unit.java
index 436da2aa33c..04bb8f1ed06 100644
--- a/src/net/sf/freecol/common/model/Unit.java
+++ b/src/net/sf/freecol/common/model/Unit.java
@@ -2388,8 +2388,7 @@ public class Unit extends GoodsLocation
*/
@Override
public int getInitialMovesLeft() {
- Turn turn = getGame().getTurn();
- return (int)applyModifiers(unitType.getMovement(), turn,
+ return (int)applyModifiers(unitType.getMovement(), getGame().getTurn(),
Modifier.MOVEMENT_BONUS, unitType);
}

@@ -3174,7 +3173,7 @@ public class Unit extends GoodsLocation
* @return The line of sight of this {@code Unit}.
*/
public int getLineOfSight() {
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
return (int)applyModifiers(unitType.getLineOfSight(), turn,
Stream.concat(this.getModifiers(Modifier.LINE_OF_SIGHT_BONUS,
unitType, turn),
@@ -3628,7 +3627,7 @@ public class Unit extends GoodsLocation
* @return The set of {@code Modifier}s found.
*/
public Set<Modifier> getCombatModifiers(String id,
- FreeColSpecObjectType fcgot, Turn turn) {
+ FreeColSpecObjectType fcgot, int turn) {
final Player owner = getOwner();
final UnitType unitType = getType();
Set<Modifier> result = new HashSet<>();
@@ -4181,7 +4180,7 @@ public class Unit extends GoodsLocation
*/
@Override
public Stream <Ability> getAbilities(String id, FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
final Player owner = getOwner();
final UnitType unitType = getType();

@@ -4214,7 +4213,7 @@ public class Unit extends GoodsLocation
* @param turn The turn that applies.
* @return A stream of {@code Ability}s found.
*/
- private Stream<Ability> getLocationAbilities(String id, Turn turn) {
+ private Stream<Ability> getLocationAbilities(String id, int turn) {
final UnitType unitType = getType();
final Settlement settlement = getSettlement();
if (settlement != null) {
@@ -4242,7 +4241,7 @@ public class Unit extends GoodsLocation
*/
@Override
public Stream<Modifier> getModifiers(String id, FreeColSpecObjectType fcgot,
- Turn turn) {
+ int turn) {
final Player owner = getOwner();
final UnitType unitType = getType();

diff --git a/src/net/sf/freecol/common/model/UnitType.java b/src/net/sf/freecol/common/model/UnitType.java
index dbccfebc7bc..d386854b203 100644
--- a/src/net/sf/freecol/common/model/UnitType.java
+++ b/src/net/sf/freecol/common/model/UnitType.java
@@ -31,6 +31,7 @@ import javax.xml.stream.XMLStreamException;
import net.sf.freecol.common.io.FreeColXMLReader;
import net.sf.freecol.common.io.FreeColXMLWriter;
import net.sf.freecol.common.model.Colony.NoBuildReason;
+import net.sf.freecol.common.model.Turn;
import net.sf.freecol.common.model.UnitChangeType.UnitChange;
import static net.sf.freecol.common.util.CollectionUtils.*;

@@ -184,7 +185,7 @@ public final class UnitType extends BuildableType implements Consumer {
* @return The offence value.
*/
public double getOffence() {
- return applyModifiers(offence, null, Modifier.OFFENCE);
+ return applyModifiers(offence, Turn.UNDEFINED, Modifier.OFFENCE);
}

/**
@@ -211,7 +212,7 @@ public final class UnitType extends BuildableType implements Consumer {
* @return The defence value.
*/
public double getDefence() {
- return applyModifiers(defence, null, Modifier.DEFENCE);
+ return applyModifiers(defence, Turn.UNDEFINED, Modifier.DEFENCE);
}

/**
diff --git a/src/net/sf/freecol/common/model/WorkLocation.java b/src/net/sf/freecol/common/model/WorkLocation.java
index 61f6c6b8e88..d20bb69d026 100644
--- a/src/net/sf/freecol/common/model/WorkLocation.java
+++ b/src/net/sf/freecol/common/model/WorkLocation.java
@@ -568,7 +568,7 @@ public abstract class WorkLocation extends UnitLocation
public int getUnitProduction(Unit unit, GoodsType goodsType) {
if (unit == null || unit.getWorkType() != goodsType) return 0;
final UnitType unitType = unit.getType();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
return Math.max(0,
(int)applyModifiers(getBaseProduction(getProductionType(),
goodsType, unitType),
diff --git a/src/net/sf/freecol/common/networking/NewTurnMessage.java b/src/net/sf/freecol/common/networking/NewTurnMessage.java
index 7824ef4420b..38c46e1946b 100644
--- a/src/net/sf/freecol/common/networking/NewTurnMessage.java
+++ b/src/net/sf/freecol/common/networking/NewTurnMessage.java
@@ -20,7 +20,6 @@
package net.sf.freecol.common.networking;

import net.sf.freecol.common.model.Game;
-import net.sf.freecol.common.model.Turn;
import net.sf.freecol.server.FreeColServer;
import net.sf.freecol.server.model.ServerPlayer;

@@ -42,8 +41,8 @@ public class NewTurnMessage extends AttributeMessage {
*
* @param turn The new {@code Turn}.
*/
- public NewTurnMessage(Turn turn) {
- super(TAG, TURN_TAG, String.valueOf(turn.getNumber()));
+ public NewTurnMessage(int turn) {
+ super(TAG, TURN_TAG, String.valueOf(turn));
}

/**
diff --git a/src/net/sf/freecol/server/ai/AIColony.java b/src/net/sf/freecol/server/ai/AIColony.java
index 48352cf23c3..f93a1277f27 100644
--- a/src/net/sf/freecol/server/ai/AIColony.java
+++ b/src/net/sf/freecol/server/ai/AIColony.java
@@ -103,7 +103,7 @@ public class AIColony extends AIObject implements PropertyChangeListener {
= new ArrayList<>();

/** When should the workers in this Colony be rearranged? */
- private Turn rearrangeTurn = new Turn(0);
+ private int rearrangeTurn = 0;

/**
* Goods that should be completely exported and only exported to
@@ -228,13 +228,13 @@ public class AIColony extends AIObject implements PropertyChangeListener {
}

// Skip this colony if it does not yet need rearranging.
- final int turn = getGame().getTurn().getNumber();
- if (rearrangeTurn.getNumber() > turn) {
+ final int turn = getGame().getTurn();
+ if (rearrangeTurn > turn) {
if (colony.getCurrentlyBuilding() == null
&& colonyPlan != null
&& colonyPlan.getBestBuildableType() != null) {
logger.warning(colony.getName() + " could be building but"
- + " is asleep until turn: " + rearrangeTurn.getNumber()
+ + " is asleep until turn: " + rearrangeTurn
+ "( > " + turn + ")");
} else {
return;
@@ -311,7 +311,7 @@ public class AIColony extends AIObject implements PropertyChangeListener {
preferScouts, aw);
if (scratch == null) {
lb.add(", failed to assign workers.");
- rearrangeTurn = new Turn(turn + 1);
+ rearrangeTurn = turn + 1;
return;
}
lb.add(", assigned ", workers.size(), " workers");
@@ -403,7 +403,7 @@ public class AIColony extends AIObject implements PropertyChangeListener {
for (UnitWas uw : was) lb.add("\n ", uw);

// Set the next rearrangement turn.
- rearrangeTurn = new Turn(turn + nextRearrange);
+ rearrangeTurn = turn + nextRearrange;
}

/**
@@ -607,7 +607,7 @@ public class AIColony extends AIObject implements PropertyChangeListener {
AIMessage.askPutOutsideColony(getAIUnit(u));
}
if (colony.getUnitCount() <= 0) avertAutoDestruction();
- rearrangeTurn = new Turn(getGame().getTurn().getNumber());
+ rearrangeTurn = getGame().getTurn();
}

/**
@@ -1348,7 +1348,7 @@ public class AIColony extends AIObject implements PropertyChangeListener {
* run fully next time it is invoked.
*/
public void requestRearrange() {
- rearrangeTurn = new Turn(0);
+ rearrangeTurn = 0;
}


diff --git a/src/net/sf/freecol/server/ai/EuropeanAIPlayer.java b/src/net/sf/freecol/server/ai/EuropeanAIPlayer.java
index 43931858669..10594fd8478 100644
--- a/src/net/sf/freecol/server/ai/EuropeanAIPlayer.java
+++ b/src/net/sf/freecol/server/ai/EuropeanAIPlayer.java
@@ -517,7 +517,7 @@ public class EuropeanAIPlayer extends MissionAIPlayer {
}
}

- if (game.getTurn().getNumber() > 300
+ if (game.getTurn() > 300 // FIXME: put it into a const in class Turn
&& player.isAtWar()
&& randoms[cheatIndex++] < offensiveLandUnitCheatPercent) {
// - collect enemies, prefer not to antagonize the strong or
@@ -1386,7 +1386,7 @@ public class EuropeanAIPlayer extends MissionAIPlayer {
*/
@Override
public int scoutsNeeded() {
- return 3 - (getGame().getTurn().getNumber() / 100);
+ return 3 - (getGame().getTurn() / 100);
}

/**
@@ -1492,17 +1492,17 @@ public class EuropeanAIPlayer extends MissionAIPlayer {
*/
private boolean peaceHolds(Player p) {
final Player player = getPlayer();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
final double peaceProb = getSpecification()
.getInteger(GameOptions.PEACE_PROBABILITY) / 100.0;

int peaceTurn = -1;
for (HistoryEvent h : player.getHistory()) {
if (p.getId().equals(h.getPlayerId())
- && h.getTurn().getNumber() > peaceTurn) {
+ && h.getTurn() > peaceTurn) {
switch (h.getEventType()) {
case MAKE_PEACE: case FORM_ALLIANCE:
- peaceTurn = h.getTurn().getNumber();
+ peaceTurn = h.getTurn();
break;
case DECLARE_WAR:
peaceTurn = -1;
@@ -1514,7 +1514,7 @@ public class EuropeanAIPlayer extends MissionAIPlayer {
}
if (peaceTurn < 0) return false;

- int n = turn.getNumber() - peaceTurn;
+ int n = turn - peaceTurn;
float prob = (float)Math.pow(peaceProb, n);
// Apply Franklin's modifier
prob = p.applyModifiers(prob, turn, Modifier.PEACE_TREATY);
@@ -2237,7 +2237,7 @@ public class EuropeanAIPlayer extends MissionAIPlayer {
@Override
public void startWorking() {
final Player player = getPlayer();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
final Specification spec = getSpecification();
initializeFromSpecification(spec);

@@ -2257,13 +2257,13 @@ public class EuropeanAIPlayer extends MissionAIPlayer {
LogBuilder lb = new LogBuilder(1024);
int colonyCount = getAIColonies().size();
lb.add(player.getDebugName(),
- " in ", turn, "/", turn.getNumber(),
+ " in ", turn,
" units=", getAIUnits().size(),
" colonies=", colonyCount,
" declare=", (player.checkDeclareIndependence() == null),
" v-land-REF=", player.getRebelStrengthRatio(false),
" v-naval-REF=", player.getRebelStrengthRatio(true));
- if (turn.isFirstTurn()) initializeMissions(lb);
+ if (turn == Turn.FIRST_TURN) initializeMissions(lb);
determineStances(lb);

if (colonyCount > 0) {
@@ -2601,7 +2601,7 @@ public class EuropeanAIPlayer extends MissionAIPlayer {
|| goodsType.isBuildingMaterial()) {
// By age 3 we should be able to produce enough ourselves.
// FIXME: check whether we have an armory, at least
- int turn = getGame().getTurn().getNumber();
+ int turn = getGame().getTurn();
ret = turn < 300;
lb.add(((ret) ? "accepted" : "rejected"),
": special-goods-in-turn-", turn, ".");
diff --git a/src/net/sf/freecol/server/ai/NativeAIPlayer.java b/src/net/sf/freecol/server/ai/NativeAIPlayer.java
index 32192138cf1..4d2e91deaee 100644
--- a/src/net/sf/freecol/server/ai/NativeAIPlayer.java
+++ b/src/net/sf/freecol/server/ai/NativeAIPlayer.java
@@ -725,18 +725,18 @@ public class NativeAIPlayer extends MissionAIPlayer {
@Override
public void startWorking() {
final Player player = getPlayer();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
final int nSettlements = player.getSettlementCount();
final Random air = getAIRandom();

LogBuilder lb = new LogBuilder(1024);
- lb.add(player.getDebugName(), " in ", turn, "/", turn.getNumber());
+ lb.add(player.getDebugName(), " in ", turn);

clearAIUnits();

determineStances(lb);
List<AIUnit> more;
- if (turn.isFirstTurn()) {
+ if (turn == Turn.FIRST_TURN) {
initializeMissions(lb);
more = getAIUnits();
} else {
@@ -800,7 +800,7 @@ public class NativeAIPlayer extends MissionAIPlayer {
*/
public void updateTrade(NativeTrade nt, int anger) {
final Specification spec = getSpecification();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
final IndianSettlement is = nt.getIndianSettlement();
final Unit unit = nt.getUnit();
Set<Modifier> modifiers = new HashSet<>();
@@ -862,7 +862,7 @@ public class NativeAIPlayer extends MissionAIPlayer {
final IndianSettlement is = nt.getIndianSettlement();
final Unit unit = nt.getUnit();
final Player other = unit.getOwner();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
NativeTradeItem ours;
int anger, haggle;

diff --git a/src/net/sf/freecol/server/ai/goal/Goal.java b/src/net/sf/freecol/server/ai/goal/Goal.java
index 77117f7e230..685df866d5c 100644
--- a/src/net/sf/freecol/server/ai/goal/Goal.java
+++ b/src/net/sf/freecol/server/ai/goal/Goal.java
@@ -79,7 +79,7 @@ public abstract class Goal extends AIObject implements GoalConstants {
player = p;
parentGoal = g;
relativeWeight = w;
- getGame().getTurn().getNumber();
+ getGame().getTurn();
needsPlanning = true; //a newly created Goal always needs planning
isFinished = false; //only plan() should set this to true!
availableUnitsList = new ArrayList<>();
@@ -307,7 +307,7 @@ public abstract class Goal extends AIObject implements GoalConstants {
protected void requestWorker(GoodsType gt, int minProduction) {

//FIXME: Uncomment after AIPlayer.addWorkerWish() has been written.
- //int turnsWithoutUnit = getGame().getTurn().getNumber() - turnLastUnitAdded;
+ //int turnsWithoutUnit = getGame().getTurn() - turnLastUnitAdded;
//player.addWorkerWish(this, gt, minProduction, getAbsoluteWeight(), turnsWithoutUnit);
}

@@ -325,7 +325,6 @@ public abstract class Goal extends AIObject implements GoalConstants {
*/
public final void addUnit(AIUnit u) {
logger.finest("Entering method addUnit() for "+getDebugDescription()+" with unit: "+u.getId());
- getGame().getTurn().getNumber();
availableUnitsList.add(u);
u.setGoal(this);
needsPlanning = true; //adding a unit to the Goal means it might need planning
diff --git a/src/net/sf/freecol/server/control/InGameController.java b/src/net/sf/freecol/server/control/InGameController.java
index e59925b7ad3..16f41254801 100644
--- a/src/net/sf/freecol/server/control/InGameController.java
+++ b/src/net/sf/freecol/server/control/InGameController.java
@@ -551,7 +551,7 @@ public final class InGameController extends Controller {
serverPlayer.csChangeStance(Stance.PEACE, independent, true, cs);
independent.changePlayerType(PlayerType.INDEPENDENT);
Game game = getGame();
- Turn turn = game.getTurn();
+ int turn = game.getTurn();
independent.setTax(0);
independent.reinitialiseMarket();
HistoryEvent h = new HistoryEvent(turn,
@@ -1350,11 +1350,11 @@ public final class InGameController extends Controller {

// Do not add history event to cs as we are going to update the
// entire player. Likewise clear model messages.
- Turn turn = game.getTurn();
+ int turn = game.getTurn();
HistoryEvent h = new HistoryEvent(turn,
HistoryEvent.HistoryEventType.DECLARE_INDEPENDENCE, serverPlayer);
final int independenceTurn = spec.getInteger(GameOptions.INDEPENDENCE_TURN);
- h.setScore(Math.max(0, independenceTurn - turn.getNumber()));
+ h.setScore(Math.max(0, independenceTurn - turn));
cs.addGlobalHistory(game, h);
serverPlayer.clearModelMessages();
cs.addMessage(serverPlayer,
@@ -1659,7 +1659,7 @@ public final class InGameController extends Controller {

Player indianPlayer = is.getOwner();
int gold = 0;
- int year = getGame().getTurn().getNumber();
+ int year = getGame().getTurn();
RandomRange gifts = is.getType().getGifts(unit);
if (is.getLastTribute() + TURNS_PER_TRIBUTE < year
&& gifts != null) {
@@ -3598,7 +3598,7 @@ public final class InGameController extends Controller {

// Update the name and note the history.
cs.addPartial(See.only(serverPlayer), serverPlayer, "newLandName");
- Turn turn = serverPlayer.getGame().getTurn();
+ final int turn = serverPlayer.getGame().getTurn();
HistoryEvent h = new HistoryEvent(turn,
HistoryEvent.HistoryEventType.DISCOVER_NEW_WORLD, serverPlayer)
.addName("%name%", name);
diff --git a/src/net/sf/freecol/server/model/ServerGame.java b/src/net/sf/freecol/server/model/ServerGame.java
index 2995e0cbfd2..d5324c08d7f 100644
--- a/src/net/sf/freecol/server/model/ServerGame.java
+++ b/src/net/sf/freecol/server/model/ServerGame.java
@@ -319,7 +319,7 @@ public class ServerGame extends Game implements ServerModelObject {
lastTime = now;

Session.completeAll(cs);
- setTurn(getTurn().next());
+ setTurn(getTurn()+1);
logger.finest("Turn is now " + getTurn() + duration);
cs.add(See.all(), ChangePriority.CHANGE_NORMAL,
new NewTurnMessage(getTurn()));
diff --git a/src/net/sf/freecol/server/model/ServerIndianSettlement.java b/src/net/sf/freecol/server/model/ServerIndianSettlement.java
index 742f1c7a0a8..4d23dc1b530 100644
--- a/src/net/sf/freecol/server/model/ServerIndianSettlement.java
+++ b/src/net/sf/freecol/server/model/ServerIndianSettlement.java
@@ -153,7 +153,7 @@ public class ServerIndianSettlement extends IndianSettlement
if (missionary == null) return;
final ServerPlayer other = (ServerPlayer)missionary.getOwner();
final Tile tile = getTile();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();

// Check for braves converted by missionaries
float convert = getConvertProgress();
diff --git a/src/net/sf/freecol/server/model/ServerPlayer.java b/src/net/sf/freecol/server/model/ServerPlayer.java
index d25a3306787..8c69b8680d2 100644
--- a/src/net/sf/freecol/server/model/ServerPlayer.java
+++ b/src/net/sf/freecol/server/model/ServerPlayer.java
@@ -400,7 +400,7 @@ public class ServerPlayer extends Player implements ServerModelObject {

// Set initial immigration target
int i0 = spec.getInteger(GameOptions.INITIAL_IMMIGRATION);
- immigrationRequired = (int)applyModifiers((float)i0, null,
+ immigrationRequired = (int)applyModifiers((float)i0, Turn.UNDEFINED,
Modifier.RELIGIOUS_UNREST_BONUS);

// Add initial gold
@@ -525,7 +525,7 @@ public class ServerPlayer extends Player implements ServerModelObject {
// The player does not have any valid units or settlements on the map.

int mandatory = spec.getInteger(GameOptions.MANDATORY_COLONY_YEAR);
- if (getGame().getTurn().getYear() >= mandatory) {
+ if (Turn.getYear(getGame().getTurn()) >= mandatory) {
// After the season cutover year there must be a presence
// in the New World.
logger.info(getName() + " dead, no presence >= " + mandatory);
@@ -1699,7 +1699,7 @@ outer: for (Effect effect : effects) {
gt -> market.hasBeenTraded(gt))) {
boolean add = market.getAmountInMarket(type)
< type.getInitialAmount();
- int amount = game.getTurn().getNumber() / 10;
+ int amount = game.getTurn() / 10;
if (type == extraType) amount = 2 * amount + 1;
if (amount <= 0) continue;
amount = randomInt(logger, "Market adjust " + type, random, amount);
@@ -1890,7 +1890,7 @@ outer: for (Effect effect : effects) {
final Game game = getGame();
final Specification spec = game.getSpecification();
final ServerEurope europe = (ServerEurope)getEurope();
- final Turn turn = game.getTurn();
+ final int turn = game.getTurn();
boolean europeDirty = false, visibilityChange = false;

addFather(father);
@@ -3914,7 +3914,7 @@ outer: for (Effect effect : effects) {
*/
public Modifier makeTeaPartyModifier() {
final Specification spec = getGame().getSpecification();
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
Modifier modifier = first(spec.getModifiers(Modifier.COLONY_GOODS_PARTY));
if (modifier != null) {
modifier = Modifier.makeTimedModifier("model.goods.bells",
@@ -4114,7 +4114,7 @@ outer: for (Effect effect : effects) {

// Must be a first contact!
final Game game = getGame();
- Turn turn = game.getTurn();
+ int turn = game.getTurn();
if (isIndian()) {
if (other.isIndian()) {
return false; // Ignore native-to-native contacts.
diff --git a/src/net/sf/freecol/server/model/ServerRegion.java b/src/net/sf/freecol/server/model/ServerRegion.java
index a9e23b8a110..8669c4fba62 100644
--- a/src/net/sf/freecol/server/model/ServerRegion.java
+++ b/src/net/sf/freecol/server/model/ServerRegion.java
@@ -132,7 +132,7 @@ public class ServerRegion extends Region {
if (this.parent != null) this.parent.addChild(this);
this.claimable = false;
this.discoverable = false;
- this.discoveredIn = null;
+ this.discoveredIn = Turn.UNDEFINED;
this.discoveredBy = null;
this.scoreValue = 0;
}
@@ -219,7 +219,7 @@ public class ServerRegion extends Region {
* @param newName The name of the region.
* @param cs A {@code ChangeSet} to update.
*/
- public void csDiscover(Player player, Turn turn, String newName,
+ public void csDiscover(Player player, int turn, String newName,
ChangeSet cs) {
if (!getDiscoverable()) return;
final int score = (getSpecification().getBoolean(GameOptions.EXPLORATION_POINTS))
diff --git a/src/net/sf/freecol/server/model/ServerUnit.java b/src/net/sf/freecol/server/model/ServerUnit.java
index fbab6d901d4..1c6e4b86be3 100644
--- a/src/net/sf/freecol/server/model/ServerUnit.java
+++ b/src/net/sf/freecol/server/model/ServerUnit.java
@@ -228,7 +228,7 @@ public class ServerUnit extends Unit implements ServerModelObject {
AbstractGoods deliver = getWorkImprovement().getType()
.getProduction(tile.getType());
if (deliver != null) { // Deliver goods if any
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
int amount = deliver.getAmount();
amount = (int)this.applyModifiers(amount, turn,
Modifier.TILE_TYPE_CHANGE_PRODUCTION, deliver.getType());
diff --git a/test/src/net/sf/freecol/common/model/BuildingTest.java b/test/src/net/sf/freecol/common/model/BuildingTest.java
index e76063613d7..0bcad28ac85 100644
--- a/test/src/net/sf/freecol/common/model/BuildingTest.java
+++ b/test/src/net/sf/freecol/common/model/BuildingTest.java
@@ -684,7 +684,7 @@ public class BuildingTest extends FreeColTestCase {

public void testStockade() {
final Game game = getGame();
- final Turn turn = game.getTurn();
+ final int turn = game.getTurn();
game.setMap(getTestMap(true));
List<Modifier> modifiers;

@@ -830,7 +830,7 @@ public class BuildingTest extends FreeColTestCase {
public void testTownhallProduction() {
final Game game = getGame();
game.setMap(getTestMap(true));
- final Turn turn = game.getTurn();
+ final int turn = game.getTurn();

Colony colony = getStandardColony(6);
Player owner = colony.getOwner();
diff --git a/test/src/net/sf/freecol/common/model/ColonyTest.java b/test/src/net/sf/freecol/common/model/ColonyTest.java
index 7e7af885529..2b727b9bbb4 100644
--- a/test/src/net/sf/freecol/common/model/ColonyTest.java
+++ b/test/src/net/sf/freecol/common/model/ColonyTest.java
@@ -198,7 +198,7 @@ public class ColonyTest extends FreeColTestCase {
colony.addModifier(serverPlayer.makeTeaPartyModifier());
assertEquals(1, countParties(colony));
Modifier m = serverPlayer.makeTeaPartyModifier();
- m.setFirstTurn(new Turn(game.getTurn().getNumber() + 1));
+ m.setFirstTurn(game.getTurn() + 1);
colony.addModifier(m);
assertEquals(2, countParties(colony));
}
diff --git a/test/src/net/sf/freecol/common/model/GameTest.java b/test/src/net/sf/freecol/common/model/GameTest.java
index b2a74a30cc1..e679adb87f2 100644
--- a/test/src/net/sf/freecol/common/model/GameTest.java
+++ b/test/src/net/sf/freecol/common/model/GameTest.java
@@ -77,27 +77,27 @@ public class GameTest extends FreeColTestCase {
assertEquals(1492, Turn.getYear(1));
assertEquals(1, Turn.yearToTurn(1492));
assertEquals(-1, Turn.getSeason(1));
- assertEquals(0, spec().getAge(new Turn(1)));
+ assertEquals(0, spec().getAge(1));

assertEquals(1599, Turn.getYear(108));
assertEquals(108, Turn.yearToTurn(1599));
assertEquals(-1, Turn.getSeason(108));
- assertEquals(0, spec().getAge(new Turn(108)));
+ assertEquals(0, spec().getAge(108));

assertEquals(1600, Turn.getYear(109));
assertEquals(109, Turn.yearToTurn(1600, 0));
assertEquals(0, Turn.getSeason(109));
- assertEquals(1, spec().getAge(new Turn(109)));
+ assertEquals(1, spec().getAge(109));

assertEquals(1600, Turn.getYear(110));
assertEquals(110, Turn.yearToTurn(1600, 1));
assertEquals(1, Turn.getSeason(110));
- assertEquals(1, spec().getAge(new Turn(308)));
+ assertEquals(1, spec().getAge(308));

assertEquals(1700, Turn.getYear(309));
assertEquals(309, Turn.yearToTurn(1700, 0));
assertEquals(0, Turn.getSeason(309));
- assertEquals(2, spec().getAge(new Turn(309)));
+ assertEquals(2, spec().getAge(309));

assertEquals(1700, Turn.getYear(310));
assertEquals(310, Turn.yearToTurn(1700, 1));
diff --git a/test/src/net/sf/freecol/common/model/ModifierTest.java b/test/src/net/sf/freecol/common/model/ModifierTest.java
index 0911273a633..bfc6583e42c 100644
--- a/test/src/net/sf/freecol/common/model/ModifierTest.java
+++ b/test/src/net/sf/freecol/common/model/ModifierTest.java
@@ -189,31 +189,31 @@ public class ModifierTest extends FreeColTestCase {
Modifier modifier2 = new Modifier("test", 2,
ModifierType.ADDITIVE);

- modifier1.setFirstTurn(new Turn(10));
- modifier1.setLastTurn(new Turn(30));
- modifier2.setFirstTurn(new Turn(20));
- modifier2.setLastTurn(new Turn(40));
+ modifier1.setFirstTurn(10);
+ modifier1.setLastTurn(30);
+ modifier2.setFirstTurn(20);
+ modifier2.setLastTurn(40);

assertTrue(modifier1.hasTimeLimit());
assertTrue(modifier2.hasTimeLimit());

- assertFalse(modifier1.appliesTo(frigate, new Turn(5)));
- assertFalse(modifier1.appliesTo(frigate, new Turn(35)));
- assertFalse(modifier1.isOutOfDate(new Turn(25)));
- assertTrue(modifier1.appliesTo(frigate, new Turn(25)));
+ assertFalse(modifier1.appliesTo(frigate, 5));
+ assertFalse(modifier1.appliesTo(frigate, 35));
+ assertFalse(modifier1.isOutOfDate(25));
+ assertTrue(modifier1.appliesTo(frigate, 25));

- assertFalse(modifier2.appliesTo(frigate, new Turn(5)));
- assertFalse(modifier2.appliesTo(frigate, new Turn(5)));
- assertFalse(modifier2.isOutOfDate(new Turn(25)));
- assertTrue(modifier2.appliesTo(frigate, new Turn(25)));
+ assertFalse(modifier2.appliesTo(frigate, 5));
+ assertFalse(modifier2.appliesTo(frigate, 5));
+ assertFalse(modifier2.isOutOfDate(25));
+ assertTrue(modifier2.appliesTo(frigate, 25));

FeatureContainer featureContainer = new FeatureContainer();
featureContainer.addModifier(modifier1);
featureContainer.addModifier(modifier2);
- List<Modifier> modifiers = toList(featureContainer.getModifiers("test", frigate, new Turn(15)));
+ List<Modifier> modifiers = toList(featureContainer.getModifiers("test", frigate, 15));
assertEquals(1, modifiers.size());
assertEquals(modifier1, first(modifiers));
- modifiers = toList(featureContainer.getModifiers("test", frigate, new Turn(35)));
+ modifiers = toList(featureContainer.getModifiers("test", frigate, 35));
assertEquals(1, modifiers.size());
assertEquals(modifier2, first(modifiers));
}
@@ -225,28 +225,27 @@ public class ModifierTest extends FreeColTestCase {
ModifierType.ADDITIVE);

modifier1.setIncrement(ModifierType.ADDITIVE, 1,
- new Turn(10), new Turn(15));
- assertFalse(modifier1.appliesTo(frigate, new Turn(9)));
- assertTrue(modifier1.appliesTo(frigate, new Turn(10)));
+ 10, 15);
+ assertFalse(modifier1.appliesTo(frigate, 9));
+ assertTrue(modifier1.appliesTo(frigate, 10));
assertTrue(modifier1.hasIncrement());

FeatureContainer featureContainer = new FeatureContainer();
featureContainer.addModifier(modifier1);
featureContainer.addModifier(modifier2);
- Turn turn;

// only modifier2
- assertEquals(3f, featureContainer.applyModifiers(1, new Turn(9),
+ assertEquals(3f, featureContainer.applyModifiers(1, 9,
"test", frigate));
// both modifiers
- assertEquals(4f, featureContainer.applyModifiers(1, new Turn(10),
+ assertEquals(4f, featureContainer.applyModifiers(1, 10,
"test", frigate));
- assertEquals(5f, featureContainer.applyModifiers(1, new Turn(11),
+ assertEquals(5f, featureContainer.applyModifiers(1, 11,
"test", frigate));
- assertEquals(9f, featureContainer.applyModifiers(1, new Turn(15),
+ assertEquals(9f, featureContainer.applyModifiers(1, 15,
"test", frigate));
// only modifier2
- assertEquals(3f, featureContainer.applyModifiers(1, new Turn(16),
+ assertEquals(3f, featureContainer.applyModifiers(1, 16,
"test", frigate));
}

@@ -342,6 +341,6 @@ public class ModifierTest extends FreeColTestCase {
featureContainer.addModifier(modifier3);

assertEquals(Modifier.UNKNOWN,
- featureContainer.applyModifiers(1, new Turn(15), "test", null));
+ featureContainer.applyModifiers(1, 15, "test", null));
}
}
diff --git a/test/src/net/sf/freecol/common/model/MonarchTest.java b/test/src/net/sf/freecol/common/model/MonarchTest.java
index 510afb38561..521360adc61 100644
--- a/test/src/net/sf/freecol/common/model/MonarchTest.java
+++ b/test/src/net/sf/freecol/common/model/MonarchTest.java
@@ -60,7 +60,7 @@ public class MonarchTest extends FreeColTestCase {
assertTrue(choices.isEmpty());

Colony colony = getStandardColony();
- game.setTurn(new Turn(100));
+ game.setTurn(100);
dutch.setTax(Monarch.MINIMUM_TAX_RATE / 2);
choices = dutch.getMonarch().getActionChoices();
assertTrue(choicesContain(choices, MonarchAction.RAISE_TAX_WAR));
diff --git a/test/src/net/sf/freecol/common/model/TileTest.java b/test/src/net/sf/freecol/common/model/TileTest.java
index 606e0f72cd7..dfa042c0674 100644
--- a/test/src/net/sf/freecol/common/model/TileTest.java
+++ b/test/src/net/sf/freecol/common/model/TileTest.java
@@ -480,7 +480,7 @@ public class TileTest extends FreeColTestCase {

// Add a sugar resource, there should now be two sugar bonuses
// on tile1.
- final Turn turn = getGame().getTurn();
+ final int turn = getGame().getTurn();
assertTrue(tile1.canProduce(sugar, null));
int oldBase = tile1.getBaseProduction(null, sugar, null);
Resource addedSugar = new Resource(game, tile1, sugarResource);
diff --git a/test/src/net/sf/freecol/server/generator/MapGeneratorTest.java b/test/src/net/sf/freecol/server/generator/MapGeneratorTest.java
index aea6944b7c8..712a2a33d47 100644
--- a/test/src/net/sf/freecol/server/generator/MapGeneratorTest.java
+++ b/test/src/net/sf/freecol/server/generator/MapGeneratorTest.java
@@ -223,7 +223,7 @@ public class MapGeneratorTest extends FreeColTestCase {
Player player = new Player(game, FreeColObject.ID_ATTRIBUTE_TAG);
ServerUnit unit = new ServerUnit(game, null, player,
spec().getUnitType("model.unit.caravel"));
- pacific.discover(player, new Turn(1));
+ pacific.discover(player, 1);

assertFalse(pacific.getDiscoverable());
assertNull(pacific.getDiscoverableRegion());
diff --git a/test/src/net/sf/freecol/server/model/ServerPlayerTest.java b/test/src/net/sf/freecol/server/model/ServerPlayerTest.java
index 2a058ea9d37..6e259e5f9a5 100644
--- a/test/src/net/sf/freecol/server/model/ServerPlayerTest.java
+++ b/test/src/net/sf/freecol/server/model/ServerPlayerTest.java
@@ -119,7 +119,7 @@ public class ServerPlayerTest extends FreeColTestCase {

// Pretend time is passing.
// Have to advance time as yearly goods removal is initially low.
- game.setTurn(new Turn(200));
+ game.setTurn(200);
List<Integer> setValues = new ArrayList<>();
setValues.add(20);
MockPseudoRandom mockRandom = new MockPseudoRandom(setValues, true);
@@ -306,7 +306,7 @@ public class ServerPlayerTest extends FreeColTestCase {
ServerPlayer.IS_ALIVE,
dutch.checkForDeath());

- game.setTurn(new Turn(1600));
+ game.setTurn(1600);
assertEquals("Should be game over, no new world presence >= 1600",
ServerPlayer.IS_DEAD,
dutch.checkForDeath());
@@ -331,7 +331,7 @@ public class ServerPlayerTest extends FreeColTestCase {
assertEquals("Should not be game over, units between new world and europe", 0,
dutch.checkForDeath());

- game.setTurn(new Turn(1600));
+ game.setTurn(1600);
assertEquals("Should be game over, no new world presence >= 1600", -1,
dutch.checkForDeath());
}
@@ -355,7 +355,7 @@ public class ServerPlayerTest extends FreeColTestCase {
assertEquals("Should not be game over, units between new world and europe", 0,
dutch.checkForDeath());

- game.setTurn(new Turn(1600));
+ game.setTurn(1600);
assertEquals("Should be game over, no new world presence >= 1600", -1,
dutch.checkForDeath());
}
--
2.11.0.rc0.7.gbe5a750
Loading...