Starsector API
Loading...
Searching...
No Matches
SindrianDiktatStandardActivityCause.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.events;
2
3import java.awt.Color;
4import java.util.ArrayList;
5import java.util.List;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.FactionAPI;
9import com.fs.starfarer.api.campaign.StarSystemAPI;
10import com.fs.starfarer.api.campaign.econ.CommodityOnMarketAPI;
11import com.fs.starfarer.api.campaign.econ.MarketAPI;
12import com.fs.starfarer.api.impl.campaign.ids.Factions;
13import com.fs.starfarer.api.impl.campaign.intel.events.TriTachyonStandardActivityCause.CompetitorData;
14import com.fs.starfarer.api.ui.Alignment;
15import com.fs.starfarer.api.ui.MapParams;
16import com.fs.starfarer.api.ui.TooltipMakerAPI;
17import com.fs.starfarer.api.ui.TooltipMakerAPI.TooltipCreator;
18import com.fs.starfarer.api.ui.UIPanelAPI;
19import com.fs.starfarer.api.util.Misc;
20
22
23 public static int MIN_DIKTAT_PRODUCTION = 7;
24 public static int MIN_COMPETITOR_PRODUCTION = 4;
25
26 public static int MIN_COMPETITOR_MARKET_SIZE = 4;
27
28 public static float PROD_PROGRESS_MULT = Global.getSettings().getFloat("diktatProgressPerUnitProdMult");
29
30 public static CompetitorData computeCompetitorData(String factionId, String competitorId, String commodityId) {
31 CompetitorData data = new CompetitorData(commodityId);
32
34 CommodityOnMarketAPI com = market.getCommodityData(commodityId);
35 if (com == null) continue;
36
37 int prod = com.getMaxSupply();
38 if (prod <= 0) continue;
39
40 if (factionId.equals(market.getFactionId())) {
41 data.factionProdTotal += prod;
42 data.factionProducers.add(market);
43 data.factionMaxProd = Math.max(data.factionMaxProd, prod);
44 } else if (competitorId.equals(market.getFactionId())) {
45 data.competitorProdTotal += prod;
46 data.competitorMaxProd = Math.max(data.competitorMaxProd, prod);
47 data.competitorProducers.add(market);
48
49 data.competitorMaxMarketSize = Math.max(data.competitorMaxMarketSize, market.getSize());
50 }
51
52 data.allProdTotal += prod;
53 }
54
55 return data;
56 }
57
58 public static List<CompetitorData> computePlayerCompetitionData() {
59 String factionId = Factions.DIKTAT;
60
61 List<String> commodities = new ArrayList<String>();
63 if (!factionId.equals(market.getFactionId())) continue;
64
65 for (CommodityOnMarketAPI com : market.getCommoditiesCopy()) {
66 if (!com.isFuel()) continue;
67 int prod = com.getMaxSupply();
68 if (prod >= MIN_DIKTAT_PRODUCTION) {
69 commodities.add(com.getId());
70 }
71 }
72 }
73
74 List<CompetitorData> result = new ArrayList<CompetitorData>();
75
76 for (String commodityId : commodities) {
77 CompetitorData data = computeCompetitorData(factionId, Factions.PLAYER, commodityId);
78 if (data.competitorMaxProd < MIN_COMPETITOR_PRODUCTION) continue;
79 if (data.competitorMaxMarketSize < MIN_COMPETITOR_MARKET_SIZE) continue;
80 result.add(data);
81 }
82
83 return result;
84 }
85
86 public static float MAX_MAG = 0.5f;
87
88
92
93
94 @Override
96 return new BaseFactorTooltip() {
97 @Override
98 public void createTooltip(TooltipMakerAPI tooltip, boolean expanded, Object tooltipParam) {
99 float opad = 10f;
100
101 Color h = Misc.getHighlightColor();
102 Color tc = Misc.getTextColor();
103
104 tooltip.addPara("Your colony production of fuel is high enough for the Sindrian Diktat - "
105 + "which depends on its own fuel production for much of its economy - to take notice.", 0f);
106
107 List<CompetitorData> comp = computePlayerCompetitionData();
109
110 tooltip.beginTable(player, 20f, "Commodity", getTooltipWidth(tooltipParam) - 150f, "Production", 150f);
111 for (final CompetitorData data : comp) {
112 tooltip.addRow(Alignment.LMID, tc, Misc.ucFirst(data.spec.getLowerCaseName()),
113 Alignment.MID, h, "" + (int) data.competitorMaxProd);
114 }
115 tooltip.addTable("", 0, opad);
116 tooltip.addSpacer(5f);
117
118 tooltip.addPara("Event progress is based on maximum fuel production. "
119 + "%s below %s per colony should be enough to divert "
120 + "the Diktat's attention.", opad,
121 h, "Reducing production levels ", "" + MIN_COMPETITOR_PRODUCTION);
122
123 tooltip.addPara("Knocking the Diktat out of the fuel production game is also an option. Much of "
124 + "their fuel production depends on a Domain-era Synchrotron Core installed in "
125 + "their production facilities on Sindria.", opad,
126 h, "Synchrotron Core");
127
129 if (sindria != null && sindria.getStarSystem() != null) {
130 MapParams params = new MapParams();
131 params.showSystem(sindria.getStarSystem());
132 float w = tooltip.getWidthSoFar();
133 float ht = Math.round(w / 1.6f);
134 params.positionToShowAllMarkersAndSystems(true, Math.min(w, ht));
135 UIPanelAPI map = tooltip.createSectorMap(w, ht, params, sindria.getName() + " (" + sindria.getStarSystem().getNameWithLowercaseTypeShort() + ")");
136 tooltip.addCustom(map, opad);
137 }
138 }
139 };
140 }
141
142 @Override
143 public boolean shouldShow() {
144 return getProgress() != 0;
145 }
146
147 public int getProgress() {
150 return 0;
151 }
152
153 int total = 0;
154
155 List<CompetitorData> comp = computePlayerCompetitionData();
156 for (CompetitorData data : comp) {
157 total += data.getProgress(PROD_PROGRESS_MULT);
158 }
159
160 return total;
161 }
162
163 public String getDesc() {
164 return "Competing fuel production";
165 }
166
167
169 if (getProgress() <= 0) return 0f;
170
171 List<CompetitorData> comp = computePlayerCompetitionData();
172 float mag = 0f;
173 for (CompetitorData data : comp) {
174 for (MarketAPI market : data.competitorProducers) {
175 if (market.getContainingLocation() == system) {
176 CommodityOnMarketAPI com = market.getCommodityData(data.commodityId);
177 float prod = com.getMaxSupply();
178 mag += prod * 0.1f;
179 }
180 }
181 }
182 if (mag > MAX_MAG) mag = MAX_MAG;
183
184 mag = Math.round(mag * 100f) / 100f;
185
186 return mag;
187 }
188
189}
190
191
192
193
194
195
static SettingsAPI getSettings()
Definition Global.java:57
static SectorAPI getSector()
Definition Global.java:65
static CompetitorData computeCompetitorData(String factionId, String competitorId, String commodityId)
void showSystem(StarSystemAPI system)
void positionToShowAllMarkersAndSystems(boolean showPlayerFleet, float heightOnScreen)
static Color getTextColor()
Definition Misc.java:839
static String ucFirst(String str)
Definition Misc.java:559
static Color getHighlightColor()
Definition Misc.java:792
FactionAPI getFaction(String factionId)
CommodityOnMarketAPI getCommodityData(String commodityId)
void addTable(String emptyText, int andMore, float pad)
UIComponentAPI addCustom(UIComponentAPI comp, float pad)
UIPanelAPI beginTable(FactionAPI faction, float itemHeight, Object ... columns)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)
UIComponentAPI addSpacer(float height)
UIPanelAPI createSectorMap(float w, float h, MapParams p, String title)