Starsector API
Loading...
Searching...
No Matches
GateHaulerCMD.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd.missions;
2
3import java.util.ArrayList;
4import java.util.List;
5import java.util.Map;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.BaseCampaignEntityPickerListener;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.CargoAPI;
11import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
12import com.fs.starfarer.api.campaign.InteractionDialogAPI;
13import com.fs.starfarer.api.campaign.LocationAPI;
14import com.fs.starfarer.api.campaign.OptionPanelAPI;
15import com.fs.starfarer.api.campaign.SectorEntityToken;
16import com.fs.starfarer.api.campaign.StarSystemAPI;
17import com.fs.starfarer.api.campaign.TextPanelAPI;
18import com.fs.starfarer.api.campaign.rules.MemoryAPI;
19import com.fs.starfarer.api.impl.campaign.DebugFlags;
20import com.fs.starfarer.api.impl.campaign.ids.Commodities;
21import com.fs.starfarer.api.impl.campaign.ids.Tags;
22import com.fs.starfarer.api.impl.campaign.intel.misc.GateHaulerIntel;
23import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
24import com.fs.starfarer.api.ui.TooltipMakerAPI;
25import com.fs.starfarer.api.util.Misc;
26import com.fs.starfarer.api.util.Misc.Token;
27
32public class GateHaulerCMD extends BaseCommandPlugin {
33
34 public static int ACTIVATION_COST = 1000;
35
39 protected TextPanelAPI text;
42 protected MemoryAPI memory;
44 protected Map<String, MemoryAPI> memoryMap;
45
46 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
47
48 this.dialog = dialog;
49 this.memoryMap = memoryMap;
50
51 String command = params.get(0).getString(memoryMap);
52 if (command == null) return false;
53
55
59
62
64
65 if (command.equals("addIntel")) {
67 } else if (command.equals("printCost")) {
68 printCost();
69 } else if (command.equals("removeActivationCosts")) {
71 } else if (command.equals("canActivate")) {
72 return canActivate();
73 } else if (command.equals("selectDestination")) {
75 } else if (command.equals("activate")) {
76 activate();
77 } else if (command.equals("canDeploy")) {
78 return canDeploy();
79 } else if (command.equals("deploy")) {
80 deploy();
81 } else if (command.equals("isInCurrentSystem")) {
82 return isInCurrentSystem();
83 } else if (command.equals("wasDeployedToCurrentSystem")) {
85 }
86 return true;
87 }
88
89 public boolean wasDeployedToCurrentSystem() {
91 if (loc == null) return false;
92 return loc.getMemoryWithoutUpdate().getBoolean("$deployedGateHaulerHere");
93
94 }
95 public boolean isInCurrentSystem() {
97 if (intel != null) {
98 if (intel.getAction() == null) {
100 }
101 }
102 return false;
103 }
104
105 public void deploy() {
106 if (stableLocation == null) return;
107
109 if (intel != null) {
111 }
112 }
113
114 public boolean canDeploy() {
116 if (intel == null) return false;
117 return stableLocation != null;
118 }
119
121 if (entity.getContainingLocation() == null) return null;
122 float minDist = Float.MAX_VALUE;
123 SectorEntityToken nearest = null;
125 float dist = Misc.getDistance(curr, entity);
126 if (dist < minDist) {
127 minDist = dist;
128 nearest = curr;
129 }
130 }
131 return nearest;
132 }
133
134 public void activate() {
136 if (intel != null) {
137 intel.activate();
138 }
139 }
140
141 public void printCost() {
142 Misc.showCost(text, null, null, getResources(), getQuantities());
143
144 if (canActivate()) {
145 text.addPara("Proceed with reactivation?");
146 } else {
147 text.addPara("You do not have the necessary resources to reactivate the Gate Hauler.");
148 }
149 }
150
151 public void removeActivationCosts() {
152 CargoAPI cargo = playerCargo;
153 String [] res = getResources();
154 int [] quantities = getQuantities();
155 for (int i = 0; i < res.length; i++) {
156 String commodityId = res[i];
157 int quantity = quantities[i];
158 cargo.removeCommodity(commodityId, quantity);
159 }
160 }
161
162 public boolean canActivate() {
164 return true;
165 }
166
167 CargoAPI cargo = playerCargo;
168 String [] res = getResources();
169 int [] quantities = getQuantities();
170
171 for (int i = 0; i < res.length; i++) {
172 String commodityId = res[i];
173 int quantity = quantities[i];
174 if (quantity > cargo.getQuantity(CargoItemType.RESOURCES, commodityId)) {
175 return false;
176 }
177 }
178 return true;
179 }
180
181 public String [] getResources() {
182 return new String[] {Commodities.RARE_METALS};
183 }
184
185 public int [] getQuantities() {
186 return new int[] {ACTIVATION_COST};
187 }
188
191 if (intel != null) {
193 return intel.computeTransitDays(system);
194 }
195 return 365;
196 }
197
198 public void selectDestination() {
199 final ArrayList<SectorEntityToken> systems = new ArrayList<SectorEntityToken>();
201 if (curr == entity.getContainingLocation()) continue;
202 if (curr.hasTag(Tags.THEME_HIDDEN) && !"Limbo".equals(curr.getBaseName())) continue;
203 if (curr.isDeepSpace()) continue;
204 if (curr.getHyperspaceAnchor() == null) continue;
205 if (Misc.getStarSystemForAnchor(curr.getHyperspaceAnchor()) == null) continue;
206 systems.add(curr.getHyperspaceAnchor());
207 }
208 dialog.showCampaignEntityPicker("Select destination for gate hauler", "Destination:", "Execute",
209 Global.getSector().getPlayerFaction(), systems,
211 public void pickedEntity(SectorEntityToken entity) {
212 dialog.dismiss();
213 Global.getSector().setPaused(false);
214
216 if (intel != null) {
218 intel.initiateDeparture(system);
219 }
220 }
221 public void cancelledEntityPicking() {
222
223 }
224 public String getMenuItemNameOverrideFor(SectorEntityToken entity) {
226 if (system != null) {
227 return system.getNameWithLowercaseTypeShort();
228 }
229 return null;
230 }
231 public String getSelectedTextOverrideFor(SectorEntityToken entity) {
233 if (system != null) {
234 return system.getNameWithLowercaseType();
235 }
236 return null;
237 }
238 public void createInfoText(TooltipMakerAPI info, SectorEntityToken entity) {
239 int days = getTravelDays(entity);
241 String daysStr = "days";
242 if (days == 1) daysStr = "day";
243 info.addPara(" Estimated gate hauler travel time: %s " + daysStr, 0f, Misc.getHighlightColor(), "" + days);
244 }
245
246 public boolean canConfirmSelection(SectorEntityToken entity) {
247 return true;
248 }
249 public float getFuelColorAlphaMult() {
250 return 0f;
251 }
252 public float getFuelRangeMult() { // just for showing it on the map when picking destination
253 return 0f;
254 }
255 });
256 }
257}
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
static SectorAPI getSector()
Definition Global.java:65
static GateHaulerIntel get(SectorEntityToken gateHauler)
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
Definition Misc.java:599
static Color getHighlightColor()
Definition Misc.java:792
static void showCost(TextPanelAPI text, Color color, Color dark, String[] res, int[] quantities)
Definition Misc.java:4683
static StarSystemAPI getStarSystemForAnchor(SectorEntityToken anchor)
Definition Misc.java:4679
float getQuantity(CargoAPI.CargoItemType type, Object data)
void removeCommodity(String id, float quantity)
void showCampaignEntityPicker(String title, String selectedText, String okText, FactionAPI factionForUIColors, List< SectorEntityToken > entities, CampaignEntityPickerListener listener)
List< SectorEntityToken > getEntitiesWithTag(String tag)
List< StarSystemAPI > getStarSystems()
LabelAPI addPara(String format, float pad, Color hl, String... highlights)