Differentiate static routines (findbugs).

This commit is contained in:
Mike Pope 2019-03-19 11:05:50 +10:30
parent bb1168c1e4
commit f315953ae3
45 changed files with 406 additions and 410 deletions

View File

@ -656,7 +656,7 @@ public class ClientOptions extends OptionGroup {
* @return The current colony {@code Comparator}.
*/
public Comparator<Colony> getColonyComparator() {
return getColonyComparator(getInteger(COLONY_COMPARATOR));
return getColonyComparatorInternal(getInteger(COLONY_COMPARATOR));
}
/**
@ -665,7 +665,7 @@ public class ClientOptions extends OptionGroup {
* @param The colony comparator option integer value.
* @return The corresponding colony {@code Comparator}.
*/
private static Comparator<Colony> getColonyComparator(int type) {
private static Comparator<Colony> getColonyComparatorInternal(int type) {
switch (type) {
case COLONY_COMPARATOR_AGE:
return colonyAgeComparator;

View File

@ -225,10 +225,34 @@ public final class ImageLibrary {
return this.scaleFactor;
}
public Dimension scaleDimension(Dimension size) {
/**
* Scale a dimension with the current internal scale.
*
* @param size The {@code Dimension} to scale.
* @return The scaled {@code Dimension}.
*/
public Dimension scale(Dimension size) {
return scaleDimension(size, this.scaleFactor);
}
/**
* Scale a dimension with the current internal scale and an extra override.
*
* @param size The {@code Dimension} to scale.
* @param extraFactor An extra scaling.
* @return The scaled {@code Dimension}.
*/
public Dimension scale(Dimension size, float extraFactor) {
return scaleDimension(size, this.scaleFactor * extraFactor);
}
/**
* Absolute dimenion scaling helper routine.
*
* @param size The {@code Dimension} to scale.
* @param scaleFactor The scale to use.
* @return The scaled {@code Dimension}.
*/
public static Dimension scaleDimension(Dimension size, float scaleFactor) {
return new Dimension(Math.round(size.width * scaleFactor),
Math.round(size.height * scaleFactor));
@ -255,11 +279,11 @@ public final class ImageLibrary {
case 0:
return null;
case 1:
return getScaledImage(keys.get(0), size, false);
return getSizedImageInternal(keys.get(0), size, false);
default:
keys.sort(Comparator.naturalOrder());
String key = keys.get(Math.abs(id.hashCode() % count));
return getScaledImage(key, size, false);
return getSizedImageInternal(key, size, false);
}
}
@ -513,6 +537,16 @@ public final class ImageLibrary {
// Fundamental image retrieval
/**
* Just get an image without any scaling.
*
* @param key The image key.
* @return The image found.
*/
public static BufferedImage getUnscaledImage(String key) {
return ResourceManager.getImage(key);
}
/**
* Get the image for the given identifier, scaling and grayscale choice.
*
@ -526,8 +560,8 @@ public final class ImageLibrary {
* @param grayscale If true, return the grayscale version of the image.
* @return The {@code BufferedImage} found by the {@code ResourceManager}.
*/
private static BufferedImage getScaledImage(String id, float scale,
boolean grayscale) {
private static BufferedImage getScaledImageInternal(String id, float scale,
boolean grayscale) {
return ResourceManager.getImage(id, scale, grayscale);
}
@ -539,8 +573,9 @@ public final class ImageLibrary {
* @param grayscale If true, return the grayscale version of the image.
* @return The {@code BufferedImage} found by the {@code ResourceManager}.
*/
public static BufferedImage getScaledImage(String id, Dimension size,
boolean grayscale) {
private static BufferedImage getSizedImageInternal(String id,
Dimension size,
boolean grayscale) {
return ResourceManager.getImage(id, size, grayscale);
}
@ -551,23 +586,19 @@ public final class ImageLibrary {
* @return The {@code BufferedImage} found by the {@code ResourceManager}.
*/
public BufferedImage getScaledImage(String key) {
return getScaledImage(key, this.scaleFactor, false);
return getScaledImageInternal(key, this.scaleFactor, false);
}
public BufferedImage getSmallImage(String key) {
return getScaledImage(key, this.scaleFactor * SMALL_SCALE, false);
return getScaledImageInternal(key, this.scaleFactor * SMALL_SCALE, false);
}
public BufferedImage getSmallerImage(String key) {
return getScaledImage(key, this.scaleFactor * SMALLER_SCALE, false);
return getScaledImageInternal(key, this.scaleFactor * SMALLER_SCALE, false);
}
public BufferedImage getTinyImage(String key) {
return getScaledImage(key, this.scaleFactor * TINY_SCALE, false);
}
public static BufferedImage getUnscaledImage(String key) {
return ResourceManager.getImage(key);
return getScaledImageInternal(key, this.scaleFactor * TINY_SCALE, false);
}
@ -637,7 +668,7 @@ public final class ImageLibrary {
public static BufferedImage getFoundingFatherImage(FoundingFather father,
boolean grayscale) {
final String key = "image.flavor." + father.getId();
return getScaledImage(key, NORMAL_SCALE, grayscale);
return getScaledImageInternal(key, NORMAL_SCALE, grayscale);
}
/**
@ -677,6 +708,14 @@ public final class ImageLibrary {
return getUnscaledImage(key);
}
public static BufferedImage getLCRImage(Dimension size) {
return getSizedImageInternal(LOST_CITY_RUMOUR, size, false);
}
public static BufferedImage getLibertyImage() {
return getSizedImageInternal(BELLS, ICON_SIZE, false);
}
public static BufferedImage getMeetingImage(Player meet) {
final String base = "image.flavor.event.meeting.";
String key = base + meet.getNationResourceKey();
@ -695,15 +734,14 @@ public final class ImageLibrary {
}
/**
* Get the appropriate BufferedImage for a FreeColObject. Please,
* use a more specific method!
* Get the appropriate BufferedImage for a FreeColObject.
*
* @param display The {@code FreeColObject} to display.
* @param size The image size.
* @return The appropriate {@code BufferedImage}.
*/
public static BufferedImage getObjectImage(FreeColObject display,
Dimension size) {
private static BufferedImage getObjectImageInternal(FreeColObject display,
Dimension size) {
final FreeColObject derived = display.getDisplayObject();
// Not all types have a meaningful image.
BufferedImage image = (derived instanceof BuildingType)
@ -711,7 +749,7 @@ public final class ImageLibrary {
: (derived instanceof GoodsType)
? getGoodsTypeImage((GoodsType)derived, size)
: (derived instanceof LostCityRumour)
? getScaledImage(LOST_CITY_RUMOUR, size, false)
? getLCRImage(size)
: (derived instanceof Nation)
? getNationImage((Nation)derived, size)
: (derived instanceof ResourceType)
@ -731,21 +769,33 @@ public final class ImageLibrary {
}
/**
* Get the appropriate BufferedImage for a FreeColObject. Please,
* use a more specific method!
* Get the appropriate BufferedImage for a FreeColObject.
*
* Please use a more specific method!
*
* @param display The {@code FreeColObject} to display.
* @param scale How much the image should be scaled.
* @return The appropriate {@code BufferedImage}.
*/
public BufferedImage getObjectImage(FreeColObject display, float scale) {
final float combinedScale = this.scaleFactor * scale;
final Dimension size = scaleDimension(ICON_SIZE, combinedScale);
return getObjectImage(display, size);
return getObjectImageInternal(display, scale(ICON_SIZE, scale));
}
/**
* Get the appropriate BufferedImage for a FreeColObject.
*
* Please use a more specific method!
*
* @param display The {@code FreeColObject} to display.
* @param size The image size.
* @return The appropriate {@code BufferedImage}.
*/
public BufferedImage getObjectImage(FreeColObject display, Dimension size) {
return getObjectImageInternal(display, size);
}
public static BufferedImage getReplacementImage(Dimension size) {
return getScaledImage(ResourceManager.REPLACEMENT_IMAGE, size, false);
return getSizedImageInternal(ResourceManager.REPLACEMENT_IMAGE, size, false);
}
@ -755,37 +805,6 @@ public final class ImageLibrary {
return "image.buildingicon." + buildingType.getId();
}
public static BufferedImage getBuildingTypeImage(BuildingType buildingType,
float scale) {
final String key = getBuildingTypeKey(buildingType);
return getScaledImage(key, scale, false);
}
public static BufferedImage getBuildingTypeImage(BuildingType buildingType,
Dimension size) {
final String key = getBuildingTypeKey(buildingType);
return getScaledImage(key, size, false);
}
private static BufferedImage getBuildingTypeImage(BuildingType buildingType,
Player player,
float scale) {
final String key = getBuildingTypeKey(buildingType);
final String extraKey = key + "." + player.getNationResourceKey();
final boolean hasExtra = ResourceManager.hasImageResource(extraKey);
return getScaledImage((hasExtra) ? extraKey : key, scale, false);
}
public BufferedImage getScaledBuildingImage(Building building) {
return getBuildingTypeImage(building.getType(), building.getOwner(),
this.scaleFactor);
}
public BufferedImage getSmallBuildingImage(Building building) {
return getBuildingTypeImage(building.getType(), building.getOwner(),
this.scaleFactor * SMALL_SCALE);
}
public static BufferedImage getBuildableTypeImage(BuildableType buildable,
Dimension size) {
return (buildable instanceof BuildingType)
@ -797,32 +816,62 @@ public final class ImageLibrary {
Player player) {
float scale = this.scaleFactor * SMALL_SCALE;
return (buildable instanceof BuildingType)
? getBuildingTypeImage((BuildingType)buildable, player, scale)
? getScaledBuildingTypeImage((BuildingType)buildable, player, scale)
: getUnitTypeImage((UnitType)buildable, scale);
}
public static BufferedImage getBuildingTypeImage(BuildingType buildingType,
Dimension size) {
final String key = getBuildingTypeKey(buildingType);
return getSizedImageInternal(key, size, false);
}
public BufferedImage getScaledBuildingTypeImage(BuildingType buildingType,
float scale) {
final String key = getBuildingTypeKey(buildingType);
return getScaledImageInternal(key, scale, false);
}
private BufferedImage getScaledBuildingTypeImage(BuildingType buildingType,
Player player,
float scale) {
final String key = getBuildingTypeKey(buildingType);
final String extraKey = key + "." + player.getNationResourceKey();
final boolean hasExtra = ResourceManager.hasImageResource(extraKey);
return getScaledImageInternal((hasExtra) ? extraKey : key, scale, false);
}
public BufferedImage getScaledBuildingImage(Building building) {
return getScaledBuildingTypeImage(building.getType(),
building.getOwner(),
this.scaleFactor);
}
public BufferedImage getSmallBuildingImage(Building building) {
return getScaledBuildingTypeImage(building.getType(),
building.getOwner(),
this.scaleFactor * SMALL_SCALE);
}
// Goods image handling
public static BufferedImage getGoodsTypeImage(GoodsType gt,
Dimension size) {
final String key = "image.icon." + gt.getId();
return getScaledImage(key, size, false);
return getSizedImageInternal(key, size, false);
}
public BufferedImage getScaledGoodsTypeImage(GoodsType gt) {
return getGoodsTypeImage(gt,
scaleDimension(ICON_SIZE, this.scaleFactor));
return getGoodsTypeImage(gt, scale(ICON_SIZE));
}
public BufferedImage getSmallGoodsTypeImage(GoodsType gt) {
return getGoodsTypeImage(gt,
scaleDimension(ICON_SIZE, this.scaleFactor * SMALL_SCALE));
return getGoodsTypeImage(gt, scale(ICON_SIZE, SMALL_SCALE));
}
public BufferedImage getSmallerGoodsTypeImage(GoodsType gt) {
return getGoodsTypeImage(gt,
scaleDimension(ICON_SIZE, this.scaleFactor * SMALLER_SCALE));
return getGoodsTypeImage(gt, scale(ICON_SIZE, SMALLER_SCALE));
}
@ -874,11 +923,11 @@ public final class ImageLibrary {
public static BufferedImage getNationImage(Nation nation, Dimension size) {
return getScaledImage(getNationKey(nation), size, false);
return getSizedImageInternal(getNationKey(nation), size, false);
}
public static BufferedImage getNationImage(Nation nation, float scale) {
return getScaledImage(getNationKey(nation), scale, false);
return getScaledImageInternal(getNationKey(nation), scale, false);
}
public BufferedImage getScaledNationImage(Nation nation) {
@ -954,7 +1003,7 @@ public final class ImageLibrary {
public BufferedImage getBeachCornerImage(int index, int x, int y) {
final String key = "image.tile.model.tile.beach.corner" + index
+ ".r" + ((isSpecialEven(x, y)) ? "0" : "1");
return getScaledImage(key, this.tileSize, false);
return getSizedImageInternal(key, this.tileSize, false);
}
/**
@ -968,7 +1017,7 @@ public final class ImageLibrary {
public BufferedImage getBeachEdgeImage(int index, int x, int y) {
final String key = "image.tile.model.tile.beach.edge" + index
+ ".r"+ ((isSpecialEven(x, y)) ? "0" : "1");
return getScaledImage(key, this.tileSize, false);
return getSizedImageInternal(key, this.tileSize, false);
}
/**
@ -986,33 +1035,21 @@ public final class ImageLibrary {
+ ((type==null) ? "model.tile.unexplored" : type.getId())
+ ".border." + direction
+ ".r" + ((isSpecialEven(x, y)) ? "0" : "1");
return getScaledImage(key, this.tileSize, false);
return getSizedImageInternal(key, this.tileSize, false);
}
/**
* Returns the forest image for a terrain type.
* Get the forest image for a terrain type.
*
* @param type The type of the terrain-image to return.
* @param riverStyle An optional river style to apply.
* @param size The image size.
* @return The image at the given index.
*/
public BufferedImage getForestImage(TileType type) {
return getForestImage(type, this.tileForestSize);
}
public static BufferedImage getForestImage(TileType type, Dimension size) {
final String key = "image.tileforest." + type.getId();
return getScaledImage(key, size, false);
}
public BufferedImage getForestImage(TileType type,
TileImprovementStyle riverStyle) {
return getForestImage(type, riverStyle, this.tileForestSize);
}
private static BufferedImage getForestImage(TileType type,
TileImprovementStyle riverStyle,
Dimension size) {
private static BufferedImage getForestImageInternal(TileType type,
TileImprovementStyle riverStyle,
Dimension size) {
String key;
if (riverStyle != null) {
String mask = riverStyle.getMask();
@ -1021,38 +1058,45 @@ public final class ImageLibrary {
+ (("0000".equals(mask)) ? "0100" : mask);
// Safety check providing fallback for incomplete mods
if (ResourceManager.hasImageResource(key)) {
return getScaledImage(key, size, false);
return getSizedImageInternal(key, size, false);
}
}
key = "image.tileforest." + type.getId();
return getScaledImage(key, size, false);
return getSizedImageInternal(key, size, false);
}
public static BufferedImage getForestImage(TileType type, Dimension size) {
return getForestImageInternal(type, null, size);
}
public BufferedImage getScaledForestImage(TileType type) {
return getForestImageInternal(type, null, this.tileForestSize);
}
public BufferedImage getScaledForestImage(TileType type,
TileImprovementStyle riverStyle) {
return getForestImageInternal(type, riverStyle, this.tileForestSize);
}
/**
* Returns the overlay image for the given tile.
*
* @param tile The tile for which to return an image.
* @return A pseudo-random terrain image.
*/
public BufferedImage getOverlayImage(Tile tile) {
return getOverlayImage(tile.getType(), tile.getId(),
this.tileOverlaySize);
}
/**
* Returns the overlay-image for the given type and scale.
* Get the overlay-image for the given type and scale.
* Currently used for hills and mountains.
*
* @param type The type of the terrain-image to return.
* @param id A string used to get a random image.
* @param size The size of the image to return.
* @param overlayCache An optional overlay cache to draw from.
* @return The terrain-image at the given index.
*/
public static BufferedImage getOverlayImage(TileType type, String id,
Dimension size) {
final String prefix = "image.tileoverlay." + type.getId();
List<String> keys = ResourceManager.getImageKeys(prefix);
private static BufferedImage getOverlayImageInternal(TileType type,
String id,
Dimension size,
Set<String> overlayCache) {
final String prefix = "image.tileoverlay." + type.getId() + ".r";
List<String> keys = (overlayCache == null)
? ResourceManager.getImageKeys(prefix)
: transform(overlayCache, k -> k.startsWith(prefix));
return getRandomizedImage(keys, id, size);
}
@ -1060,18 +1104,19 @@ public final class ImageLibrary {
return ResourceManager.getImageKeySet("image.tileoverlay.");
}
public BufferedImage getOverlayImage(Tile tile, Set<String> overlayCache) {
return getOverlayImage(tile.getType(), tile.getId(),
this.tileOverlaySize, overlayCache);
public static BufferedImage getOverlayImage(TileType type, Dimension size) {
return getOverlayImageInternal(type, type.getId(), size, null);
}
public static BufferedImage getOverlayImage(TileType type, String id,
Dimension size,
Set<String> overlayCache) {
final String prefix = "image.tileoverlay." + type.getId() + ".r";
final List<String> keys = transform(overlayCache,
k -> k.startsWith(prefix));
return getRandomizedImage(keys, id, size);
public BufferedImage getScaledOverlayImage(Tile tile) {
return getOverlayImageInternal(tile.getType(), tile.getId(),
this.tileOverlaySize, null);
}
public BufferedImage getScaledOverlayImage(Tile tile,
Set<String> overlayCache) {
return getOverlayImageInternal(tile.getType(), tile.getId(),
this.tileOverlaySize, overlayCache);
}
@ -1082,18 +1127,17 @@ public final class ImageLibrary {
public static BufferedImage getResourceTypeImage(ResourceType rt,
Dimension size,
boolean grayscale) {
return getScaledImage(getResourceTypeKey(rt), size, grayscale);
return getSizedImageInternal(getResourceTypeKey(rt), size, grayscale);
}
private static BufferedImage getResourceTypeImage(ResourceType rt,
float scale,
boolean grayscale) {
return getScaledImage(getResourceTypeKey(rt), scale, grayscale);
return getScaledImageInternal(getResourceTypeKey(rt), scale, grayscale);
}
public BufferedImage getScaledResourceTypeImage(ResourceType rt) {
return getResourceTypeImage(rt,
this.scaleFactor, false);
return getResourceTypeImage(rt, this.scaleFactor, false);
}
public BufferedImage getSmallResourceTypeImage(ResourceType rt) {
@ -1106,14 +1150,9 @@ public final class ImageLibrary {
this.scaleFactor, false);
}
/**
* Returns the river image with the given style.
*
* @param style a {@code TileImprovementStyle} value
* @return The image with the given style.
*/
public BufferedImage getRiverImage(TileImprovementStyle style) {
return getRiverImage(style.getString(), this.tileSize);
private static String getRiverStyleKey(String style) {
return RIVER_STYLE_PREFIX + style;
}
/**
@ -1123,15 +1162,15 @@ public final class ImageLibrary {
* @param size the image size
* @return The image with the given style.
*/
private static BufferedImage getRiverImageInternal(String style,
Dimension size) {
return getSizedImageInternal(getRiverStyleKey(style), size, false);
}
public static BufferedImage getRiverImage(String style, Dimension size) {
final String key = RIVER_STYLE_PREFIX + style;
return getScaledImage(key, size, false);
return getRiverImageInternal(style, size);
}
public BufferedImage getRiverImage(String style) {
return getRiverImage(style, this.scaleFactor);
}
/**
* Returns the river image with the given style and scale.
*
@ -1139,12 +1178,27 @@ public final class ImageLibrary {
* @param scale A scale factor.
* @return The image with the given style.
*/
private BufferedImage getRiverImage(String style, float scale) {
return getRiverImage(style, scaleDimension(this.tileSize, scale));
private BufferedImage getScaledRiverImage(String style, float scale) {
return getRiverImageInternal(style,
scaleDimension(this.tileSize, scale));
}
/**
* Returns the river image with the given style.
*
* @param style a {@code TileImprovementStyle} value
* @return The image with the given style.
*/
public BufferedImage getScaledRiverImage(TileImprovementStyle style) {
return getRiverImageInternal(style.getString(), this.tileSize);
}
public BufferedImage getScaledRiverImage(String style) {
return getScaledRiverImage(style, this.scaleFactor);
}
public BufferedImage getSmallerRiverImage(String style) {
return getRiverImage(style, this.scaleFactor * SMALLER_SCALE);
return getScaledRiverImage(style, this.scaleFactor * SMALLER_SCALE);
}
@ -1163,7 +1217,7 @@ public final class ImageLibrary {
int x, int y) {
final String key = "image.tile.model.tile.delta." + direction
+ ((magnitude == 1) ? ".small" : ".large");
return getScaledImage(key, this.tileSize, false);
return getSizedImageInternal(key, this.tileSize, false);
}
/**
@ -1182,20 +1236,6 @@ public final class ImageLibrary {
}
/**
* Get the tile improvement image with for a given identifier.
*
* @param id The tile improvement identifier.
* @return The image found, or null if it does not exist.
*/
public BufferedImage getTileImprovementImage(String id) {
final String key = "image.tile." + id;
return (!ResourceManager.hasImageResource(key)) ? null
// Has its own Overlay Image in Misc, use it
: getScaledImage(key, this.tileSize, false);
}
private static String getSettlementTypeKey(SettlementType settlementType) {
return "image.tileitem." + settlementType.getId();
}
@ -1203,13 +1243,13 @@ public final class ImageLibrary {
private static BufferedImage getSettlementTypeImage(SettlementType settlementType,
float scale) {
final String key = getSettlementTypeKey(settlementType);
return getScaledImage(key, scale, false);
return getScaledImageInternal(key, scale, false);
}
public static BufferedImage getSettlementTypeImage(SettlementType settlementType,
Dimension size) {
final String key = getSettlementTypeKey(settlementType);
return getScaledImage(key, size, false);
return getSizedImageInternal(key, size, false);
}
/**
@ -1258,12 +1298,12 @@ public final class ImageLibrary {
*/
public static BufferedImage getSettlementImage(Settlement settlement,
float scale) {
return getScaledImage(getSettlementKey(settlement), scale, false);
return getScaledImageInternal(getSettlementKey(settlement), scale, false);
}
public static BufferedImage getSettlementImage(Settlement settlement,
Dimension size) {
return getScaledImage(getSettlementKey(settlement), size, false);
return getSizedImageInternal(getSettlementKey(settlement), size, false);
}
/**
@ -1285,26 +1325,51 @@ public final class ImageLibrary {
}
public static String getTerrainImageKey(TileType type, int x, int y) {
return "image.tile."
+ ((type == null) ? "model.tile.unexplored" : type.getId())
+ ".center.r" + (isSpecialEven(x, y) ? "0" : "1");
}
/**
* Returns the terrain-image for the given type.
* Gets the terrain-image for the given type.
*
* @param type The type of the terrain-image to return.
* @param x The x-coordinate of the location of the tile that is being
* drawn.
* @param y The x-coordinate of the location of the tile that is being
* drawn.
* @param size The image size.
* @return The terrain-image at the given index.
*/
public BufferedImage getTerrainImage(TileType type, int x, int y) {
return getTerrainImage(type, x, y, this.tileSize);
private static BufferedImage getTerrainImageInternal(TileType type,
int x, int y,
Dimension size) {
return getSizedImageInternal(getTerrainImageKey(type, x, y),
size, false);
}
public static BufferedImage getTerrainImage(TileType type, int x, int y,
Dimension size) {
final String key = "image.tile."
+ ((type == null) ? "model.tile.unexplored" : type.getId())
+ ".center.r" + (isSpecialEven(x, y) ? "0" : "1");
return getScaledImage(key, size, false);
return getTerrainImageInternal(type, x, y, size);
}
public BufferedImage getScaledTerrainImage(TileType type, int x, int y) {
return getTerrainImageInternal(type, x, y, this.tileSize);
}
/**
* Get the tile improvement image with for a given identifier.
*
* @param id The tile improvement identifier.
* @return The image found, or null if it does not exist.
*/
public BufferedImage getTileImprovementImage(String id) {
final String key = "image.tile." + id;
return (!ResourceManager.hasImageResource(key)) ? null
// Has its own Overlay Image in Misc, use it
: getSizedImageInternal(key, this.tileSize, false);
}
@ -1353,7 +1418,7 @@ public final class ImageLibrary {
float scale) {
final String key = getUnitTypeImageKey(unitType, roleId,
nativeEthnicity);
return getScaledImage(key, scale, grayscale);
return getScaledImageInternal(key, scale, grayscale);
}
private static BufferedImage getUnitTypeImage(UnitType unitType,
@ -1368,7 +1433,7 @@ public final class ImageLibrary {
Dimension size) {
final String key = getUnitTypeImageKey(unitType, roleId,
nativeEthnicity);
return getScaledImage(key, size, false);
return getSizedImageInternal(key, size, false);
}
private static BufferedImage getUnitTypeImage(UnitType unitType,

View File

@ -1390,7 +1390,8 @@ public final class MapViewer extends FreeColClientHolder {
g.translate(xt - xt0, yt - yt0);
xt0 = xt; yt0 = yt;
BufferedImage overlayImage = lib.getOverlayImage(t, overlayCache);
BufferedImage overlayImage
= lib.getScaledOverlayImage(t, overlayCache);
RescaleOp rop = (player == null || player.canSee(t)) ? null : fow;
tv.displayTileItems(g, t, rop, overlayImage);
tv.displaySettlementWithChipsOrPopulationNumber(g, t, withNumbers,

View File

@ -204,8 +204,7 @@ public final class TileViewer extends FreeColClientHolder {
-1);
BufferedImage terrainImage = ImageLibrary.getTerrainImage(
type, 0, 0, size2);
BufferedImage overlayImage = ImageLibrary.getOverlayImage(
type, type.getId(), size2);
BufferedImage overlayImage = ImageLibrary.getOverlayImage(type, size2);
BufferedImage forestImage = type.isForested()
? ImageLibrary.getForestImage(type, size2)
: null;
@ -246,17 +245,16 @@ public final class TileViewer extends FreeColClientHolder {
*/
public BufferedImage createTileImageWithBeachBorderAndItems(Tile tile) {
if (!tile.isExplored())
return lib.getTerrainImage(null, tile.getX(), tile.getY());
return lib.getScaledTerrainImage(null, tile.getX(), tile.getY());
final TileType tileType = tile.getType();
Dimension terrainTileSize = lib.tileSize;
BufferedImage overlayImage = lib.getOverlayImage(tile);
final int compoundHeight = (overlayImage != null)
? overlayImage.getHeight()
: tileType.isForested()
? lib.tileForestSize.height
: terrainTileSize.height;
BufferedImage image = new BufferedImage(
terrainTileSize.width, compoundHeight, BufferedImage.TYPE_INT_ARGB);
BufferedImage overlayImage = lib.getScaledOverlayImage(tile);
final int compoundHeight
= (overlayImage != null) ? overlayImage.getHeight()
: (tileType.isForested()) ? lib.tileForestSize.height
: terrainTileSize.height;
BufferedImage image = new BufferedImage(terrainTileSize.width,
compoundHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
g.translate(0, compoundHeight - terrainTileSize.height);
displayTileWithBeachAndBorder(g, tile);
@ -277,7 +275,7 @@ public final class TileViewer extends FreeColClientHolder {
public BufferedImage createTileImage(Tile tile, Player player) {
final TileType tileType = tile.getType();
Dimension terrainTileSize = lib.tileSize;
BufferedImage overlayImage = lib.getOverlayImage(tile);
BufferedImage overlayImage = lib.getScaledOverlayImage(tile);
final int compoundHeight = (overlayImage != null)
? overlayImage.getHeight()
: (tileType.isForested()) ? lib.tileForestSize.height
@ -308,7 +306,7 @@ public final class TileViewer extends FreeColClientHolder {
public BufferedImage createColonyTileImage(Tile tile, Colony colony) {
final TileType tileType = tile.getType();
Dimension terrainTileSize = lib.tileSize;
BufferedImage overlayImage = lib.getOverlayImage(tile);
BufferedImage overlayImage = lib.getScaledOverlayImage(tile);
final int compoundHeight = (overlayImage != null)
? overlayImage.getHeight()
: tileType.isForested()
@ -343,8 +341,8 @@ public final class TileViewer extends FreeColClientHolder {
int xx = (((2 - x) + y) * tileSize.width) / 2;
int yy = ((x + y) * tileSize.height) / 2;
g.translate(xx, yy);
BufferedImage overlayImage = lib.getOverlayImage(
tiles[x][y], overlayCache);
BufferedImage overlayImage
= lib.getScaledOverlayImage(tiles[x][y], overlayCache);
displayColonyTile(g, tiles[x][y], colony, overlayImage);
g.translate(-xx, -yy);
}
@ -459,7 +457,7 @@ public final class TileViewer extends FreeColClientHolder {
final int y = tile.getY();
// ATTENTION: we assume that all base tiles have the same size
g.drawImage(lib.getTerrainImage(tileType, x, y), 0, 0, null);
g.drawImage(lib.getScaledTerrainImage(tileType, x, y), 0, 0, null);
if (!tile.isExplored()) return;
if (!tile.isLand() && tile.getStyle() > 0) {
@ -503,7 +501,7 @@ public final class TileViewer extends FreeColClientHolder {
} else if (!tile.isLand() || borderingTile.isLand()) {
int bTIndex = borderingTileType.getIndex();
if (bTIndex < tileType.getIndex()
&& !lib.getTerrainImage(tileType, 0, 0).equals(lib.getTerrainImage(borderingTileType, 0, 0))) {
&& !lib.getTerrainImageKey(tileType, 0, 0).equals(lib.getTerrainImageKey(borderingTileType, 0, 0))) {
// Draw land terrain with bordering land type, or
// ocean/high seas limit, if the tiles do not
// share same graphics (ocean & great river)
@ -734,8 +732,8 @@ public final class TileViewer extends FreeColClientHolder {
}
// Forest
if (tile.isForested()) {
BufferedImage forestImage = lib.getForestImage(
tile.getType(), tile.getRiverStyle());
BufferedImage forestImage = lib.getScaledForestImage(tile.getType(),
tile.getRiverStyle());
g1.drawImage(forestImage,
0, (tileHeight - forestImage.getHeight()), null);
}
@ -782,7 +780,7 @@ public final class TileViewer extends FreeColClientHolder {
rp.displayRoad(g, tile);
} else {
BufferedImage im = (ti.isRiver())
? lib.getRiverImage(ti.getStyle())
? lib.getScaledRiverImage(ti.getStyle())
: lib.getTileImprovementImage(ti.getType().getId());
if (im != null) g.drawImage(im, 0, 0, null);
}

View File

@ -186,7 +186,7 @@ public class Flag {
public static final double BEND_X = DECORATION_SIZE;
public static final double BEND_Y = DECORATION_SIZE / SQRT_3;
private static final GeneralPath star = getStar();
private static final GeneralPath star = get5Star();
/**
* The distribution of stars in the "union", based on historical
@ -1108,7 +1108,7 @@ public class Flag {
*
* @return the basic star shape
*/
private static GeneralPath getStar() {
private static GeneralPath get5Star() {
GeneralPath star = new GeneralPath(GeneralPath.WIND_NON_ZERO);
double angle = 2 * Math.PI / 5;
double radius = STAR_SIZE / 2;

View File

@ -223,7 +223,7 @@ public final class UnitLabel extends FreeColLabel
} else {
Icon imageIcon = new ImageIcon(lib.getScaledUnitImage(unit));
if (unit.getLocation() instanceof ColonyTile) {
Dimension tileSize = lib.scaleDimension(ImageLibrary.TILE_SIZE);
Dimension tileSize = lib.scale(ImageLibrary.TILE_SIZE);
tileSize.width /= 2;
tileSize.height = imageIcon.getIconHeight();
setSize(tileSize);

View File

@ -2009,7 +2009,7 @@ public final class ColonyPanel extends PortPanel
setOpaque(false);
// Size and position:
Dimension size = getGUI().getTileImageLibrary()
.scaleDimension(ImageLibrary.TILE_SIZE);
.scale(ImageLibrary.TILE_SIZE);
setSize(size);
setLocation(((2 - x) + y) * size.width / 2,
(x + y) * size.height / 2);

View File

@ -303,8 +303,7 @@ public final class MapEditorTransformPanel extends FreeColPanel {
Messages.message("mapEditorTransformPanel.resource"),
new ResourceTransform()));
listPanel.add(buildButton(ImageLibrary
.getScaledImage(ImageLibrary.LOST_CITY_RUMOUR, riverSize, false),
listPanel.add(buildButton(ImageLibrary.getLCRImage(riverSize),
Messages.getName(ModelMessage.MessageType.LOST_CITY_RUMOUR),
new LostCityRumourTransform()));

View File

@ -367,7 +367,7 @@ public final class MiniMap extends JPanel implements MouseInputListener {
if (getParent() != null) {
int miniRectX = (getGUI().getFocus().getX() - firstColumn) * tileSize;
int miniRectY = (getGUI().getFocus().getY() - firstRow) * tileSize / 4;
Dimension mapTileSize = library.scaleDimension(ImageLibrary.TILE_SIZE);
Dimension mapTileSize = library.scale(ImageLibrary.TILE_SIZE);
int miniRectWidth = (getParent().getWidth() / mapTileSize.width + 1) * tileSize;
int miniRectHeight = (getParent().getHeight() / mapTileSize.height + 1) * tileSize / 2;
if (miniRectX + miniRectWidth / 2 > width) {

View File

@ -150,7 +150,7 @@ public final class TilePanel extends FreeColPanel {
int expertPotential = amount;
final UnitType expert = spec.getExpertForProducing(gt);
if (expert != null) {
expertPotential = (int)expert.applyModifiers(amount,
expertPotential = (int)expert.apply(amount,
getGame().getTurn(), gt.getId());
}
if (amount > 0) {

View File

@ -125,14 +125,14 @@ public abstract class ColopediaGameObjectTypePanel<T extends FreeColSpecObjectTy
*/
protected void addSubTrees(DefaultMutableTreeNode root, String id,
List<T> types) {
final ImageLibrary lib = getImageLibrary();
String name = getName();
ColopediaTreeItem cti = new ColopediaTreeItem(this, id, name, null);
DefaultMutableTreeNode node = new DefaultMutableTreeNode(cti);
int width = ImageLibrary.ICON_SIZE.width;
int height = ImageLibrary.ICON_SIZE.height;
for (FreeColSpecObjectType type : types) {
Image image = ImageLibrary
.getObjectImage(type, ImageLibrary.ICON_SIZE);
Image image = lib.getObjectImage(type, ImageLibrary.ICON_SIZE);
int x = (width - image.getWidth(null)) / 2;
int y = (height - image.getHeight(null)) / 2;
BufferedImage centeredImage

View File

@ -86,10 +86,9 @@ public class FatherDetailPanel
for (FoundingFather foundingFather : spec.getFoundingFathers()) {
fathersByType.get(foundingFather.getType()).add(foundingFather);
}
ImageIcon icon = new ImageIcon(ImageLibrary
.getScaledImage(ImageLibrary.BELLS, ImageLibrary.ICON_SIZE, false));
ImageIcon icon = new ImageIcon(ImageLibrary.getLibertyImage());
for (FoundingFatherType fatherType : FoundingFatherType.values()) {
String id = FoundingFather.getTypeKey(fatherType);
String id = fatherType.getTypeKey();
String typeName = Messages.message(id);
DefaultMutableTreeNode node
= new DefaultMutableTreeNode(new ColopediaTreeItem(this, id,

View File

@ -82,8 +82,7 @@ public class NationTypeDetailPanel
nations.addAll(getSpecification().getEuropeanNationTypes());
nations.addAll(getSpecification().getREFNationTypes());
nations.addAll(getSpecification().getIndianNationTypes());
ImageIcon icon = new ImageIcon(ImageLibrary
.getScaledImage(ImageLibrary.BELLS, ImageLibrary.ICON_SIZE, false));
ImageIcon icon = new ImageIcon(ImageLibrary.getLibertyImage());
for (NationType type : nations) {
parent.add(buildItem(type, icon));
}

View File

@ -103,7 +103,7 @@ public final class ReportContinentalCongressPanel extends ReportPanel {
JScrollPane imageScrollPane = new JScrollPane(panel,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
tabs.addTab(Messages.message(FoundingFather.getTypeKey(type)), null,
tabs.addTab(Messages.message(type.getTypeKey()), null,
imageScrollPane, null);
}
final int age = getGame().getAge();

View File

@ -1178,7 +1178,7 @@ public class DebugUtils {
int amount = sis.getGoodsCount(gt);
int prod = sis.getTotalProductionOf(gt);
if (amount > 0 || prod != 0) {
lb.add(Messages.message(AbstractGoods.getLabel(gt, amount)),
lb.add(Messages.message(new AbstractGoods(gt, amount).getLabel()),
" ", ((prod > 0) ? "+" : ""), prod, "\n");
}
}

View File

@ -924,7 +924,7 @@ public class FreeColXMLReader extends StreamReaderDelegate
public <T extends FreeColObject> T readFreeColObject(Game game)
throws XMLStreamException {
final String tag = getLocalName();
Class<T> returnClass = FreeColObject.getFreeColObjectClass(tag);
Class<T> returnClass = FreeColObject.getFreeColObjectClassByName(tag);
if (returnClass == null) {
throw new XMLStreamException("No class: " + tag);
}

View File

@ -141,15 +141,6 @@ public class AbstractGoods extends FreeColObject implements Named {
return getAmount() > 0;
}
/**
* Get a label for these goods.
*
* @return The label for these goods.
*/
public StringTemplate getLabel() {
return getLabel(getType(), getAmount());
}
/**
* Are these goods storable.
*
@ -159,6 +150,17 @@ public class AbstractGoods extends FreeColObject implements Named {
return getType().isStorable();
}
/**
* Get a label for these goods.
*
* @return The label for these goods.
*/
public StringTemplate getLabel() {
return StringTemplate.template("model.abstractGoods.label")
.addNamed("%goods%", getType())
.addAmount("%amount%", getAmount());
}
/**
* Get a label for these goods.
*
@ -172,27 +174,16 @@ public class AbstractGoods extends FreeColObject implements Named {
.addAmount("%amount%", getAmount());
}
/**
* Get a label given a goods type and amount.
*
* @param type The {@code GoodsType} to display.
* @param amount The amount of goods.
* @return The goods label.
*/
public static StringTemplate getLabel(GoodsType type, int amount) {
return StringTemplate.template("model.abstractGoods.label")
.addNamed("%goods%", type)
.addAmount("%amount%", amount);
}
/**
* Get a label given a key and amount.
*
* Used for arbitrary objects, such as the missionary's bible.
*
* @param key A key for the goods to display.
* @param amount The amount of goods.
* @return The goods label.
*/
public static StringTemplate getLabel(String key, int amount) {
public static StringTemplate getAbstractLabel(String key, int amount) {
return StringTemplate.template("model.abstractGoods.label")
.add("%goods%", key)
.addAmount("%amount%", amount);

View File

@ -144,20 +144,9 @@ public class AbstractUnit extends FreeColObject {
* @return A {@code StringTemplate} describing the abstract unit.
*/
public StringTemplate getLabel() {
return getLabel(getId(), getRoleId(), getNumber());
return getLabelInternal(getId(), getRoleId(), getNumber());
}
/**
* Gets a template describing an arbitrary single abstract unit.
*
* @param typeId The unit type identifier.
* @param roleId The role identifier.
* @return A {@code StringTemplate} describing the abstract unit.
*/
public static StringTemplate getLabel(String typeId, String roleId) {
return getLabel(typeId, roleId, 1);
}
/**
* Gets a template describing an arbitrary abstract unit.
*
@ -166,8 +155,9 @@ public class AbstractUnit extends FreeColObject {
* @param number The number of units.
* @return A {@code StringTemplate} describing the abstract unit.
*/
public static StringTemplate getLabel(String typeId, String roleId,
int number) {
private static StringTemplate getLabelInternal(String typeId,
String roleId,
int number) {
StringTemplate tmpl = Messages.getUnitLabel(null, typeId, number,
null, roleId, null);
return StringTemplate.template("model.abstractUnit.label")

View File

@ -270,9 +270,9 @@ public class Building extends WorkLocation
if (available >= capacity) {
minimumRatio = maximumRatio = 0.0;
} else {
int divisor = (int)getType().applyModifiers(0f, turn,
int divisor = (int)getType().apply(0f, turn,
Modifier.BREEDING_DIVISOR);
int factor = (int)getType().applyModifiers(0f, turn,
int factor = (int)getType().apply(0f, turn,
Modifier.BREEDING_FACTOR);
int production = (available < goodsType.getBreedingNumber()
|| divisor <= 0) ? 0
@ -291,7 +291,7 @@ public class Building extends WorkLocation
// Unattended production always applies for buildings!
production += getBaseProduction(null, goodsType, null);
production = applyModifiers(production, turn,
getProductionModifiers(goodsType, null));
getProductionModifiers(goodsType, null));
production = (int)Math.floor(production);
// Beware! If we ever unify this code with ColonyTile,
// ColonyTiles have outputs with zero amount.

View File

@ -351,8 +351,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(),
unitType);
amount = (int)apply(amount, null, goodsType.getId(), unitType);
return (amount < 0) ? 0 : amount;
}

View File

@ -932,7 +932,7 @@ public class Colony extends Settlement implements TradeLocation {
* @return True if the building is available at zero cost.
*/
public boolean isAutomaticBuild(BuildingType buildingType) {
float value = owner.applyModifiers(100f, getGame().getTurn(),
float value = owner.apply(100f, getGame().getTurn(),
Modifier.BUILDING_PRICE_BONUS, buildingType);
return value == 0f && canBuild(buildingType);
}
@ -1281,7 +1281,7 @@ public class Colony extends Settlement implements TradeLocation {
float membership = (liberty * 100.0f) / (LIBERTY_PER_REBEL * uc);
membership = applyModifiers(membership, getGame().getTurn(),
getOwner().getModifiers(Modifier.SOL));
getOwner().getModifiers(Modifier.SOL));
if (membership < 0.0f) {
membership = 0.0f;
} else if (membership > 100.0f) {
@ -1411,7 +1411,7 @@ public class Colony extends Settlement implements TradeLocation {
* @return True if the population can be reduced.
*/
public boolean canReducePopulation() {
return getUnitCount() > applyModifiers(0f, getGame().getTurn(),
return getUnitCount() > apply(0f, getGame().getTurn(),
Modifier.MINIMUM_COLONY_SIZE);
}
@ -2621,8 +2621,7 @@ public class Colony extends Settlement implements TradeLocation {
*/
@Override
public int getGoodsCapacity() {
return (int)applyModifiers(0f, getGame().getTurn(),
Modifier.WAREHOUSE_STORAGE);
return (int)apply(0f, getGame().getTurn(), Modifier.WAREHOUSE_STORAGE);
}
/**

View File

@ -123,7 +123,7 @@ public final class FeatureContainer {
* @param abilities A stream of {@code Ability}s to check.
* @return True if the abilities are `satisfied'.
*/
public static boolean hasAbility(Stream<Ability> abilities) {
public static boolean allAbilities(Stream<Ability> abilities) {
boolean ret = false;
for (Ability ability : iterable(abilities)) {
if (!ability.getValue()) return false;
@ -144,7 +144,7 @@ public final class FeatureContainer {
*/
public boolean hasAbility(String id, FreeColSpecObjectType fcgot,
Turn turn) {
return FeatureContainer.hasAbility(getAbilities(id, fcgot, turn));
return FeatureContainer.allAbilities(getAbilities(id, fcgot, turn));
}
/**
@ -264,22 +264,6 @@ public final class FeatureContainer {
return (mset.isEmpty()) ? Stream.<Modifier>empty() : mset.stream();
}
/**
* Applies this objects modifiers with the given identifier to the
* given number.
*
* @param number The number to modify.
* @param turn An optional applicable {@code Turn}.
* @param id The object identifier.
* @param fcgot An optional {@code FreeColSpecObjectType} the
* modifier applies to.
* @return The modified number.
*/
public final float applyModifiers(float number, Turn turn,
String id, FreeColSpecObjectType fcgot) {
return applyModifiers(number, turn, getModifiers(id, fcgot, turn));
}
/**
* Applies a collection of modifiers to the given float value.
*
@ -291,7 +275,7 @@ public final class FeatureContainer {
public static float applyModifiers(float number, Turn turn,
Collection<Modifier> mods) {
return (mods == null || mods.isEmpty()) ? number
: applyModifiers_internal(number, turn,
: applyModifiersInternal(number, turn,
sort(mods, Modifier.ascendingModifierIndexComparator));
}
@ -306,7 +290,7 @@ public final class FeatureContainer {
public static float applyModifiers(float number, Turn turn,
Stream<Modifier> mods) {
return (mods == null) ? number
: applyModifiers_internal(number, turn,
: applyModifiersInternal(number, turn,
sort(mods, Modifier.ascendingModifierIndexComparator));
}
@ -318,8 +302,8 @@ public final class FeatureContainer {
* @param mods The {@code Modifier}s to apply.
* @return The modified number.
*/
private static float applyModifiers_internal(float number, Turn turn,
Collection<Modifier> mods) {
private static float applyModifiersInternal(float number, Turn turn,
Collection<Modifier> mods) {
float result = number;
for (Modifier m : mods) {
float value = m.getValue(turn);

View File

@ -57,6 +57,15 @@ public class FoundingFather extends FreeColSpecObjectType {
public String getKey() {
return getEnumKey(this);
}
/**
* Get a message key for the type of a FoundingFather.
*
* @return The message key.
*/
public String getTypeKey() {
return "model.foundingFather." + downCase(this.toString());
}
}
/** The type of this FoundingFather. */
@ -112,17 +121,7 @@ public class FoundingFather extends FreeColSpecObjectType {
* @return A type key.
*/
public String getTypeKey() {
return getTypeKey(type);
}
/**
* Get a message key for the type of a FoundingFather.
*
* @param type The {@code FoundingFatherType} to make a key for.
* @return The message key.
*/
public static String getTypeKey(FoundingFatherType type) {
return "model.foundingFather." + type.getKey();
return type.getTypeKey();
}
/**

View File

@ -95,7 +95,7 @@ public abstract class FreeColObject
* @return The class, or null if none found.
*/
@SuppressWarnings("unchecked")
public static <T extends FreeColObject> Class<T> getFreeColObjectClass(String name) {
public static <T extends FreeColObject> Class<T> getFreeColObjectClassByName(String name) {
final String type = "net.sf.freecol.common.model."
+ capitalize(name);
final Class<T> c = (Class<T>)Introspector.getClassByName(type);
@ -177,7 +177,7 @@ public abstract class FreeColObject
* @param id The identifier to examine.
* @return The type part of the identifier, or null on error.
*/
public static String getIdType(String id) {
public static String getIdTypeByName(String id) {
if (id != null) {
int col = id.lastIndexOf(':');
return (col >= 0) ? id.substring(0, col) : id;
@ -191,7 +191,7 @@ public abstract class FreeColObject
* @return The type part of the identifier, or null on error.
*/
public String getIdType() {
return getIdType(getId());
return getIdTypeByName(getId());
}
/**
@ -432,7 +432,7 @@ public abstract class FreeColObject
*/
public final boolean hasAbility(String id, FreeColSpecObjectType fcgot,
Turn turn) {
return FeatureContainer.hasAbility(getAbilities(id, fcgot, turn));
return FeatureContainer.allAbilities(getAbilities(id, fcgot, turn));
}
/**
@ -654,8 +654,8 @@ public abstract class FreeColObject
* @param id The object identifier.
* @return The modified number.
*/
public final float applyModifiers(float number, Turn turn, String id) {
return applyModifiers(number, turn, id, null);
public final float apply(float number, Turn turn, String id) {
return apply(number, turn, id, null);
}
/**
@ -669,24 +669,11 @@ public abstract class FreeColObject
* modifier applies to.
* @return The modified number.
*/
public final float applyModifiers(float number, Turn turn,
String id, FreeColSpecObjectType fcgot) {
public final float apply(float number, Turn turn, String id,
FreeColSpecObjectType fcgot) {
return applyModifiers(number, turn, getModifiers(id, fcgot, turn));
}
/**
* Applies a collection of modifiers to the given number.
*
* @param number The number to modify.
* @param turn An optional applicable {@code Turn}.
* @param mods The {@code Modifier}s to apply.
* @return The modified number.
*/
public static final float applyModifiers(float number, Turn turn,
Collection<Modifier> mods) {
return FeatureContainer.applyModifiers(number, turn, mods);
}
/**
* Applies a stream of modifiers to the given number.
*
@ -700,6 +687,19 @@ public abstract class FreeColObject
return FeatureContainer.applyModifiers(number, turn, mods);
}
/**
* Applies a collection of modifiers to the given number.
*
* @param number The number to modify.
* @param turn An optional applicable {@code Turn}.
* @param mods The {@code Modifier}s to apply.
* @return The modified number.
*/
public static final float applyModifiers(float number, Turn turn,
Collection<Modifier> mods) {
return FeatureContainer.applyModifiers(number, turn, mods);
}
/**
* Add the given modifier to this object.
*

View File

@ -291,7 +291,8 @@ public class Game extends FreeColGameObject {
* @return The new uninitialized object, or null on error.
*/
public static <T extends FreeColObject> T newInstance(Game game,
Class<T> returnClass, boolean server) {
Class<T> returnClass,
boolean server) {
// Do not restrict trying the full (Game,String) constructor
// to just server objects as there are simpler FCOs that
// implement it (e.g. Goods).
@ -330,30 +331,6 @@ public class Game extends FreeColGameObject {
return null;
}
/**
* Instantiate an uninitialized FreeColGameObject within this game.
*
* @param <T> The actual return type.
* @param returnClass The required {@code FreeColObject} class.
* @param server Create a server object if possible.
* @return The new uninitialized object, or null on error.
*/
public <T extends FreeColObject> T newInstance(Class<T> returnClass,
boolean server) {
return newInstance(this, returnClass, server);
}
/**
* Instantiate an uninitialized FreeColGameObject within a game.
*
* @param <T> The actual return type.
* @param returnClass The required {@code FreeColObject} class.
* @return The new uninitialized object, or null on error.
*/
public <T extends FreeColObject> T newInstance(Class<T> returnClass) {
return newInstance(this, returnClass, false); // Default to non-server
}
/**
* Get the difficulty level of this game.
*
@ -1500,7 +1477,7 @@ public class Game extends FreeColGameObject {
* @return The location class.
*/
public static Class<? extends FreeColGameObject> getLocationClass(String id) {
return locationClasses.get(capitalize(FreeColObject.getIdType(id)));
return locationClasses.get(capitalize(FreeColObject.getIdTypeByName(id)));
}
/**
@ -1514,11 +1491,12 @@ public class Game extends FreeColGameObject {
* the stream.
*/
public <T extends FreeColObject> T unserialize(String xml,
Class<T> returnClass) throws XMLStreamException {
Class<T> returnClass)
throws XMLStreamException {
try {
FreeColXMLReader xr = new FreeColXMLReader(new StringReader(xml));
xr.nextTag();
T ret = newInstance(returnClass);
T ret = newInstance(this, returnClass, false);
ret.readFromXML(xr);
return ret;

View File

@ -1038,8 +1038,8 @@ public class IndianSettlement extends Settlement implements TradeLocation {
amount -= retain;
if (unit != null) {
amount = Math.round(applyModifiers((float)amount,
getGame().getTurn(),
unit.getModifiers(Modifier.TRADE_VOLUME_PENALTY)));
getGame().getTurn(),
unit.getModifiers(Modifier.TRADE_VOLUME_PENALTY)));
}
if (amount < TRADE_MINIMUM_SIZE) continue;
if (amount > GoodsContainer.CARGO_SIZE) {

View File

@ -214,7 +214,7 @@ public class LostCityRumour extends TileItem {
percentGood = 100;
} else {
// Otherwise apply any unit exploration bonus
float mod = unit.applyModifiers(1.0f, getGame().getTurn(),
float mod = unit.apply(1.0f, getGame().getTurn(),
Modifier.EXPLORE_LOST_CITY_RUMOUR);
percentBad = Math.round(percentBad / mod);
percentGood = Math.round(percentGood * mod);

View File

@ -1257,8 +1257,8 @@ public class Player extends FreeColGameObject implements Nameable {
// has already been reduced. We want to apply the bonus to the
// sum of the *unreduced* immigration target and the increment.
int unreduced = Math.round(current
/ applyModifiers(1f, turn, Modifier.RELIGIOUS_UNREST_BONUS));
immigrationRequired = (int)applyModifiers(unreduced + base, turn,
/ apply(1f, turn, Modifier.RELIGIOUS_UNREST_BONUS));
immigrationRequired = (int)apply(unreduced + base, turn,
Modifier.RELIGIOUS_UNREST_BONUS);;
logger.finest("Immigration for " + getId() + " updated " + current
+ " -> " + immigrationRequired);
@ -1371,8 +1371,7 @@ public class Player extends FreeColGameObject implements Nameable {
final List<GoodsType> goodsTypes = spec.getLibertyGoodsTypeList();
int nextTurn = sum(getColonies(), c ->
sum(goodsTypes, gt -> c.getTotalProductionOf(gt)));
return (int)applyModifiers((float)nextTurn, getGame().getTurn(),
Modifier.LIBERTY);
return (int)apply((float)nextTurn, getGame().getTurn(), Modifier.LIBERTY);
}
/**
@ -3245,8 +3244,7 @@ public class Player extends FreeColGameObject implements Nameable {
gt -> gt != spec.getPrimaryFoodType(),
gt -> tile.getPotentialProduction(gt, null))
+ 100;
return (int)applyModifiers(price, getGame().getTurn(),
Modifier.LAND_PAYMENT_MODIFIER);
return (int)apply(price, getGame().getTurn(), Modifier.LAND_PAYMENT_MODIFIER);
}
/**

View File

@ -275,7 +275,7 @@ public class Role extends BuildableType {
* @return The offense value.
*/
public double getOffence() {
return applyModifiers(0.0f, null, Modifier.OFFENCE);
return apply(0.0f, null, Modifier.OFFENCE);
}
/**
@ -293,7 +293,7 @@ public class Role extends BuildableType {
* @return The defence value.
*/
private double getDefence() {
return applyModifiers(0.0f, null, Modifier.DEFENCE);
return apply(0.0f, null, Modifier.DEFENCE);
}
/**

View File

@ -234,7 +234,7 @@ public abstract class Settlement extends GoodsLocation
* @return The line of sight value.
*/
public int getLineOfSight() {
return (int)applyModifiers((float)getType().getVisibleRadius(),
return (int)apply((float)getType().getVisibleRadius(),
getGame().getTurn(), Modifier.LINE_OF_SIGHT_BONUS);
}

View File

@ -1434,8 +1434,7 @@ public final class Tile extends UnitLocation implements Named, Ownable {
* @return The percentage defence bonus.
*/
public int getDefenceBonusPercentage() {
return (int)getType().applyModifiers(100f, getGame().getTurn(),
Modifier.DEFENCE)
return (int)getType().apply(100f, getGame().getTurn(), Modifier.DEFENCE)
- 100;
}
@ -1719,7 +1718,7 @@ public final class Tile extends UnitLocation implements Named, Ownable {
int amount = getBaseProduction(null, goodsType, unitType);
amount = (int)applyModifiers(amount, getGame().getTurn(),
getProductionModifiers(goodsType, unitType));
getProductionModifiers(goodsType, unitType));
return (amount < 0) ? 0 : amount;
}

View File

@ -393,8 +393,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,
goodsType.getId());
float chg = apply(production, null, goodsType.getId());
value = (int)(chg - production);
}
} else { // tile type change

View File

@ -422,8 +422,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(),
unitType);
amount = (int)apply(amount, null, goodsType.getId(), unitType);
return (amount < 0) ? 0 : amount;
}

View File

@ -448,7 +448,7 @@ public class Unit extends GoodsLocation
if (Messages.containsKey(equipmentKey)) {
// Currently only used for missionary which does not
// have equipment that directly corresponds to goods.
extra = AbstractGoods.getLabel(equipmentKey, 1);
extra = AbstractGoods.getAbstractLabel(equipmentKey, 1);
} else {
// Other roles can be characterized by their goods.
List<AbstractGoods> requiredGoods
@ -2525,8 +2525,7 @@ public class Unit extends GoodsLocation
@Override
public int getInitialMovesLeft() {
Turn turn = getGame().getTurn();
return (int)applyModifiers(this.type.getMovement(), turn,
Modifier.MOVEMENT_BONUS, this.type);
return (int)apply(this.type.getMovement(), turn, Modifier.MOVEMENT_BONUS, this.type);
}
/**
@ -2553,9 +2552,8 @@ public class Unit extends GoodsLocation
*/
public int getSailTurns() {
float base = getSpecification().getInteger(GameOptions.TURNS_TO_SAIL);
return (int)getOwner().applyModifiers(base, getGame().getTurn(),
Modifier.SAIL_HIGH_SEAS,
this.type);
return (int)getOwner().apply(base, getGame().getTurn(),
Modifier.SAIL_HIGH_SEAS, this.type);
}
/**
@ -3637,8 +3635,8 @@ public class Unit extends GoodsLocation
public float getConvertProbability() {
final Specification spec = getSpecification();
int opt = spec.getInteger(GameOptions.NATIVE_CONVERT_PROBABILITY);
return 0.01f * applyModifiers(opt, getGame().getTurn(),
Modifier.NATIVE_CONVERT_BONUS);
return 0.01f * apply(opt, getGame().getTurn(),
Modifier.NATIVE_CONVERT_BONUS);
}
/**
@ -3707,7 +3705,7 @@ public class Unit extends GoodsLocation
float fee = (getSpecification()
.getInteger(GameOptions.TREASURE_TRANSPORT_FEE)
* getTreasureAmount()) / 100.0f;
return (int)getOwner().applyModifiers(fee, getGame().getTurn(),
return (int)getOwner().apply(fee, getGame().getTurn(),
Modifier.TREASURE_TRANSPORT_FEE, this.type);
}
return 0;

View File

@ -190,7 +190,7 @@ public final class UnitType extends BuildableType implements Consumer {
* @return The offence value.
*/
public double getOffence() {
return applyModifiers(this.baseOffence, null, Modifier.OFFENCE);
return apply(this.baseOffence, null, Modifier.OFFENCE);
}
/**
@ -217,7 +217,7 @@ public final class UnitType extends BuildableType implements Consumer {
* @return The defence value.
*/
public double getDefence() {
return applyModifiers(this.baseDefence, null, Modifier.DEFENCE);
return apply(this.baseDefence, null, Modifier.DEFENCE);
}
/**

View File

@ -568,10 +568,9 @@ public abstract class WorkLocation extends UnitLocation
final UnitType unitType = unit.getType();
final Turn turn = getGame().getTurn();
return Math.max(0,
(int)applyModifiers(getBaseProduction(getProductionType(),
goodsType, unitType),
turn,
getProductionModifiers(goodsType, unitType)));
(int)applyModifiers(getBaseProduction(getProductionType(), goodsType, unitType),
turn,
getProductionModifiers(goodsType, unitType)));
}
/**
@ -634,7 +633,7 @@ public abstract class WorkLocation extends UnitLocation
int amount = getBaseProduction(null, goodsType, unitType);
amount = (int)applyModifiers(amount, getGame().getTurn(),
getProductionModifiers(goodsType, unitType));
getProductionModifiers(goodsType, unitType));
return (amount < 0) ? 0 : amount;
}

View File

@ -104,7 +104,7 @@ public class ClaimLandMessage extends AttributeMessage {
}
Class<? extends FreeColObject> c = FreeColObject
.getFreeColObjectClass(FreeColObject.getIdType(claimantId));
.getFreeColObjectClassByName(FreeColObject.getIdTypeByName(claimantId));
Unit unit = null;
Settlement settlement = null;
if (Unit.class.isAssignableFrom(c)) {

View File

@ -1527,7 +1527,7 @@ public class EuropeanAIPlayer extends MissionAIPlayer {
int n = turn.getNumber() - peaceTurn;
float prob = (float)Math.pow(peaceProb, n);
// Apply Franklin's modifier
prob = p.applyModifiers(prob, turn, Modifier.PEACE_TREATY);
prob = p.apply(prob, turn, Modifier.PEACE_TREATY);
return prob > 0.0f
&& (randomInt(logger, "Peace holds?", getAIRandom(), 100)
< (int)(100.0f * prob));

View File

@ -157,11 +157,11 @@ public class ServerIndianSettlement extends IndianSettlement
// Check for braves converted by missionaries
float convert = getConvertProgress();
float cMiss = missionary.applyModifiers(missionary.getType().getSkill(),
turn, Modifier.CONVERSION_SKILL);
float cMiss = missionary.apply(missionary.getType().getSkill(),
turn, Modifier.CONVERSION_SKILL);
// The convert rate increases by a percentage of the current alarm.
int alarm = Math.min(getAlarm(other).getValue(), Tension.TENSION_MAX);
float cAlarm = missionary.applyModifiers(alarm, turn,
float cAlarm = missionary.apply(alarm, turn,
Modifier.CONVERSION_ALARM_RATE);
convert += cMiss + (cAlarm - alarm);
logger.finest("Conversion at " + getName() + " alarm=" + alarm

View File

@ -364,7 +364,7 @@ public class ServerPlayer extends Player implements TurnTaker {
// Set initial immigration target
int i0 = spec.getInteger(GameOptions.INITIAL_IMMIGRATION);
immigrationRequired = (int)applyModifiers((float)i0, null,
immigrationRequired = (int)apply((float)i0, null,
Modifier.RELIGIOUS_UNREST_BONUS);
// Add initial gold
@ -1211,8 +1211,8 @@ public class ServerPlayer extends Player implements TurnTaker {
if (container != null) container.addGoods(type, a);
market.modifyIncomeBeforeTaxes(type, -price);
market.modifyIncomeAfterTaxes(type, -price);
int ma = (int)applyModifiers((float)a, getGame().getTurn(),
Modifier.TRADE_BONUS, type);
int ma = (int)apply((float)a, getGame().getTurn(),
Modifier.TRADE_BONUS, type);
market.addGoodsToMarket(type, -ma);
marketAmount += ma;
propagateToEuropeanMarkets(type, -a, random);
@ -1249,8 +1249,8 @@ public class ServerPlayer extends Player implements TurnTaker {
if (container != null) container.addGoods(type, -a);
market.modifyIncomeBeforeTaxes(type, incomeBeforeTaxes);
market.modifyIncomeAfterTaxes(type, incomeAfterTaxes);
int ma = (int)applyModifiers((float)a, getGame().getTurn(),
Modifier.TRADE_BONUS, type);
int ma = (int)apply((float)a, getGame().getTurn(),
Modifier.TRADE_BONUS, type);
market.addGoodsToMarket(type, ma);
marketAmount += ma;
propagateToEuropeanMarkets(type, a, random);
@ -1836,7 +1836,7 @@ outer: for (Effect effect : effects) {
// Apply modifiers, and commit the total change.
forEachMapEntry(extra, e -> e.getValue() != 0, e -> {
final Player player = e.getKey();
int change = (int)player.applyModifiers((float)e.getValue(),
int change = (int)player.apply((float)e.getValue(),
game.getTurn(), Modifier.NATIVE_ALARM_MODIFIER);
((ServerIndianSettlement)is)
.csModifyAlarm(player, change, true, cs);//+til
@ -2022,8 +2022,8 @@ outer: for (Effect effect : effects) {
}
// Revealed tiles in 11x11 block in Col1
final int fullRadius = (int)father
.applyModifiers((float)colony.getLineOfSight(),
turn, Modifier.EXPOSED_TILES_RADIUS);
.apply((float)colony.getLineOfSight(),
turn, Modifier.EXPOSED_TILES_RADIUS);
tiles.addAll(exploreTiles(t.getSurroundingTiles(1,
fullRadius)));
cs.add(See.only(this), tiles);

View File

@ -229,11 +229,11 @@ public class ServerUnit extends Unit implements TurnTaker {
if (deliver != null) { // Deliver goods if any
final Turn turn = getGame().getTurn();
int amount = deliver.getAmount();
amount = (int)this.applyModifiers(amount, turn,
amount = (int)this.apply(amount, turn,
Modifier.TILE_TYPE_CHANGE_PRODUCTION, deliver.getType());
Settlement settlement = tile.getOwningSettlement();
if (settlement != null && owner.owns(settlement)) {
amount = (int)settlement.applyModifiers(amount, turn,
amount = (int)settlement.apply(amount, turn,
Modifier.TILE_TYPE_CHANGE_PRODUCTION, deliver.getType());
settlement.addGoods(deliver.getType(), amount);
}

View File

@ -170,8 +170,8 @@ public class MessagesTest extends FreeColTestCase {
StringTemplate s2 = StringTemplate.key("model.tile.plains.name");
assertEquals("Plains", Messages.message(s2));
StringTemplate t1 = AbstractGoods
.getLabel(game.getSpecification().getPrimaryFoodType(), 100);
StringTemplate t1 = new AbstractGoods(spec().getPrimaryFoodType(),
100).getLabel();
assertEquals(2, t1.entryList().size());
List<SimpleEntry<String,StringTemplate>> e = t1.entryList();
assertEquals(StringTemplate.TemplateType.KEY,

View File

@ -700,24 +700,21 @@ public class BuildingTest extends FreeColTestCase {
modifier = first(modifiers);
assertEquals(100f, modifier.getValue());
assertEquals(ModifierType.PERCENTAGE, modifier.getType());
assertEquals(0f, stockadeType.applyModifiers(0f, turn,
Modifier.MINIMUM_COLONY_SIZE));
assertEquals(0f, stockadeType.apply(0f, turn, Modifier.MINIMUM_COLONY_SIZE));
modifiers = toList(fortType.getModifiers(Modifier.DEFENCE));
assertEquals(1, modifiers.size());
modifier = first(modifiers);
assertEquals(150f, modifier.getValue());
assertEquals(ModifierType.PERCENTAGE, modifier.getType());
assertEquals(0f, stockadeType.applyModifiers(0f, turn,
Modifier.MINIMUM_COLONY_SIZE));
assertEquals(0f, stockadeType.apply(0f, turn, Modifier.MINIMUM_COLONY_SIZE));
modifiers = toList(fortressType.getModifiers(Modifier.DEFENCE));
assertEquals(1, modifiers.size());
modifier = first(modifiers);
assertEquals(200f, modifier.getValue());
assertEquals(ModifierType.PERCENTAGE, modifier.getType());
assertEquals(0f, stockadeType.applyModifiers(0f, turn,
Modifier.MINIMUM_COLONY_SIZE));
assertEquals(0f, stockadeType.apply(0f, turn, Modifier.MINIMUM_COLONY_SIZE));
}
public void testCottonClothProduction() {

View File

@ -81,7 +81,7 @@ public class FoundingFatherTest extends FreeColTestCase {
dutch.addFather(father3);
assertTrue(any(dutch.getModifiers("some.new.modifier")));
assertEquals(6f, dutch.applyModifiers(2, null, "some.new.modifier"));
assertEquals(6f, dutch.apply(2, null, "some.new.modifier"));
FoundingFather father4 = new FoundingFather("father4", spec());
father4.setType(FoundingFatherType.TRADE);

View File

@ -236,18 +236,23 @@ public class ModifierTest extends FreeColTestCase {
Turn turn;
// only modifier2
assertEquals(3f, featureContainer.applyModifiers(1, new Turn(9),
"test", frigate));
turn = new Turn(9);
assertEquals(3f, FeatureContainer.applyModifiers(1, turn,
featureContainer.getModifiers("test", frigate, turn)));
// both modifiers
assertEquals(4f, featureContainer.applyModifiers(1, new Turn(10),
"test", frigate));
assertEquals(5f, featureContainer.applyModifiers(1, new Turn(11),
"test", frigate));
assertEquals(9f, featureContainer.applyModifiers(1, new Turn(15),
"test", frigate));
turn = new Turn(10);
assertEquals(4f, FeatureContainer.applyModifiers(1, turn,
featureContainer.getModifiers("test", frigate, turn)));
turn = new Turn(11);
assertEquals(5f, FeatureContainer.applyModifiers(1, new Turn(11),
featureContainer.getModifiers("test", frigate, turn)));
turn = new Turn(15);
assertEquals(9f, FeatureContainer.applyModifiers(1, turn,
featureContainer.getModifiers("test", frigate, turn)));
// only modifier2
assertEquals(3f, featureContainer.applyModifiers(1, new Turn(16),
"test", frigate));
turn = new Turn(16);
assertEquals(3f, FeatureContainer.applyModifiers(1, turn,
featureContainer.getModifiers("test", frigate, turn)));
}
public void testHashEquals() {
@ -340,7 +345,8 @@ public class ModifierTest extends FreeColTestCase {
featureContainer.addModifier(modifier2);
featureContainer.addModifier(modifier3);
assertEquals(Modifier.UNKNOWN,
featureContainer.applyModifiers(1, new Turn(15), "test", null));
Turn turn = new Turn(15);
assertEquals(Modifier.UNKNOWN, FeatureContainer.applyModifiers(1, turn,
featureContainer.getModifiers("test", null, turn)));
}
}