Starsector API
Loading...
Searching...
No Matches
ResourceDepositsCondition.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.econ;
2
3import java.util.HashMap;
4import java.util.HashSet;
5import java.util.Map;
6import java.util.Set;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
10import com.fs.starfarer.api.campaign.econ.Industry;
11import com.fs.starfarer.api.campaign.econ.MarketAPI;
12import com.fs.starfarer.api.campaign.econ.MarketImmigrationModifier;
13import com.fs.starfarer.api.impl.campaign.econ.impl.BaseIndustry;
14import com.fs.starfarer.api.impl.campaign.ids.Commodities;
15import com.fs.starfarer.api.impl.campaign.ids.Conditions;
16import com.fs.starfarer.api.impl.campaign.ids.Factions;
17import com.fs.starfarer.api.impl.campaign.ids.Industries;
18import com.fs.starfarer.api.impl.campaign.population.PopulationComposition;
19import com.fs.starfarer.api.loading.IndustrySpecAPI;
20import com.fs.starfarer.api.ui.TooltipMakerAPI;
21import com.fs.starfarer.api.util.Misc;
22
23
24public class ResourceDepositsCondition extends BaseHazardCondition implements MarketImmigrationModifier {
25
26 public static Map<String, String> COMMODITY = new HashMap<String, String>();
27 public static Map<String, Integer> MODIFIER = new HashMap<String, Integer>();
28 public static Map<String, String> INDUSTRY = new HashMap<String, String>();
29 public static Map<String, Integer> BASE_MODIFIER = new HashMap<String, Integer>();
30 public static Set<String> BASE_ZERO = new HashSet<String>();
31 static {
32 COMMODITY.put(Conditions.ORE_SPARSE, Commodities.ORE);
33 COMMODITY.put(Conditions.ORE_MODERATE, Commodities.ORE);
34 COMMODITY.put(Conditions.ORE_ABUNDANT, Commodities.ORE);
35 COMMODITY.put(Conditions.ORE_RICH, Commodities.ORE);
36 COMMODITY.put(Conditions.ORE_ULTRARICH, Commodities.ORE);
37
38 COMMODITY.put(Conditions.RARE_ORE_SPARSE, Commodities.RARE_ORE);
39 COMMODITY.put(Conditions.RARE_ORE_MODERATE, Commodities.RARE_ORE);
40 COMMODITY.put(Conditions.RARE_ORE_ABUNDANT, Commodities.RARE_ORE);
41 COMMODITY.put(Conditions.RARE_ORE_RICH, Commodities.RARE_ORE);
42 COMMODITY.put(Conditions.RARE_ORE_ULTRARICH, Commodities.RARE_ORE);
43
44 COMMODITY.put(Conditions.ORGANICS_TRACE, Commodities.ORGANICS);
45 COMMODITY.put(Conditions.ORGANICS_COMMON, Commodities.ORGANICS);
46 COMMODITY.put(Conditions.ORGANICS_ABUNDANT, Commodities.ORGANICS);
47 COMMODITY.put(Conditions.ORGANICS_PLENTIFUL, Commodities.ORGANICS);
48
49 COMMODITY.put(Conditions.VOLATILES_TRACE, Commodities.VOLATILES);
50 COMMODITY.put(Conditions.VOLATILES_DIFFUSE, Commodities.VOLATILES);
51 COMMODITY.put(Conditions.VOLATILES_ABUNDANT, Commodities.VOLATILES);
52 COMMODITY.put(Conditions.VOLATILES_PLENTIFUL, Commodities.VOLATILES);
53
54 COMMODITY.put(Conditions.FARMLAND_POOR, Commodities.FOOD);
55 COMMODITY.put(Conditions.FARMLAND_ADEQUATE, Commodities.FOOD);
56 COMMODITY.put(Conditions.FARMLAND_RICH, Commodities.FOOD);
57 COMMODITY.put(Conditions.FARMLAND_BOUNTIFUL, Commodities.FOOD);
58
59 COMMODITY.put(Conditions.VOLTURNIAN_LOBSTER_PENS, Commodities.LOBSTER);
60
61 COMMODITY.put(Conditions.WATER_SURFACE, Commodities.FOOD);
62 //COMMODITY.put(Conditions.POLLUTION, Commodities.FOOD);
63
64
65 MODIFIER.put(Conditions.ORE_SPARSE, -1);
66 MODIFIER.put(Conditions.ORE_MODERATE, 0);
67 MODIFIER.put(Conditions.ORE_ABUNDANT, 1);
68 MODIFIER.put(Conditions.ORE_RICH, 2);
69 MODIFIER.put(Conditions.ORE_ULTRARICH, 3);
70
71
72 MODIFIER.put(Conditions.RARE_ORE_SPARSE, -1);
73 MODIFIER.put(Conditions.RARE_ORE_MODERATE, 0);
74 MODIFIER.put(Conditions.RARE_ORE_ABUNDANT, 1);
75 MODIFIER.put(Conditions.RARE_ORE_RICH, 2);
76 MODIFIER.put(Conditions.RARE_ORE_ULTRARICH, 3);
77
78 MODIFIER.put(Conditions.ORGANICS_TRACE, -1);
79 MODIFIER.put(Conditions.ORGANICS_COMMON, 0);
80 MODIFIER.put(Conditions.ORGANICS_ABUNDANT, 1);
81 MODIFIER.put(Conditions.ORGANICS_PLENTIFUL, 2);
82
83 MODIFIER.put(Conditions.VOLATILES_TRACE, -1);
84 MODIFIER.put(Conditions.VOLATILES_DIFFUSE, 0);
85 MODIFIER.put(Conditions.VOLATILES_ABUNDANT, 1);
86 MODIFIER.put(Conditions.VOLATILES_PLENTIFUL, 2);
87
88 MODIFIER.put(Conditions.FARMLAND_POOR, -1);
89 MODIFIER.put(Conditions.FARMLAND_ADEQUATE, 0);
90 MODIFIER.put(Conditions.FARMLAND_RICH, 1);
91 MODIFIER.put(Conditions.FARMLAND_BOUNTIFUL, 2);
92
93 MODIFIER.put(Conditions.WATER_SURFACE, 0);
94 //MODIFIER.put(Conditions.POLLUTION, -2);
95 MODIFIER.put(Conditions.VOLTURNIAN_LOBSTER_PENS, 1);
96
97
98 INDUSTRY.put(Commodities.ORE, Industries.MINING);
99 INDUSTRY.put(Commodities.RARE_ORE, Industries.MINING);
100 INDUSTRY.put(Commodities.VOLATILES, Industries.MINING);
101 INDUSTRY.put(Commodities.ORGANICS, Industries.MINING);
102
103 INDUSTRY.put(Commodities.FOOD, Industries.FARMING);
104 INDUSTRY.put(Commodities.LOBSTER, Industries.FARMING);
105
106 BASE_MODIFIER.put(Commodities.ORE, 0);
107 BASE_MODIFIER.put(Commodities.RARE_ORE, -2);
108 BASE_MODIFIER.put(Commodities.VOLATILES, -2);
109 BASE_MODIFIER.put(Commodities.ORGANICS, 0);
110 BASE_MODIFIER.put(Commodities.FOOD, 0);
111
112 BASE_MODIFIER.put(Commodities.LOBSTER, 0);
113 BASE_ZERO.add(Commodities.LOBSTER);
114 }
115
116// public static int getProduction(MarketAPI market, String industryId, String commodityId) {
117// for (MarketConditionAPI mc : market.getConditions()) {
118// String currCommodity = COMMODITY.get(mc.getId());
119// if (currCommodity == null) continue;
120// if (!currCommodity.equals(commodityId)) continue;
121//
122// Integer mod = MODIFIER.get(mc.getId());
123// if (mod == null) continue;
124//
125// Integer baseMod = BASE_MODIFIER.get(currCommodity);
126// if (baseMod == null) continue;
127//
128// String currIndustry = INDUSTRY.get(currCommodity);
129// if (currIndustry == null) continue;
130// if (!industryId.equals(currIndustry)) {
131// if (Industries.FARMING.equals(currIndustry)) {
132// if (!industryId.equals(Industries.AQUACULTURE)) {
133// continue;
134// }
135// } else {
136// continue;
137// }
138// }
139//
140// int size = market.getSize();
141// if (BASE_ZERO.contains(commodityId)) {
142// size = 0;
143// }
144//
145// int base = size + baseMod;
146//
147// return base + mod;
148// }
149// return 0;
150// }
151
152
153
154 public void apply(String id) {
155 super.apply(id);
156
157 String commodityId = COMMODITY.get(condition.getId());
158 if (commodityId == null) return;
159
160// if (commodityId.equals(Commodities.LOBSTER)) {
161// System.out.println("ewfwefwe");
162// }
163
164 Integer mod = MODIFIER.get(condition.getId());
165 if (mod == null) return;
166
167 Integer baseMod = BASE_MODIFIER.get(commodityId);
168 if (baseMod == null) return;
169
170 String industryId = INDUSTRY.get(commodityId);
171 if (industryId == null) return;
172
173 Industry industry = market.getIndustry(industryId);
174 if (industry == null) {
175 if (Industries.FARMING.equals(industryId)) {
176 industryId = Industries.AQUACULTURE;
177 industry = market.getIndustry(industryId);
178 }
179 if (industry == null) return;
180 }
181
182 int size = market.getSize();
183 if (BASE_ZERO.contains(commodityId)) {
184 size = 0;
185 }
186
187 int base = size + baseMod;
188
189 if (industry.isFunctional()) {
190// industry.getSupply(commodityId).getQuantity().modifyFlat(id + "_0", base, BaseIndustry.BASE_VALUE_TEXT);
191// industry.getSupply(commodityId).getQuantity().modifyFlat(id + "_1", mod, Misc.ucFirst(condition.getName().toLowerCase()));
192
193 industry.supply(id + "_0", commodityId, base, BaseIndustry.BASE_VALUE_TEXT);
194 industry.supply(id + "_1", commodityId, mod, Misc.ucFirst(condition.getName().toLowerCase()));
195 } else {
196 industry.getSupply(commodityId).getQuantity().unmodifyFlat(id + "_0");
197 industry.getSupply(commodityId).getQuantity().unmodifyFlat(id + "_1");
198 }
199
200 if (Commodities.FOOD.equals(commodityId)) {
201 market.addImmigrationModifier(this);
202 }
203
204// uncomment to make farming provide organics
205// also need to adjust Farming to apply machinery deficit penalty
206// if ((Industries.FARMING.equals(industryId) ||
207// Industries.AQUACULTURE.equals(industryId) && Commodities.FOOD.equals(commodityId))) {
208// industry.getSupply(Commodities.ORGANICS).getQuantity().modifyFlat(id + "_0", size - 2, BaseIndustry.BASE_VALUE_TEXT);
209// industry.getSupply(Commodities.ORGANICS).getQuantity().modifyFlat(id + "_1", mod, Misc.ucFirst(condition.getName().toLowerCase()));
210// }
211 }
212
213 public void unapply(String id) {
214 super.unapply(id);
215 market.removeImmigrationModifier(this);
216 }
217
218 @Override
219 public Map<String, String> getTokenReplacements() {
220 if (true) return super.getTokenReplacements();
221
222 Map<String, String> map = super.getTokenReplacements();
223
224 String commodityId = COMMODITY.get(condition.getId());
225 if (commodityId == null) return map;
226
227 Integer mod = MODIFIER.get(condition.getId());
228 if (mod == null) return map;
229
230 CommoditySpecAPI spec = Global.getSettings().getCommoditySpec(commodityId);
231
232 String str = "" + mod;
233 if (mod > 0) str = "+" + mod;
234 if (mod == 0) {
235 map.put("$resourceModText", "No bonuses or penalties to " + spec.getName().toLowerCase() + " production.");
236 } else {
237 map.put("$resourceModText", "" + str + " to " + spec.getName().toLowerCase() + " production.");
238 }
239
240 //map.put("$resourceMod", Misc.ucFirst(spec.getName().toLowerCase()) )
241
242
243 return map;
244 }
245
246 @Override
247 public String[] getHighlights() {
248 if (true) return super.getHighlights();
249
250 String commodityId = COMMODITY.get(condition.getId());
251 if (commodityId == null) return super.getHighlights();
252
253 Integer mod = MODIFIER.get(condition.getId());
254 if (mod == null) return super.getHighlights();
255
256 String str = "" + mod;
257 if (mod > 0) str = "+" + mod;
258
259 if (mod == 0) {
260 return super.getHighlights();
261 }
262
263 return new String[] {str};
264 }
265
266 protected void createTooltipAfterDescription(TooltipMakerAPI tooltip, boolean expanded) {
267 super.createTooltipAfterDescription(tooltip, expanded);
268
269 String commodityId = COMMODITY.get(condition.getId());
270 if (commodityId != null) {
271
272// boolean hasHazard = false;
273// Object test = Global.getSettings().getSpec(ConditionGenDataSpec.class, condition.getId(), true);
274// if (test instanceof ConditionGenDataSpec) {
275// ConditionGenDataSpec spec = (ConditionGenDataSpec) test;
276// float hazard = spec.getHazard();
277// //hazard = 0.25f;
278// hasHazard = hazard != 0;
279// }
280
281 Integer mod = MODIFIER.get(condition.getId());
282 if (mod != null) {
283 CommoditySpecAPI spec = Global.getSettings().getCommoditySpec(commodityId);
284
285 String industryId = INDUSTRY.get(commodityId);
286 IndustrySpecAPI ind = Global.getSettings().getIndustrySpec(industryId);
287
288
289 String str = "" + mod;
290 if (mod > 0) str = "+" + mod;
291 String text = "";
292 if (mod == 0) {
293 text = "No bonuses or penalties to " + spec.getName().toLowerCase() + " production (" + ind.getName() + ")";
294 } else {
295 //text = "" + str + " to " + spec.getName().toLowerCase() + " production.";
296 text = "" + str + " " + spec.getName().toLowerCase() + " production (" + ind.getName() + ")";
297 }
298 float pad = 10f;
299 tooltip.addPara(text, pad, Misc.getHighlightColor(), str);
300 }
301 }
302 }
303
304
305 public void modifyIncoming(MarketAPI market, PopulationComposition incoming) {
306 float qty = 0f;
307 if (Conditions.FARMLAND_POOR.equals(condition.getId())) {
308 qty = 5f;
309 } else if (Conditions.FARMLAND_ADEQUATE.equals(condition.getId())) {
310 qty = 10f;
311 } else if (Conditions.FARMLAND_RICH.equals(condition.getId())) {
312 qty = 20f;
313 } else if (Conditions.FARMLAND_BOUNTIFUL.equals(condition.getId())) {
314 qty = 30f;
315 } else if (Conditions.WATER_SURFACE.equals(condition.getId())) {
316 qty = 10f;
317 }
318 if (qty > 0) {
319 incoming.add(Factions.LUDDIC_CHURCH, qty);
320 }
321 }
322
323
324
325
326}
327
328
329
330
static SettingsAPI getSettings()
Definition Global.java:51
void createTooltipAfterDescription(TooltipMakerAPI tooltip, boolean expanded)
void modifyIncoming(MarketAPI market, PopulationComposition incoming)
IndustrySpecAPI getIndustrySpec(String industryId)
CommoditySpecAPI getCommoditySpec(String commodityId)