Starsector API
Loading...
Searching...
No Matches
GateCMD.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd.missions;
2
3import java.awt.Color;
4import java.util.ArrayList;
5import java.util.List;
6import java.util.Map;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.BaseCampaignEntityPickerListener;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.CargoAPI;
12import com.fs.starfarer.api.campaign.InteractionDialogAPI;
13import com.fs.starfarer.api.campaign.JumpPointAPI.JumpDestination;
14import com.fs.starfarer.api.campaign.LocationAPI;
15import com.fs.starfarer.api.campaign.OptionPanelAPI;
16import com.fs.starfarer.api.campaign.SectorEntityToken;
17import com.fs.starfarer.api.campaign.TextPanelAPI;
18import com.fs.starfarer.api.campaign.listeners.ListenerUtil;
19import com.fs.starfarer.api.campaign.rules.MemoryAPI;
20import com.fs.starfarer.api.impl.campaign.GateEntityPlugin;
21import com.fs.starfarer.api.impl.campaign.GateExplosionScript;
22import com.fs.starfarer.api.impl.campaign.ids.Tags;
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 GateCMD extends BaseCommandPlugin {
33
34 protected CampaignFleetAPI playerFleet;
35 protected SectorEntityToken entity;
36 protected TextPanelAPI text;
37 protected OptionPanelAPI options;
38 protected CargoAPI playerCargo;
39 protected MemoryAPI memory;
40 protected InteractionDialogAPI dialog;
41 protected Map<String, MemoryAPI> memoryMap;
42
43 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
44
45 this.dialog = dialog;
46 this.memoryMap = memoryMap;
47
48 String command = params.get(0).getString(memoryMap);
49 if (command == null) return false;
50
52
53 entity = dialog.getInteractionTarget();
54 text = dialog.getTextPanel();
55 options = dialog.getOptionPanel();
56
57 playerFleet = Global.getSector().getPlayerFleet();
58 playerCargo = playerFleet.getCargo();
59
60 if (command.equals("selectDestination")) {
62 } else if (command.equals("notifyScanned")) {
64 } else if (command.equals("explode")) {
66 } else if (command.equals("isPopulated")) {
67 return isPopulated(entity);
68 }
69 return true;
70 }
71
72 public static boolean isPopulated(SectorEntityToken targetGate) {
73 if (targetGate.getContainingLocation() == null) return false;
74
75 LocationAPI loc = targetGate.getContainingLocation();
76 if (loc.hasTag(Tags.THEME_CORE_POPULATED)) return true;
77
78 return !Misc.getMarketsInLocation(loc).isEmpty();
79 }
80
81 public static int computeFuelCost(SectorEntityToken targetGate) {
82 float dist = Misc.getDistanceToPlayerLY(targetGate);
83 float fuelPerLY = Global.getSector().getPlayerFleet().getLogistics().getFuelCostPerLightYear();
84
85 return (int) Math.ceil(dist * fuelPerLY * Misc.GATE_FUEL_COST_MULT);
86 }
87
88 protected void selectDestination() {
89 final ArrayList<SectorEntityToken> gates =
90 new ArrayList<SectorEntityToken>(GateEntityPlugin.getGateData().scanned);
91 gates.remove(entity);
92 dialog.showCampaignEntityPicker("Select destination", "Destination:", "Initiate transit",
93 Global.getSector().getPlayerFaction(), gates,
94 new BaseCampaignEntityPickerListener() {
95 public void pickedEntity(SectorEntityToken entity) {
96 int cost = computeFuelCost(entity);
97 Global.getSector().getPlayerFleet().getCargo().removeFuel(cost);
98
99 dialog.dismiss();
100 Global.getSector().setPaused(false);
101 JumpDestination dest = new JumpDestination(entity, null);
102 Global.getSector().doHyperspaceTransition(playerFleet, GateCMD.this.entity, dest, 2f);
103
104 float distLY = Misc.getDistanceLY(entity, GateCMD.this.entity);
105 if (entity.getCustomPlugin() instanceof GateEntityPlugin) {
106 GateEntityPlugin plugin = (GateEntityPlugin) entity.getCustomPlugin();
107 plugin.showBeingUsed(distLY);
108 }
109 if (GateCMD.this.entity.getCustomPlugin() instanceof GateEntityPlugin) {
110 GateEntityPlugin plugin = (GateEntityPlugin) GateCMD.this.entity.getCustomPlugin();
111 plugin.showBeingUsed(distLY);
112 }
113
114 ListenerUtil.reportFleetTransitingGate(Global.getSector().getPlayerFleet(),
115 GateCMD.this.entity, entity);
116 }
117 public void cancelledEntityPicking() {
118
119 }
120 public String getMenuItemNameOverrideFor(SectorEntityToken entity) {
121 return null;
122 }
123 public String getSelectedTextOverrideFor(SectorEntityToken entity) {
124 return entity.getName() + " - " + entity.getContainingLocation().getNameWithTypeShort();
125 }
126 public void createInfoText(TooltipMakerAPI info, SectorEntityToken entity) {
127
128 int cost = computeFuelCost(entity);
129 int available = (int) Global.getSector().getPlayerFleet().getCargo().getFuel();
130
131 Color reqColor = Misc.getHighlightColor();
132 Color availableColor = Misc.getHighlightColor();
133 if (cost > available) {
134 reqColor = Misc.getNegativeHighlightColor();
135 }
136
137 info.setParaSmallInsignia();
138// LabelAPI label = info.addPara("Transit requires %s fuel. "
139// + "You have %s units of fuel available.", 0f,
140// Misc.getTextColor(),
141// //Misc.getGrayColor(),
142// availColor, Misc.getWithDGS(cost), Misc.getWithDGS(available));
143// label.setHighlightColors(reqColor, availColor);
144
145 info.beginGrid(200f, 2, Misc.getGrayColor());
146 info.setGridFontSmallInsignia();
147 info.addToGrid(0, 0, " Fuel required:", Misc.getWithDGS(cost), reqColor);
148 info.addToGrid(1, 0, " Fuel available:", Misc.getWithDGS(available), availableColor);
149 info.addGrid(0);;
150 }
151 public boolean canConfirmSelection(SectorEntityToken entity) {
152 int cost = computeFuelCost(entity);
153 int available = (int) Global.getSector().getPlayerFleet().getCargo().getFuel();
154 return cost <= available;
155 }
156 public float getFuelColorAlphaMult() {
157 return 0.5f;
158 }
159 public float getFuelRangeMult() { // just for showing it on the map when picking destination
160 if (true) return 0f;
161 if (Misc.GATE_FUEL_COST_MULT <= 0) return 0f;
162 return 1f / Misc.GATE_FUEL_COST_MULT;
163 }
164 });
165 }
166
167 public static void notifyScanned(SectorEntityToken gate) {
168 GateEntityPlugin.getGateData().scanned.add(gate);
169 gate.getCustomPlugin().advance(0f); // makes gate activate if already did quest
170 }
171
172
173
174
175 public static void explode(SectorEntityToken gate) {
176 gate.getContainingLocation().addScript(new GateExplosionScript(gate));
177 }
178
179}
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
static SectorAPI getSector()
Definition Global.java:59
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
static void notifyScanned(SectorEntityToken gate)
Definition GateCMD.java:167
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
Definition GateCMD.java:43
static boolean isPopulated(SectorEntityToken targetGate)
Definition GateCMD.java:72
static int computeFuelCost(SectorEntityToken targetGate)
Definition GateCMD.java:81