Starsector API
Loading...
Searching...
No Matches
BaseInstallableItemEffect.java
Go to the documentation of this file.
1
4package com.fs.starfarer.api.impl.campaign.econ.impl;
5
6import java.util.ArrayList;
7import java.util.LinkedHashSet;
8import java.util.List;
9import java.util.Set;
10
11import java.awt.Color;
12
13import com.fs.starfarer.api.Global;
14import com.fs.starfarer.api.campaign.SectorEntityToken;
15import com.fs.starfarer.api.campaign.SpecialItemData;
16import com.fs.starfarer.api.campaign.SpecialItemSpecAPI;
17import com.fs.starfarer.api.campaign.econ.Industry;
18import com.fs.starfarer.api.campaign.econ.InstallableIndustryItemPlugin.InstallableItemDescriptionMode;
19import com.fs.starfarer.api.campaign.econ.MarketAPI;
20import com.fs.starfarer.api.campaign.econ.MarketAPI.SurveyLevel;
21import com.fs.starfarer.api.impl.campaign.ids.Conditions;
22import com.fs.starfarer.api.ui.TooltipMakerAPI;
23import com.fs.starfarer.api.util.Misc;
24import com.fs.starfarer.api.util.Pair;
25
26public abstract class BaseInstallableItemEffect implements InstallableItemEffect {
27 public String id;
29 public BaseInstallableItemEffect(String id) {
30 this.id = id;
32 }
33
34 public float getItemDescPad(InstallableItemDescriptionMode mode) {
35 float pad = 0f;
36 if (mode == InstallableItemDescriptionMode.INDUSTRY_MENU_TOOLTIP ||
37 mode == InstallableItemDescriptionMode.CARGO_TOOLTIP) {
38 pad = 10f;
39 }
40 return pad;
41 }
42 public String getItemInstalledText(TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode) {
43 String name = Misc.ucFirst(spec.getName().toLowerCase());
44 String pre = "";
45 float pad = 0f;
46 if (mode == InstallableItemDescriptionMode.MANAGE_ITEM_DIALOG_LIST ||
47 mode == InstallableItemDescriptionMode.INDUSTRY_TOOLTIP) {
48 pre = name + ". ";
49 } else if (mode == InstallableItemDescriptionMode.MANAGE_ITEM_DIALOG_INSTALLED ||
50 mode == InstallableItemDescriptionMode.INDUSTRY_MENU_TOOLTIP) {
51 pre = name + " currently installed. ";
52 }
53 if (mode == InstallableItemDescriptionMode.INDUSTRY_MENU_TOOLTIP ||
54 mode == InstallableItemDescriptionMode.CARGO_TOOLTIP) {
55 pad = 10f;
56 }
57 return pre;
58 }
59
60 public void addItemDescription(Industry industry, TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode) {
61 String pre = getItemInstalledText(text, data, mode);
62 float pad = getItemDescPad(mode);
63 addItemDescriptionImpl(industry, text, data, mode, pre, pad);
64 }
65
66 protected void addItemDescriptionImpl(Industry industry, TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode, String pre, float pad) {
67
68 }
69
70 public String [] getSimpleReqs(Industry industry) {
71 return new String [0];
72 }
73
74 public List<String> getRequirements(Industry industry) {
75 List<String> reqs = new ArrayList<String>();
76 for (String curr : getSimpleReqs(industry)) {
77 reqs.add(curr);
78 }
79 return reqs;
80 }
81
82 public List<String> getUnmetRequirements(Industry industry) {
83 return getUnmetRequirements(industry, false);
84 }
85 public List<String> getUnmetRequirements(Industry industry, boolean checkSurveyed) {
86 List<String> unmet = new ArrayList<String>();
87 if (industry == null) return unmet;
88
89 MarketAPI market = industry.getMarket();
90
91 boolean prelim = market.getSurveyLevel().ordinal() >= SurveyLevel.PRELIMINARY.ordinal();
92 boolean full = market.getSurveyLevel().ordinal() >= SurveyLevel.FULL.ordinal();
93 if (!checkSurveyed) {
94 prelim = true;
95 full = true;
96 }
97
98 for (String curr : getRequirements(industry)) {
99 if (ItemEffectsRepo.NO_ATMOSPHERE.equals(curr)) {
100 if (!market.hasCondition(Conditions.NO_ATMOSPHERE) || !prelim) {
101 unmet.add(curr);
102 }
103 } else if (ItemEffectsRepo.HABITABLE.equals(curr)) {
104 if (!market.hasCondition(Conditions.HABITABLE) || !prelim) {
105 unmet.add(curr);
106 }
107 } else if (ItemEffectsRepo.NOT_HABITABLE.equals(curr)) {
108 if (market.hasCondition(Conditions.HABITABLE) || !prelim) {
109 unmet.add(curr);
110 }
111 } else if (ItemEffectsRepo.GAS_GIANT.equals(curr)) {
112 if (market.getPlanetEntity() != null && !market.getPlanetEntity().isGasGiant()) {
113 unmet.add(curr);
114 }
115 } else if (ItemEffectsRepo.NOT_A_GAS_GIANT.equals(curr)) {
116 if (market.getPlanetEntity() != null && market.getPlanetEntity().isGasGiant()) {
117 unmet.add(curr);
118 }
119 } else if (ItemEffectsRepo.NOT_EXTREME_WEATHER.equals(curr)) {
120 if (market.hasCondition(Conditions.EXTREME_WEATHER) || !prelim) {
121 unmet.add(curr);
122 }
123 } else if (ItemEffectsRepo.NOT_EXTREME_TECTONIC_ACTIVITY.equals(curr)) {
124 if (market.hasCondition(Conditions.EXTREME_TECTONIC_ACTIVITY) || !prelim) {
125 unmet.add(curr);
126 }
127 } else if (ItemEffectsRepo.NO_TRANSPLUTONIC_ORE_DEPOSITS.equals(curr)) {
132 market.hasCondition(Conditions.RARE_ORE_ULTRARICH)) || !full) {
133 unmet.add(curr);
134 }
135 } else if (ItemEffectsRepo.NO_VOLATILES_DEPOSITS.equals(curr)) {
139 market.hasCondition(Conditions.VOLATILES_PLENTIFUL)) || !full) {
140 unmet.add(curr);
141 }
142 } else if (ItemEffectsRepo.HOT_OR_EXTREME_HEAT.equals(curr)) {
143 if ((!market.hasCondition(Conditions.HOT) &&
144 !market.hasCondition(Conditions.VERY_HOT)) || !prelim) {
145 unmet.add(curr);
146 }
147 } else if (ItemEffectsRepo.COLD_OR_EXTREME_COLD.equals(curr)) {
148 if ((!market.hasCondition(Conditions.COLD) &&
149 !market.hasCondition(Conditions.VERY_COLD)) || !prelim) {
150 unmet.add(curr);
151 }
152 } else if (ItemEffectsRepo.CORONAL_TAP_RANGE.equals(curr)) {
154 market.getLocationInHyperspace(), true);
155 float dist = Float.MAX_VALUE;
156 if (p != null) dist = p.two;
158 unmet.add(curr);
159 }
160 }
161 }
162 return unmet;
163 }
164
165 @Override
166 public Set<String> getConditionsRelatedToRequirements(Industry industry) {
167 Set<String> cond = new LinkedHashSet<>();
168
169 for (String curr : getRequirements(industry)) {
170 if (ItemEffectsRepo.NO_ATMOSPHERE.equals(curr)) {
171 cond.add(Conditions.NO_ATMOSPHERE);
172 } else if (ItemEffectsRepo.HABITABLE.equals(curr)) {
173 cond.add(Conditions.HABITABLE);
174 } else if (ItemEffectsRepo.NOT_HABITABLE.equals(curr)) {
175 cond.add(Conditions.HABITABLE);
176 } else if (ItemEffectsRepo.NOT_EXTREME_WEATHER.equals(curr)) {
177 cond.add(Conditions.EXTREME_WEATHER);
178 } else if (ItemEffectsRepo.NOT_EXTREME_TECTONIC_ACTIVITY.equals(curr)) {
180 } else if (ItemEffectsRepo.NO_TRANSPLUTONIC_ORE_DEPOSITS.equals(curr)) {
181 cond.add(Conditions.RARE_ORE_SPARSE);
184 cond.add(Conditions.RARE_ORE_RICH);
186 } else if (ItemEffectsRepo.NO_VOLATILES_DEPOSITS.equals(curr)) {
187 cond.add(Conditions.VOLATILES_TRACE);
191 } else if (ItemEffectsRepo.HOT_OR_EXTREME_HEAT.equals(curr)) {
192 cond.add(Conditions.HOT);
193 cond.add(Conditions.VERY_HOT);
194 } else if (ItemEffectsRepo.COLD_OR_EXTREME_COLD.equals(curr)) {
195 cond.add(Conditions.COLD);
196 cond.add(Conditions.VERY_COLD);
197 }
198 }
199 return cond;
200 }
201
202
203
204 protected void addRequirements(TooltipMakerAPI text, boolean canInstall,
205 InstallableItemDescriptionMode mode, String ... reqs) {
206 if (canInstall) return;
207
208 float opad = 10f;
209 String list = "";
210 for (String curr : reqs) {
211 curr = curr.trim();
212 list += curr + ", ";
213 }
214
215 Color reqColor = Misc.getBasePlayerColor();
216 if (mode != InstallableItemDescriptionMode.CARGO_TOOLTIP) {
217 reqColor = Misc.getNegativeHighlightColor();
218 opad = 0f;
219 }
220
221 if (!list.isEmpty()) list = list.substring(0, list.length() - 2);
222 if (!list.isEmpty()) {
223 text.addPara("Requires: " + list, opad,
224 Misc.getGrayColor(), reqColor, reqs);
225 }
226 }
227
228
229
230// public void addItemDescription(TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode) {
231// }
232// public void apply(Industry industry) {
233// }
234// public void unapply(Industry industry) {
235// }
236
237// public boolean canBeInstalledIn(Industry industry) {
238// return true;
239// }
240// public String getRequirementsText(Industry industry) {
241// return null;
242// }
243
244}
245
246
247
248
249
250
static SettingsAPI getSettings()
Definition Global.java:57
void addRequirements(TooltipMakerAPI text, boolean canInstall, InstallableItemDescriptionMode mode, String ... reqs)
void addItemDescriptionImpl(Industry industry, TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode, String pre, float pad)
void addItemDescription(Industry industry, TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode)
String getItemInstalledText(TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode)
List< String > getUnmetRequirements(Industry industry, boolean checkSurveyed)
static Pair< SectorEntityToken, Float > getNearestCoronalTap(Vector2f locInHyper, boolean usable)
static String ucFirst(String str)
Definition Misc.java:559
static Color getNegativeHighlightColor()
Definition Misc.java:802
static Color getBasePlayerColor()
Definition Misc.java:833
static Color getGrayColor()
Definition Misc.java:826
SpecialItemSpecAPI getSpecialItemSpec(String itemId)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)