Starsector API
Loading...
Searching...
No Matches
PerseanLeagueBlockade.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.group;
2
3import java.util.Random;
4
5import org.lwjgl.util.vector.Vector2f;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.FleetAssignment;
10import com.fs.starfarer.api.campaign.SectorEntityToken;
11import com.fs.starfarer.api.characters.PersonAPI;
12import com.fs.starfarer.api.combat.MutableStatWithTempMods;
13import com.fs.starfarer.api.impl.campaign.NPCHassler;
14import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
15import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
16import com.fs.starfarer.api.impl.campaign.ids.People;
17import com.fs.starfarer.api.impl.campaign.ids.Ranks;
18import com.fs.starfarer.api.impl.campaign.ids.Skills;
19import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel;
20import com.fs.starfarer.api.impl.campaign.intel.events.PerseanLeagueHostileActivityFactor;
21import com.fs.starfarer.api.impl.campaign.intel.group.FGBlockadeAction.FGBlockadeParams;
22import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
23import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
24import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
25import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
26import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
27import com.fs.starfarer.api.ui.TooltipMakerAPI;
28import com.fs.starfarer.api.util.Misc;
29
30
31
32public class PerseanLeagueBlockade extends BlockadeFGI {
33
34 public static float NUM_OTHER_FLEETS_MULT = 0.25f;
35
36 public static final String ARMADA = "$PLB_armada";
37 public static final String SUPPLY = "$PLB_supply";
38 public static final String GENERIC = "$PLB_generic";
39
40 //public static final String ABORTED_OR_ENDING = "$PLB_abortedOrEnding";
41 public static final String BLOCKADING = "$PLB_isBlockading";
42
43 public static String KEY = "$plBlockade_ref";
47
48
49 public PerseanLeagueBlockade(GenericRaidParams params, FGBlockadeParams blockadeParams) {
50 super(params, blockadeParams);
51
53
55 if (reynard != null) {
56 Misc.makeImportant(reynard, "PLB");
57 }
58 }
59
60 @Override
61 protected void notifyEnding() {
62 super.notifyEnding();
63
65
67 if (reynard != null) {
68 Misc.makeUnimportant(reynard, "PLB");
69 }
70 }
71
72 @Override
73 protected void notifyEnded() {
74 super.notifyEnded();
75 }
76
77
78
79
80
81 protected boolean createdArmada = false;
82 protected int supplyFleets = 0;
83
84 @Override
85 protected CampaignFleetAPI createFleet(int size, float damage) {
86
87 Random r = getRandom();
88
89 Vector2f loc = origin.getLocationInHyperspace();
90
92 m.beginFleet();
93
94 boolean armada = size == 10 && !createdArmada;
95 boolean supplyFleet = size == 1 && supplyFleets < 2;
96
97 if (armada) {
98 createdArmada = true;
99
100 m.triggerCreateFleet(FleetSize.MAXIMUM, FleetQuality.SMOD_2, params.factionId, FleetTypes.LEAGUE_ARMADA, loc);
101 m.triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
103
107 m.triggerSetFleetComposition(0f, 0f, 0f, 0f, 0f);
108 m.triggerFleetMakeFaster(true, 1, false);
109
114 } else if (supplyFleet) {
115 supplyFleets++;
116
117 int total = 0;
118 for (Integer i : params.fleetSizes) total += i;
119
120 FleetSize supplyFleetSize = FleetSize.MEDIUM;
121 if (total < 50) {
122 supplyFleetSize = FleetSize.SMALL;
123 } else if (total >= 80) {
124 supplyFleetSize = FleetSize.LARGE;
125 }
126
127 m.triggerCreateFleet(supplyFleetSize, FleetQuality.DEFAULT, params.factionId, FleetTypes.SUPPLY_FLEET, loc);
128 m.triggerSetFleetOfficers(OfficerNum.DEFAULT, OfficerQuality.DEFAULT);
130
132 m.triggerFleetMakeFaster(true, 0, false);
133
134 m.triggerSetFleetComposition(0.5f, 0.5f, 0.1f, 0f, 0.1f);
135 } else {
136 m.createFleet(params.style, size, params.factionId, loc);
138 }
139
140 m.setFleetSource(params.source);
142 m.setFleetDamageTaken(damage);
143
147
148
149 CampaignFleetAPI fleet = m.createFleet();
150
151 if (fleet != null && !armada && !supplyFleet) {
152 fleet.addScript(new NPCHassler(fleet, getTargetSystem()));
153 }
154
155 if (fleet != null && armada) {
157 setNeverStraggler(fleet);
158 }
159
160 return fleet;
161 }
162
163// @Override
164// public void abort() {
165// if (!isAborted()) {
166// for (CampaignFleetAPI curr : getFleets()) {
167// curr.getMemoryWithoutUpdate().set(ABORTED_OR_ENDING, true);
168// }
169// }
170// super.abort();
171// }
172
173
174
175 @Override
176 public void advance(float amount) {
177 super.advance(amount);
178
179 if (isSpawnedFleets()) {
180 if (isEnded() || isEnding() || isAborted() || isCurrent(RETURN_ACTION)) {
181 for (CampaignFleetAPI curr : getFleets()) {
182 //curr.getMemoryWithoutUpdate().set(ABORTED_OR_ENDING, true);
183 curr.getMemoryWithoutUpdate().set(BLOCKADING, false);
184 }
185 return;
186 }
187
189 for (CampaignFleetAPI curr : getFleets()) {
190 curr.getMemoryWithoutUpdate().set(BLOCKADING, true);
191// curr.getMemoryWithoutUpdate().set(ARMADA, true);
192// curr.getMemoryWithoutUpdate().set(SUPPLY, true);
193 }
194 }
195 }
196 }
197
198 @Override
199 protected void periodicUpdate() {
200 super.periodicUpdate();
201
202 if (HostileActivityEventIntel.get() == null) { // ???
203 abort();
204 return;
205 }
206
207 FGAction action = getCurrentAction();
208 if (action instanceof FGBlockadeAction) {
210 stat.addTemporaryModMult(1f, "PLBlockade", null, NUM_OTHER_FLEETS_MULT);
211 }
212
213 if (!isSpawnedFleets() || isSpawning()) return;
214
215 int armada = 0;
216 int supply = 0;
217 for (CampaignFleetAPI curr : getFleets()) {
218 if (curr.getMemoryWithoutUpdate().getBoolean(ARMADA)) {
219 armada++;
220 }
221 if (curr.getMemoryWithoutUpdate().getBoolean(SUPPLY)) {
222 supply++;
223 }
224 }
225
226 if (armada <= 0 || supply <= 0) {
227 abort();
228 return;
229 }
230
231 if (action instanceof FGBlockadeAction) {
232 FGBlockadeAction blockade = (FGBlockadeAction) action;
233 if (blockade.getPrimary() != null) {
234 int supplyIndex = 0;
235 for (CampaignFleetAPI curr : getFleets()) {
236 if (blockade.getPrimary().getContainingLocation() != curr.getContainingLocation()) {
237 continue;
238 }
239 if (curr.getMemoryWithoutUpdate().getBoolean(SUPPLY)) {
240 Misc.setFlagWithReason(curr.getMemoryWithoutUpdate(), MemFlags.FLEET_BUSY, curr.getId(), true, -1f);
241
242 curr.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_FLEET_DO_NOT_GET_SIDETRACKED, true, 0.4f);
243 curr.clearAssignments();
244
245 SectorEntityToken resupplyLoc = blockade.getPrimary();
246 if (supplyIndex == 1) {
247 for (SectorEntityToken jp : blockade.getBlockadePoints()) {
248 if (jp != resupplyLoc) {
249 resupplyLoc = jp;
250 break;
251 }
252 }
253 }
254 curr.addAssignment(FleetAssignment.ORBIT_PASSIVE, resupplyLoc, 3f,
255 "standing by to provide resupply");
256 supplyIndex++;
257 } else if (curr.getMemoryWithoutUpdate().getBoolean(ARMADA)) {
258
259 } else {
260 curr.getMemoryWithoutUpdate().set(MemFlags.WILL_HASSLE_PLAYER, true, 2f);
261 curr.getMemoryWithoutUpdate().set(MemFlags.HASSLE_TYPE, PerseanLeagueHostileActivityFactor.HASSLE_REASON, 2f);
262 }
263 }
264 }
265 }
266 }
267
268
269
270 @Override
271 protected void addPostAssessmentSection(TooltipMakerAPI info, float width, float height, float opad) {
272
273 info.addPara("The blockading forces are led by a Grand Armada and "
274 + "supported by a pair of supply fleets.", opad);
275// bullet(info);
276// info.addPara("Forcing the Grand Armada to withdraw will defeat the blockade", opad);
277// info.addPara("Forcing both supply fleets to withdraw will defeat the blockade", 0f);
278// unindent(info);
279 }
280
281
282
283
284}
285
286
287
288
static SectorAPI getSector()
Definition Global.java:65
void addTemporaryModMult(float durInDays, String source, String desc, float value)
static final String MEMORY_KEY_FLEET_DO_NOT_GET_SIDETRACKED
static PersonAPI getPerson(String id)
Definition People.java:107
PerseanLeagueBlockade(GenericRaidParams params, FGBlockadeParams blockadeParams)
void addPostAssessmentSection(TooltipMakerAPI info, float width, float height, float opad)
void triggerSetFleetComposition(float freighterMult, float tankerMult, float transportMult, float linerMult, float utilityMult)
void triggerFleetMakeFaster(boolean navigationSkill, int numTugs, boolean allowLongPursuit)
void triggerSetFleetDoctrineQuality(int officerQuality, int shipQuality, int numShips)
void triggerCreateFleet(FleetSize size, FleetQuality quality, String factionId, String type, StarSystemAPI roughlyWhere)
static void makeImportant(SectorEntityToken entity, String reason)
Definition Misc.java:4051
static void makeUnimportant(SectorEntityToken entity, String reason)
Definition Misc.java:4077
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
Definition Misc.java:1439
void addScript(EveryFrameScript script)
void set(String key, Object value)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)