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.awt.Color;
7import java.util.ArrayList;
8import java.util.List;
9
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.campaign.SectorEntityToken;
12import com.fs.starfarer.api.campaign.SpecialItemData;
13import com.fs.starfarer.api.campaign.SpecialItemSpecAPI;
14import com.fs.starfarer.api.campaign.econ.Industry;
15import com.fs.starfarer.api.campaign.econ.MarketAPI;
16import com.fs.starfarer.api.campaign.econ.InstallableIndustryItemPlugin.InstallableItemDescriptionMode;
17import com.fs.starfarer.api.impl.campaign.ids.Conditions;
18import com.fs.starfarer.api.ui.TooltipMakerAPI;
19import com.fs.starfarer.api.util.Misc;
20import com.fs.starfarer.api.util.Pair;
21
22public abstract class BaseInstallableItemEffect implements InstallableItemEffect {
23 public String id;
24 public SpecialItemSpecAPI spec;
25 public BaseInstallableItemEffect(String id) {
26 this.id = id;
28 }
29
30 public float getItemDescPad(InstallableItemDescriptionMode mode) {
31 float pad = 0f;
32 if (mode == InstallableItemDescriptionMode.INDUSTRY_MENU_TOOLTIP ||
33 mode == InstallableItemDescriptionMode.CARGO_TOOLTIP) {
34 pad = 10f;
35 }
36 return pad;
37 }
38 public String getItemInstalledText(TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode) {
39 String name = Misc.ucFirst(spec.getName().toLowerCase());
40 String pre = "";
41 float pad = 0f;
42 if (mode == InstallableItemDescriptionMode.MANAGE_ITEM_DIALOG_LIST ||
43 mode == InstallableItemDescriptionMode.INDUSTRY_TOOLTIP) {
44 pre = name + ". ";
45 } else if (mode == InstallableItemDescriptionMode.MANAGE_ITEM_DIALOG_INSTALLED ||
46 mode == InstallableItemDescriptionMode.INDUSTRY_MENU_TOOLTIP) {
47 pre = name + " currently installed. ";
48 }
49 if (mode == InstallableItemDescriptionMode.INDUSTRY_MENU_TOOLTIP ||
50 mode == InstallableItemDescriptionMode.CARGO_TOOLTIP) {
51 pad = 10f;
52 }
53 return pre;
54 }
55
56 public void addItemDescription(Industry industry, TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode) {
57 String pre = getItemInstalledText(text, data, mode);
58 float pad = getItemDescPad(mode);
59 addItemDescriptionImpl(industry, text, data, mode, pre, pad);
60 }
61
62 protected void addItemDescriptionImpl(Industry industry, TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode, String pre, float pad) {
63
64 }
65
66 public String [] getSimpleReqs(Industry industry) {
67 return new String [0];
68 }
69
70 public List<String> getRequirements(Industry industry) {
71 List<String> reqs = new ArrayList<String>();
72 for (String curr : getSimpleReqs(industry)) {
73 reqs.add(curr);
74 }
75 return reqs;
76 }
77
78 public List<String> getUnmetRequirements(Industry industry) {
79 List<String> unmet = new ArrayList<String>();
80 if (industry == null) return unmet;
81
82 MarketAPI market = industry.getMarket();
83
84 for (String curr : getRequirements(industry)) {
85 if (ItemEffectsRepo.NO_ATMOSPHERE.equals(curr)) {
86 if (!market.hasCondition(Conditions.NO_ATMOSPHERE)) {
87 unmet.add(curr);
88 }
89 } else if (ItemEffectsRepo.HABITABLE.equals(curr)) {
90 if (!market.hasCondition(Conditions.HABITABLE)) {
91 unmet.add(curr);
92 }
93 } else if (ItemEffectsRepo.NOT_HABITABLE.equals(curr)) {
94 if (market.hasCondition(Conditions.HABITABLE)) {
95 unmet.add(curr);
96 }
97 } else if (ItemEffectsRepo.GAS_GIANT.equals(curr)) {
98 if (market.getPlanetEntity() != null && !market.getPlanetEntity().isGasGiant()) {
99 unmet.add(curr);
100 }
101 } else if (ItemEffectsRepo.NOT_A_GAS_GIANT.equals(curr)) {
102 if (market.getPlanetEntity() != null && market.getPlanetEntity().isGasGiant()) {
103 unmet.add(curr);
104 }
105 } else if (ItemEffectsRepo.NOT_EXTREME_WEATHER.equals(curr)) {
106 if (market.hasCondition(Conditions.EXTREME_WEATHER)) {
107 unmet.add(curr);
108 }
109 } else if (ItemEffectsRepo.NOT_EXTREME_TECTONIC_ACTIVITY.equals(curr)) {
110 if (market.hasCondition(Conditions.EXTREME_TECTONIC_ACTIVITY)) {
111 unmet.add(curr);
112 }
113 } else if (ItemEffectsRepo.NO_TRANSPLUTONIC_ORE_DEPOSITS.equals(curr)) {
114 if (market.hasCondition(Conditions.RARE_ORE_SPARSE) ||
115 market.hasCondition(Conditions.RARE_ORE_MODERATE) ||
116 market.hasCondition(Conditions.RARE_ORE_ABUNDANT) ||
117 market.hasCondition(Conditions.RARE_ORE_RICH) ||
118 market.hasCondition(Conditions.RARE_ORE_ULTRARICH)) {
119 unmet.add(curr);
120 }
121 } else if (ItemEffectsRepo.NO_VOLATILES_DEPOSITS.equals(curr)) {
122 if (market.hasCondition(Conditions.VOLATILES_TRACE) ||
123 market.hasCondition(Conditions.VOLATILES_DIFFUSE) ||
124 market.hasCondition(Conditions.VOLATILES_ABUNDANT) ||
125 market.hasCondition(Conditions.VOLATILES_PLENTIFUL)) {
126 unmet.add(curr);
127 }
128 } else if (ItemEffectsRepo.HOT_OR_EXTREME_HEAT.equals(curr)) {
129 if (!market.hasCondition(Conditions.HOT) &&
130 !market.hasCondition(Conditions.VERY_HOT)) {
131 unmet.add(curr);
132 }
133 } else if (ItemEffectsRepo.COLD_OR_EXTREME_COLD.equals(curr)) {
134 if (!market.hasCondition(Conditions.COLD) &&
135 !market.hasCondition(Conditions.VERY_COLD)) {
136 unmet.add(curr);
137 }
138 } else if (ItemEffectsRepo.CORONAL_TAP_RANGE.equals(curr)) {
139 Pair<SectorEntityToken, Float> p = PopulationAndInfrastructure.getNearestCoronalTap(
140 market.getLocationInHyperspace(), true);
141 float dist = Float.MAX_VALUE;
142 if (p != null) dist = p.two;
144 unmet.add(curr);
145 }
146 }
147 }
148
149 return unmet;
150 }
151
152
153 protected void addRequirements(TooltipMakerAPI text, boolean canInstall,
154 InstallableItemDescriptionMode mode, String ... reqs) {
155 if (canInstall) return;
156
157 float opad = 10f;
158 String list = "";
159 for (String curr : reqs) {
160 curr = curr.trim();
161 list += curr + ", ";
162 }
163
164 Color reqColor = Misc.getBasePlayerColor();
165 if (mode != InstallableItemDescriptionMode.CARGO_TOOLTIP) {
166 reqColor = Misc.getNegativeHighlightColor();
167 opad = 0f;
168 }
169
170 if (!list.isEmpty()) list = list.substring(0, list.length() - 2);
171 if (!list.isEmpty()) {
172 text.addPara("Requires: " + list, opad,
173 Misc.getGrayColor(), reqColor, reqs);
174 }
175 }
176
177
178
179// public void addItemDescription(TooltipMakerAPI text, SpecialItemData data, InstallableItemDescriptionMode mode) {
180// }
181// public void apply(Industry industry) {
182// }
183// public void unapply(Industry industry) {
184// }
185
186// public boolean canBeInstalledIn(Industry industry) {
187// return true;
188// }
189// public String getRequirementsText(Industry industry) {
190// return null;
191// }
192
193}
194
195
196
197
198
199
static SettingsAPI getSettings()
Definition Global.java:51
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)
static Pair< SectorEntityToken, Float > getNearestCoronalTap(Vector2f locInHyper, boolean usable)
SpecialItemSpecAPI getSpecialItemSpec(String itemId)