package tools.map.making;
import java.awt.Color;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import games.strategy.engine.data.properties.PropertiesUI;
import games.strategy.triplea.Constants;
import games.strategy.triplea.image.UnitImageFactory;
import games.strategy.triplea.ui.mapdata.MapData;
import games.strategy.util.Tuple;
/**
* An object to hold all the map.properties values.
*/
public class MapProperties {
public Map<String, Color> colorMap = new TreeMap<>();
public String unitsScale = "0.75";
public int unitsWidth = UnitImageFactory.DEFAULT_UNIT_ICON_SIZE;
public int unitsHeight = UnitImageFactory.DEFAULT_UNIT_ICON_SIZE;
public int unitsCounterOffsetWidth = UnitImageFactory.DEFAULT_UNIT_ICON_SIZE / 4;
public int unitsCounterOffsetHeight = UnitImageFactory.DEFAULT_UNIT_ICON_SIZE;
public int unitsStackSize = 0;
public int mapWidth = 256;
public int mapHeight = 256;
public boolean mapScrollWrapX = true;
public boolean mapScrollWrapY = false;
public boolean mapHasRelief = true;
public int mapCursorHotspotX = 0;
public int mapCursorHotspotY = 0;
public boolean mapShowCapitolMarkers = true;
public boolean mapUseTerritoryEffectMarkers = false;
public boolean mapShowTerritoryNames = true;
public boolean mapShowResources = true;
public boolean mapShowComments = true;
public boolean mapShowSeaZoneNames = false;
public boolean mapDrawNamesFromTopLeft = false;
public boolean mapUseNationConvoyFlags = false;
public String dontDrawTerritoryNames = "";
public boolean mapMapBlends = false;
// options are: NORMAL, OVERLAY, LINEAR_LIGHT, DIFFERENCE, MULTIPLY
public String mapMapBlendMode = "OVERLAY";
public String mapMapBlendAlpha = "0.3";
public boolean screenshotTitleEnabled = true;
public int screenshotTitleX = 50;
public int screenshotTitleY = 50;
public Color screenshotTitleColor = Color.black;
public int screenshotTitleFontSize = 20;
public MapProperties() {
super();
// fill the color map
colorMap.put(Constants.PLAYER_NAME_AMERICANS, new Color(0x666600));
colorMap.put(Constants.PLAYER_NAME_AUSTRALIANS, new Color(0xCCCC00));
colorMap.put(Constants.PLAYER_NAME_BRITISH, new Color(0x916400));
colorMap.put(Constants.PLAYER_NAME_CANADIANS, new Color(0xDBBE7F));
colorMap.put(Constants.PLAYER_NAME_CHINESE, new Color(0x663E66));
colorMap.put(Constants.PLAYER_NAME_FRENCH, new Color(0x113A77));
colorMap.put(Constants.PLAYER_NAME_GERMANS, new Color(0x777777));
colorMap.put(Constants.PLAYER_NAME_ITALIANS, new Color(0x0B7282));
colorMap.put(Constants.PLAYER_NAME_JAPANESE, new Color(0xFFD400));
colorMap.put(Constants.PLAYER_NAME_PUPPET_STATES, new Color(0x1B5DA0));
colorMap.put(Constants.PLAYER_NAME_RUSSIANS, new Color(0xB23B00));
colorMap.put(Constants.PLAYER_NAME_NEUTRAL, new Color(0xE2A071));
colorMap.put(Constants.PLAYER_NAME_IMPASSABLE, new Color(0xD8BA7C));
}
public Tuple<PropertiesUI, List<MapPropertyWrapper<?>>> propertyWrapperUI(final boolean editable) {
return MapPropertyWrapper.createPropertiesUI(this, editable);
}
public void writePropertiesToObject(final List<MapPropertyWrapper<?>> properties) {
MapPropertyWrapper.writePropertiesToObject(this, properties);
}
public Map<String, Color> getColorMap() {
return colorMap;
}
public void setColorMap(final Map<String, Color> value) {
colorMap = value;
}
public String outColorMap() {
final StringBuilder buf = new StringBuilder();
for (final Entry<String, Color> entry : colorMap.entrySet()) {
buf.append(MapData.PROPERTY_COLOR_PREFIX).append(entry.getKey()).append("=").append(colorToHex(entry.getValue()))
.append("\r\n");
}
return buf.toString();
}
private static String colorToHex(final Color color) {
String hexString = Integer.toHexString(color.getRGB() & 0x00FFFFFF);
while (hexString.length() < 6) {
hexString = "0" + hexString;
}
return hexString;
}
public String getUnitsScale() {
return unitsScale;
}
public void setUnitsScale(final String value) {
final double dvalue = Math.max(0.0, Math.min(2.0, Double.parseDouble(value)));
if (Math.abs(1.25 - dvalue) < 0.01) {
unitsScale = "1.25";
} else if (Math.abs(1.0 - dvalue) < 0.01) {
unitsScale = "1.0";
} else if (Math.abs(0.875 - dvalue) < 0.01) {
unitsScale = "0.875";
} else if (Math.abs(0.8333 - dvalue) < 0.01) {
unitsScale = "0.8333";
} else if (Math.abs(0.75 - dvalue) < 0.01) {
unitsScale = "0.75";
} else if (Math.abs(0.6666 - dvalue) < 0.01) {
unitsScale = "0.6666";
} else if (Math.abs(0.5625 - dvalue) < 0.01) {
unitsScale = "0.5625";
} else if (Math.abs(0.5 - dvalue) < 0.01) {
unitsScale = "0.5";
} else {
unitsScale = "" + dvalue;
}
}
public String outUnitsScale() {
return MapData.PROPERTY_UNITS_SCALE + "=" + unitsScale + "\r\n";
}
public int getUnitsWidth() {
return unitsWidth;
}
public void setUnitsWidth(final int value) {
unitsWidth = value;
}
public String outUnitsWidth() {
return MapData.PROPERTY_UNITS_WIDTH + "=" + unitsWidth + "\r\n";
}
public int getUnitsHeight() {
return unitsHeight;
}
public void setUnitsHeight(final int value) {
unitsHeight = value;
}
public String outUnitsHeight() {
return MapData.PROPERTY_UNITS_HEIGHT + "=" + unitsHeight + "\r\n";
}
public int getUnitsCounterOffsetWidth() {
return unitsCounterOffsetWidth;
}
public void setUnitsCounterOffsetWidth(final int value) {
unitsCounterOffsetWidth = value;
}
public String outUnitsCounterOffsetWidth() {
return MapData.PROPERTY_UNITS_COUNTER_OFFSET_WIDTH + "=" + unitsCounterOffsetWidth + "\r\n";
}
public int getUnitsCounterOffsetHeight() {
return unitsCounterOffsetHeight;
}
public void setUnitsCounterOffsetHeight(final int value) {
unitsCounterOffsetHeight = value;
}
public String outUnitsCounterOffsetHeight() {
return MapData.PROPERTY_UNITS_COUNTER_OFFSET_HEIGHT + "=" + unitsCounterOffsetHeight + "\r\n";
}
public int getUnitsStackSize() {
return unitsStackSize;
}
public void setUnitsStackSize(final int value) {
unitsStackSize = value;
}
public String outUnitsStackSize() {
return MapData.PROPERTY_UNITS_STACK_SIZE + "=" + unitsStackSize + "\r\n";
}
public int getMapWidth() {
return mapWidth;
}
public void setMapWidth(final int value) {
mapWidth = value;
}
public String outMapWidth() {
return MapData.PROPERTY_MAP_WIDTH + "=" + mapWidth + "\r\n";
}
public int getMapHeight() {
return mapHeight;
}
public void setMapHeight(final int value) {
mapHeight = value;
}
public String outMapHeight() {
return MapData.PROPERTY_MAP_HEIGHT + "=" + mapHeight + "\r\n";
}
public boolean getMapScrollWrapX() {
return mapScrollWrapX;
}
public void setMapScrollWrapX(final boolean value) {
mapScrollWrapX = value;
}
public String outMapScrollWrapX() {
return MapData.PROPERTY_MAP_SCROLLWRAPX + "=" + mapScrollWrapX + "\r\n";
}
public boolean getMapScrollWrapY() {
return mapScrollWrapY;
}
public void setMapScrollWrapY(final boolean value) {
mapScrollWrapY = value;
}
public String outMapScrollWrapY() {
return MapData.PROPERTY_MAP_SCROLLWRAPY + "=" + mapScrollWrapY + "\r\n";
}
public boolean getMapHasRelief() {
return mapHasRelief;
}
public void setMapHasRelief(final boolean value) {
mapHasRelief = value;
}
public String outMapHasRelief() {
return MapData.PROPERTY_MAP_HASRELIEF + "=" + mapHasRelief + "\r\n";
}
public int getMapCursorHotspotX() {
return mapCursorHotspotX;
}
public void setMapCursorHotspotX(final int value) {
mapCursorHotspotX = value;
}
public String outMapCursorHotspotX() {
return MapData.PROPERTY_MAP_CURSOR_HOTSPOT_X + "=" + mapCursorHotspotX + "\r\n";
}
public int getMapCursorHotspotY() {
return mapCursorHotspotY;
}
public void setMapCursorHotspotY(final int value) {
mapCursorHotspotY = value;
}
public String outMapCursorHotspotY() {
return MapData.PROPERTY_MAP_CURSOR_HOTSPOT_Y + "=" + mapCursorHotspotY + "\r\n";
}
public boolean getMapShowCapitolMarkers() {
return mapShowCapitolMarkers;
}
public void setMapShowCapitolMarkers(final boolean value) {
mapShowCapitolMarkers = value;
}
public String outMapShowCapitolMarkers() {
return MapData.PROPERTY_MAP_SHOWCAPITOLMARKERS + "=" + mapShowCapitolMarkers + "\r\n";
}
public boolean getMapUseTerritoryEffectMarkers() {
return mapUseTerritoryEffectMarkers;
}
public void setMapUseTerritoryEffectMarkers(final boolean value) {
mapUseTerritoryEffectMarkers = value;
}
public String outMapUseTerritoryEffectMarkers() {
return MapData.PROPERTY_MAP_USETERRITORYEFFECTMARKERS + "=" + mapUseTerritoryEffectMarkers + "\r\n";
}
public boolean getMapShowTerritoryNames() {
return mapShowTerritoryNames;
}
public void setMapShowTerritoryNames(final boolean value) {
mapShowTerritoryNames = value;
}
public String outMapShowTerritoryNames() {
return MapData.PROPERTY_MAP_SHOWTERRITORYNAMES + "=" + mapShowTerritoryNames + "\r\n";
}
public boolean getMapShowResources() {
return mapShowResources;
}
public void setMapShowResources(final boolean value) {
mapShowResources = value;
}
public String outMapShowResources() {
return MapData.PROPERTY_MAP_SHOWRESOURCES + "=" + mapShowResources + "\r\n";
}
public boolean getMapShowComments() {
return mapShowComments;
}
public void setMapShowComments(final boolean value) {
mapShowComments = value;
}
public String outMapShowComments() {
return MapData.PROPERTY_MAP_SHOWCOMMENTS + "=" + mapShowComments + "\r\n";
}
public boolean getMapShowSeaZoneNames() {
return mapShowSeaZoneNames;
}
public void setMapShowSeaZoneNames(final boolean value) {
mapShowSeaZoneNames = value;
}
public String outMapShowSeaZoneNames() {
return MapData.PROPERTY_MAP_SHOWSEAZONENAMES + "=" + mapShowSeaZoneNames + "\r\n";
}
public boolean getMapDrawNamesFromTopLeft() {
return mapDrawNamesFromTopLeft;
}
public void setMapDrawNamesFromTopLeft(final boolean value) {
mapDrawNamesFromTopLeft = value;
}
public String outMapDrawNamesFromTopLeft() {
return MapData.PROPERTY_MAP_DRAWNAMESFROMTOPLEFT + "=" + mapDrawNamesFromTopLeft + "\r\n";
}
public boolean getMapUseNationConvoyFlags() {
return mapUseNationConvoyFlags;
}
public void setMapUseNationConvoyFlags(final boolean value) {
mapUseNationConvoyFlags = value;
}
public String outMapUseNationConvoyFlags() {
return MapData.PROPERTY_MAP_USENATION_CONVOYFLAGS + "=" + mapUseNationConvoyFlags + "\r\n";
}
public String getDontDrawTerritoryNames() {
return dontDrawTerritoryNames;
}
public void setDontDrawTerritoryNames(final String value) {
dontDrawTerritoryNames = value;
}
public String outDontDrawTerritoryNames() {
return MapData.PROPERTY_DONT_DRAW_TERRITORY_NAMES + "=" + dontDrawTerritoryNames + "\r\n";
}
public boolean getMapMapBlends() {
return mapMapBlends;
}
public void setMapMapBlends(final boolean value) {
mapMapBlends = value;
}
public String outMapMapBlends() {
return MapData.PROPERTY_MAP_MAPBLENDS + "=" + mapMapBlends + "\r\n";
}
public String getMapMapBlendMode() {
return mapMapBlendMode;
}
public void setMapMapBlendMode(final String value) {
mapMapBlendMode = value;
}
public String outMapMapBlendMode() {
return MapData.PROPERTY_MAP_MAPBLENDMODE + "=" + mapMapBlendMode + "\r\n";
}
public String getMapMapBlendAlpha() {
return mapMapBlendAlpha;
}
public void setMapMapBlendAlpha(final String value) {
Double.parseDouble(value);
mapMapBlendAlpha = value;
}
public String outMapMapBlendAlpha() {
return MapData.PROPERTY_MAP_MAPBLENDALPHA + "=" + mapMapBlendAlpha + "\r\n";
}
public boolean getScreenshotTitleEnabled() {
return screenshotTitleEnabled;
}
public void setScreenshotTitleEnabled(final boolean value) {
screenshotTitleEnabled = value;
}
public String outScreenshotTitleEnabled() {
return MapData.PROPERTY_SCREENSHOT_TITLE_ENABLED + "=" + screenshotTitleEnabled + "\r\n";
}
public int getScreenshotTitleX() {
return screenshotTitleX;
}
public void setScreenshotTitleX(final int value) {
screenshotTitleX = value;
}
public String outScreenshotTitleX() {
return MapData.PROPERTY_SCREENSHOT_TITLE_X + "=" + screenshotTitleX + "\r\n";
}
public int getScreenshotTitleY() {
return screenshotTitleY;
}
public void setScreenshotTitleY(final int value) {
screenshotTitleY = value;
}
public String outScreenshotTitleY() {
return MapData.PROPERTY_SCREENSHOT_TITLE_Y + "=" + screenshotTitleY + "\r\n";
}
public Color getScreenshotTitleColor() {
return screenshotTitleColor;
}
public void setScreenshotTitleColor(final Color value) {
screenshotTitleColor = value;
}
public String outScreenshotTitleColor() {
return MapData.PROPERTY_SCREENSHOT_TITLE_COLOR + "=" + colorToHex(screenshotTitleColor) + "\r\n";
}
public int getScreenshotTitleFontSize() {
return screenshotTitleFontSize;
}
public void setScreenshotTitleFontSize(final int value) {
screenshotTitleFontSize = value;
}
public String outScreenshotTitleFontSize() {
return MapData.PROPERTY_SCREENSHOT_TITLE_FONT_SIZE + "=" + screenshotTitleFontSize + "\r\n";
}
}