diff --git a/EU3_Scenario_Editor/src/editor/MapmodeBuilder.java b/EU3_Scenario_Editor/src/editor/MapmodeBuilder.java index 2418666..81b0c42 100644 --- a/EU3_Scenario_Editor/src/editor/MapmodeBuilder.java +++ b/EU3_Scenario_Editor/src/editor/MapmodeBuilder.java @@ -254,6 +254,10 @@ public static void buildMapmodeMenu(JMenu viewMenu, MapPanel mapPanel, JLabel vi DiscreteStepFilterAction actn = new DiscreteStepFilterAction("Leadership", "leadership", 0, 10, 1); actn.setStepColors(allColors, view); viewMenu.add(actn); + } else if (view.equals("development")) { + viewMenu.add(new DevelopmentFilterAction(0, 30, 1)); + } else if (view.equals("ck3-development")) { + viewMenu.add(new CK3DevelopmentFilterAction()); } else if (view.equals("hotspots-owner")) { viewMenu.add(new HotspotFilterAction("owner", 20, 1)); } else if (view.equals("hotspots-controller")) { @@ -1313,6 +1317,20 @@ public CultureGroupFilterAction(String name, String cultureGroup) { } } + private static class DevelopmentFilterAction extends FilterAction { + public DevelopmentFilterAction(int min, int max, int step) { + super("Total development level", new DevelopmentMapMode(mapPanel, min, max, step)); + putValue(SHORT_DESCRIPTION, "Total development level"); + } + } + + private static class CK3DevelopmentFilterAction extends FilterAction { + public CK3DevelopmentFilterAction() { + super("Development level", new CK3DevelopmentMapMode(mapPanel)); + putValue(SHORT_DESCRIPTION, "Development level"); + } + } + private static class WarsAction extends AbstractAction { public WarsAction() { diff --git a/EU3_Scenario_Editor/src/editor/mapmode/CK3DevelopmentMapMode.java b/EU3_Scenario_Editor/src/editor/mapmode/CK3DevelopmentMapMode.java new file mode 100644 index 0000000..c866157 --- /dev/null +++ b/EU3_Scenario_Editor/src/editor/mapmode/CK3DevelopmentMapMode.java @@ -0,0 +1,48 @@ + +package editor.mapmode; + +import editor.MapPanel; +import editor.ProvinceData; +import java.awt.Color; + +/** + * + * @author Michael + */ +public class CK3DevelopmentMapMode extends TitleMode { + + private final Color[] colors = Utilities.createSteppedColors(0, 101, 1, Color.WHITE, Color.GREEN.darker(), Color.GREEN.darker().darker().darker()); + + public CK3DevelopmentMapMode(MapPanel panel) { + super(panel, TitleMode.TitleType.COUNTY); + } + + @Override + protected Color getTitleColor(String title) { + String devStr = getLiegeHistString(title, "change_development_level"); + if (devStr == null || devStr.isEmpty()) + return getColorFromDevLevel(0); + + try { + int devLevel = Integer.parseInt(devStr); + return getColorFromDevLevel(devLevel); + } catch (NumberFormatException ex) { + } + return Utilities.COLOR_NO_CTRY_DEF; + } + + private Color getColorFromDevLevel(int devLevel) { + if (devLevel >= 0 && devLevel < colors.length) + return colors[devLevel]; + return Utilities.COLOR_LAND_DEFAULT; + } + + @Override + public String getTooltipExtraText(ProvinceData.Province current) { + if (!mapPanel.getMap().isLand(current.getId()) || mapPanel.getMap().isWasteland(current.getId())) + return ""; + + return "Development level: " + getLiegeHistString(getLowestHistTitleHolder(current.getId()), "change_development_level"); + } + +} diff --git a/EU3_Scenario_Editor/src/editor/mapmode/DevelopmentMapMode.java b/EU3_Scenario_Editor/src/editor/mapmode/DevelopmentMapMode.java new file mode 100644 index 0000000..998c92b --- /dev/null +++ b/EU3_Scenario_Editor/src/editor/mapmode/DevelopmentMapMode.java @@ -0,0 +1,57 @@ + +package editor.mapmode; + +import editor.MapPanel; +import editor.ProvinceData; + +/** + * + * @author Michael + */ +public class DevelopmentMapMode extends DiscreteScalingMapMode { + + public DevelopmentMapMode(MapPanel panel, int min, int max, int step) { + super(panel, "", min, max, step); + setName("development"); + } + + + @Override + protected double getProvinceValue(int provId) { + String manpower = mapPanel.getModel().getHistString(provId, "base_manpower"); + String baseTax = mapPanel.getModel().getHistString(provId, "base_tax"); + String production = mapPanel.getModel().getHistString(provId, "base_production"); + + return toInt(manpower) + toInt(baseTax) + toInt(production); + } + + private int toInt(String strInt) { + if (strInt == null || strInt.isEmpty()) + return 0; + try { + return Integer.parseInt(strInt); + } catch (NumberFormatException ex) { + return 0; + } + } + + @Override + public String getTooltipExtraText(ProvinceData.Province current) { + final int id = current.getId(); + if (!getMap().isLand(id)) + return ""; + if (getMap().isWasteland(id)) + return ""; + + String manpower = mapPanel.getModel().getHistString(id, "base_manpower"); + String baseTax = mapPanel.getModel().getHistString(id, "base_tax"); + String production = mapPanel.getModel().getHistString(id, "base_production"); + + return "Base tax: " + baseTax + + "
Production: " + production + + "
Manpower: " + manpower + + "
Total development: " + (int)getProvinceValue(id) + ""; + } + + +} diff --git a/EU3_Scenario_Editor/src/editor/mapmode/DiscreteScalingMapMode.java b/EU3_Scenario_Editor/src/editor/mapmode/DiscreteScalingMapMode.java index 93b1c32..785ec71 100644 --- a/EU3_Scenario_Editor/src/editor/mapmode/DiscreteScalingMapMode.java +++ b/EU3_Scenario_Editor/src/editor/mapmode/DiscreteScalingMapMode.java @@ -29,7 +29,7 @@ public class DiscreteScalingMapMode extends ProvincePaintingMode { // TODO: Perhaps make it so an arbitrary number of colors could be used, // fading from one to another? - private Color minColor = Color.RED.darker(); + private Color minColor = Color.WHITE; private Color midColor = Color.YELLOW; private Color maxColor = Color.GREEN.darker(); @@ -59,19 +59,28 @@ private void initializeColors() { @Override protected void paintProvince(final Graphics2D g, int provId) { - String value = mapPanel.getModel().getHistString(provId, prop); - - if (value == null || value.length() == 0 || value.equals("0")) { + double value = getProvinceValue(provId); + if (value < 0) { mapPanel.paintProvince(g, provId, Utilities.COLOR_LAND_DEFAULT); return; } - int index = (int) ((Double.parseDouble(value) + min) / step); + int index = (int) ((value + min) / step); index = Math.max(0, Math.min(colors.length-1, index)); mapPanel.paintProvince(g, provId, colors[index]); } + protected double getProvinceValue(int provId) { + String value = mapPanel.getModel().getHistString(provId, prop); + + if (value == null || value.length() == 0 || value.equals("0")) { + return -1; + } + + return Double.parseDouble(value); + } + @Override protected void paintSeaZone(final Graphics2D g, int id) { // Do nothing diff --git a/EU3_Scenario_Editor/src/editor/mapmode/TitleMode.java b/EU3_Scenario_Editor/src/editor/mapmode/TitleMode.java index 0f988d7..80fd581 100644 --- a/EU3_Scenario_Editor/src/editor/mapmode/TitleMode.java +++ b/EU3_Scenario_Editor/src/editor/mapmode/TitleMode.java @@ -103,6 +103,17 @@ protected Color getTitleColor(String title) { protected String getTitleHistString(String title, String name) { return ClausewitzHistory.getHistString(getTitleHistory(title), name, mapPanel.getModel().getDate()); } + + protected String getLiegeHistString(String title, String name) { + String ret = getTitleHistString(title, name); + while (ret == null || ret.isEmpty()) { + title = getTitleHistString(title, "liege"); + if (title == null || title.isEmpty()) + break; + ret = getTitleHistString(title, name); + } + return ret; + } public String getLiege(String title) { return getLiege(title, type); diff --git a/EU3_Scenario_Editor/views.txt b/EU3_Scenario_Editor/views.txt index 204f8f8..b6912db 100644 --- a/EU3_Scenario_Editor/views.txt +++ b/EU3_Scenario_Editor/views.txt @@ -88,6 +88,7 @@ eu4 = { # mostly In Nomine with trade nodes swapped for COTs base-tax base-production base-manpower + development --- #revolt-risk unrest @@ -197,8 +198,9 @@ ck3 = { province-religions #religions #religions-menu - #capitals + #capitals override-simple-terrain + ck3-development --- modding-menu }