Starsector API
Loading...
Searching...
No Matches
TransmitterTrapSpecial.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special;
2
3import org.lwjgl.util.vector.Vector2f;
4
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.CampaignFleetAPI;
7import com.fs.starfarer.api.campaign.FleetAssignment;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.PlanetAPI;
10import com.fs.starfarer.api.campaign.SectorEntityToken;
11import com.fs.starfarer.api.campaign.ai.FleetAIFlags;
12import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
13import com.fs.starfarer.api.fleet.FleetMemberAPI;
14import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
15import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
16import com.fs.starfarer.api.impl.campaign.ids.Factions;
17import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
18import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantSeededFleetManager;
19import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageSpecialInteraction.SalvageSpecialData;
20import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageSpecialInteraction.SalvageSpecialPlugin;
21import com.fs.starfarer.api.util.Misc;
22
24
25
26 public static class TransmitterTrapSpecialData implements SalvageSpecialData {
27 public float prob = 0.5f;
28
29 public String fleetId;
30
31 public String nearbyFleetFaction = null;
32 public Boolean useClosestFleetInRange = null;
33 public Boolean useAllFleetsInRange = null;
34
35 public FleetParamsV3 params;
36
37 public float minRange = 2500;
38 public float maxRange = 5000;
39
40 public TransmitterTrapSpecialData() {
41 }
42
43 public TransmitterTrapSpecialData(FleetParamsV3 params) {
44 this.params = params;
45 }
46
47 public TransmitterTrapSpecialData(float prob, FleetParamsV3 params) {
48 this.prob = prob;
49 this.params = params;
50 }
51
52 public SalvageSpecialPlugin createSpecialPlugin() {
53 return new TransmitterTrapSpecial();
54 }
55 }
56
57 private TransmitterTrapSpecialData data;
58
60 }
61
62
63 @Override
64 public void init(InteractionDialogAPI dialog, Object specialData) {
65 super.init(dialog, specialData);
66
67 data = (TransmitterTrapSpecialData) specialData;
68
69 initEntityLocation();
70 }
71
72 private void initEntityLocation() {
73
74 if (random.nextFloat() > data.prob) {
75
76 if (random.nextFloat() > 0.5f) {
77 addText("Your salvage crews discover a transmitter set to send a signal when " +
78 "tripped by an alarm system, but it doesn't appear to be functional. " +
79 "Closer examination indicates it was probably set many cycles ago.");
80 } else {
81 addText("Your salvage crews discover a transmitter set to send a signal when " +
82 "tripped by an alarm system. The alarm went off as intended, but the transmitter " +
83 "was fried by a power surge before it could do its job.");
84 }
85
86 setDone(true);
88 setShowAgain(false);
89 return;
90 }
91
92 if (entity instanceof PlanetAPI) {
93 addText("As your salvage crews begin their work, a transmitter hidden somewhere planetside " +
94 "sends out an encrypted, broadwave signal. Whatever destination it's meant for, " +
95 "it has to be nearby.");
96 } else {
97 addText("As your salvage crews begin their work, a transmitter inside the $shortName " +
98 "sends out an encrypted, broadwave signal. Whatever destination it's meant for, " +
99 "it has to be nearby.");
100 }
101
103
104 setDone(true);
105 setEndWithContinue(true);
106 setShowAgain(false);
107 }
108
109
110 public void transmitterActivated() {
111 if (data == null) return;
112 if (entity == null) return;
113
114 if (data.fleetId != null) {
115 SectorEntityToken found = Global.getSector().getEntityById(data.fleetId);
116 if (found instanceof CampaignFleetAPI) {
117 CampaignFleetAPI fleet = (CampaignFleetAPI) found;
118 FleetMemberAPI flagship = fleet.getFlagship();
119 boolean makeAggressive = false;
120 if (flagship != null) {
121 makeAggressive = Misc.isAutomated(flagship.getVariant());
122 }
123 makeFleetInterceptPlayer(fleet, makeAggressive, true, 30f);
124 }
125 return;
126 }
127
128 if (data.useAllFleetsInRange != null && data.useAllFleetsInRange) {
129 boolean foundSomeFleets = false;
131 if (data.nearbyFleetFaction != null &&
132 !data.nearbyFleetFaction.equals(fleet.getFaction().getId())) {
133 continue;
134 }
135
136 if (fleet.isStationMode()) continue;
137
138 if (fleet.getMemoryWithoutUpdate().is(MemFlags.MEMORY_KEY_TRADE_FLEET, true)) continue;
139
140 float dist = Misc.getDistance(fleet.getLocation(), entity.getLocation());
141 if (dist < data.maxRange) {
142 FleetMemberAPI flagship = fleet.getFlagship();
143 boolean makeAggressive = false;
144 if (flagship != null) {
145 makeAggressive = Misc.isAutomated(flagship.getVariant());
146 }
147 makeFleetInterceptPlayer(fleet, makeAggressive, true, 30f);
148 foundSomeFleets = true;
149 }
150 }
151 if (foundSomeFleets) return;
152 }
153
154 if (data.useClosestFleetInRange != null && data.useClosestFleetInRange) {
155 CampaignFleetAPI closest = null;
156 float minDist = Float.MAX_VALUE;
158 if (data.nearbyFleetFaction != null &&
159 !data.nearbyFleetFaction.equals(fleet.getFaction().getId())) {
160 continue;
161 }
162
163 if (fleet.isStationMode()) continue;
164
165 if (fleet.getMemoryWithoutUpdate().is(MemFlags.MEMORY_KEY_TRADE_FLEET, true)) continue;
166
167 float dist = Misc.getDistance(fleet.getLocation(), entity.getLocation());
168 if (dist < data.maxRange && dist < minDist) {
169 closest = fleet;
170 minDist = dist;
171 }
172 }
173 if (closest != null) {
174 FleetMemberAPI flagship = closest.getFlagship();
175 boolean makeAggressive = false;
176 if (flagship != null) {
177 makeAggressive = Misc.isAutomated(flagship.getVariant());
178 }
179 makeFleetInterceptPlayer(closest, makeAggressive, true, 30f);
180 return;
181 }
182 }
183
184 if (data.params != null) {
185 CampaignFleetAPI fleet = FleetFactoryV3.createFleet(data.params);
186 if (fleet == null || fleet.isEmpty()) return;
187
188 if (Factions.REMNANTS.equals(fleet.getFaction().getId())) {
190 } else {
191 fleet.setTransponderOn(false);
193 Misc.makeNoRepImpact(fleet, "tTrap");
194 }
195
196 float range = data.minRange + random.nextFloat() * (data.maxRange - data.minRange);
197 Vector2f loc = Misc.getPointAtRadius(entity.getLocation(), range);
198
200 fleet.setLocation(loc.x, loc.y);
201
202 FleetMemberAPI flagship = fleet.getFlagship();
203 boolean makeAggressive = false;
204 if (flagship != null) {
205 makeAggressive = Misc.isAutomated(flagship.getVariant());
206 }
207 makeFleetInterceptPlayer(fleet, makeAggressive, true, 30f);
208
209
210// SectorEntityToken despawnLoc = entity.getContainingLocation().createToken(20000, 0);
211// fleet.addAssignment(FleetAssignment.GO_TO_LOCATION_AND_DESPAWN, despawnLoc, 10000f);
213 return;
214 }
215 }
216
217
218
219
220 public static void makeFleetInterceptPlayer(CampaignFleetAPI fleet, boolean makeAggressive, boolean makeLowRepImpact, float interceptDays) {
221 makeFleetInterceptPlayer(fleet, makeAggressive, makeLowRepImpact, true, interceptDays);
222 }
223 public static void makeFleetInterceptPlayer(CampaignFleetAPI fleet, boolean makeAggressive, boolean makeLowRepImpact, boolean makeHostile, float interceptDays) {
225
226 if (fleet.getAI() == null) {
227 fleet.setAI(Global.getFactory().createFleetAI(fleet));
228 fleet.setLocation(fleet.getLocation().x, fleet.getLocation().y);
229 }
230
231 if (makeAggressive) {
233 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_MAKE_AGGRESSIVE, true, Math.max(expire, interceptDays));
235 }
236
237 if (makeHostile) {
239 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_MAKE_HOSTILE, true, interceptDays);
240 }
242
243 if (makeLowRepImpact) {
244 Misc.makeLowRepImpact(fleet, "ttSpecial");
245 }
246
247 if (fleet.getAI() instanceof ModularFleetAIAPI) {
248 ((ModularFleetAIAPI)fleet.getAI()).getTacticalModule().setTarget(playerFleet);
249 }
250
251 fleet.addAssignmentAtStart(FleetAssignment.INTERCEPT, playerFleet, interceptDays, null);
252 }
253
254
255 @Override
256 public void optionSelected(String optionText, Object optionData) {
257 super.optionSelected(optionText, optionData);
258 }
259
260
261 public static void main(String[] args) {
262 Boolean b = null;//new Boolean(true);
263 System.out.println(b == true);
264 }
265}
266
267
268
269
270
271
static FactoryAPI getFactory()
Definition Global.java:41
static SectorAPI getSector()
Definition Global.java:65
static CampaignFleetAPI createFleet(FleetParamsV3 params)
static final String MEMORY_KEY_MAKE_AGGRESSIVE_ONE_BATTLE_ONLY
static void initRemnantFleetProperties(Random random, CampaignFleetAPI fleet, boolean dormant)
static void makeFleetInterceptPlayer(CampaignFleetAPI fleet, boolean makeAggressive, boolean makeLowRepImpact, float interceptDays)
static void makeFleetInterceptPlayer(CampaignFleetAPI fleet, boolean makeAggressive, boolean makeLowRepImpact, boolean makeHostile, float interceptDays)
static boolean isAutomated(MutableShipStatsAPI stats)
Definition Misc.java:5491
static void giveStandardReturnToSourceAssignments(CampaignFleetAPI fleet)
Definition Misc.java:3836
static float getDistance(SectorEntityToken from, SectorEntityToken to)
Definition Misc.java:599
static Vector2f getPointAtRadius(Vector2f from, float r)
Definition Misc.java:697
static void makeNoRepImpact(CampaignFleetAPI fleet, String reason)
Definition Misc.java:1468
static void makeLowRepImpact(CampaignFleetAPI fleet, String reason)
Definition Misc.java:1465
CampaignFleetAIAPI createFleetAI(CampaignFleetAPI fleet)
void setAI(CampaignFleetAIAPI campaignFleetAI)
void addAssignmentAtStart(FleetAssignment assignment, SectorEntityToken target, float maxDurationInDays, String actionText, Script onCompletion)
void addEntity(SectorEntityToken entity)
List< CampaignFleetAPI > getFleets()
SectorEntityToken getEntityById(String id)
void setTransponderOn(boolean transponderOn)
void set(String key, Object value)