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
33 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) {
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>();
62 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) {
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
95 public TooltipCreator getTooltip() {
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();
108 FactionAPI player = Global.getSector().getFaction(Factions.PLAYER);
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
128 MarketAPI sindria = SindrianDiktatHostileActivityFactor.getSindria(false);
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
168 public float getMagnitudeContribution(StarSystemAPI system) {
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:51
static SectorAPI getSector()
Definition Global.java:59
static CompetitorData computeCompetitorData(String factionId, String competitorId, String commodityId)