Starsector API
Loading...
Searching...
No Matches
TestFleetGroupIntel.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.group;
2
3import java.awt.Color;
4import java.util.List;
5import java.util.Random;
6
7import org.lwjgl.util.vector.Vector2f;
8
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.FactionAPI;
12import com.fs.starfarer.api.campaign.SectorEntityToken;
13import com.fs.starfarer.api.campaign.StarSystemAPI;
14import com.fs.starfarer.api.campaign.econ.MarketAPI;
15import com.fs.starfarer.api.impl.campaign.ids.Factions;
16import com.fs.starfarer.api.impl.campaign.ids.Industries;
17import com.fs.starfarer.api.impl.campaign.intel.group.FGRaidAction.FGRaidParams;
18import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
19import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMission;
20import com.fs.starfarer.api.ui.Alignment;
21import com.fs.starfarer.api.ui.TooltipMakerAPI;
22import com.fs.starfarer.api.util.Misc;
23import com.fs.starfarer.api.util.WeightedRandomPicker;
24
26
27 public static String PREPARE_ACTION = "prepare_action";
28 public static String TRAVEL_ACTION = "travel_action";
29 public static String RAID_ACTION = "raid_action";
30 public static String RETURN_ACTION = "return_action";
31
32
33 protected SectorEntityToken origin;
35
37 super();
38
39 MarketAPI garnir = Global.getSector().getEconomy().getMarket("corvus_IIIa");
40 MarketAPI jangala = Global.getSector().getEconomy().getMarket("jangala");
41 MarketAPI gilead = Global.getSector().getEconomy().getMarket("gilead");
42 MarketAPI asher = Global.getSector().getEconomy().getMarket("asher");
43
44 //gilead = Global.getSector().getEconomy().getMarket("market_system_192c:planet_1");
45
46// gilead = jangala;
47// addAction(new FGWaitAction(jangala.getPrimaryEntity(), 1f, "preparing for expedition"));
48// addAction(new FGTravelAction(jangala.getPrimaryEntity(), gilead.getPrimaryEntity().getStarSystem().getCenter()));
49// addAction(new FGTravelAction(gilead.getPrimaryEntity(), jangala.getPrimaryEntity()));
50
51 setFaction(Factions.PIRATES);
52 addAction(new FGWaitAction(garnir.getPrimaryEntity(), 1f, "preparing for raid"), PREPARE_ACTION);
53 addAction(new FGTravelAction(garnir.getPrimaryEntity(),
54 gilead.getPrimaryEntity().getStarSystem().getCenter()),
56// addAction(new FGWaitAction(gilead.getPrimaryEntity().getStarSystem().getCenter(), 5f,
57// "preparing for raid"), POST_RAID_ACTION);
58
59
60 FGRaidParams params = new FGRaidParams();
61 params.where = gilead.getPrimaryEntity().getStarSystem();
62 params.allowedTargets.add(gilead);
63 params.allowedTargets.add(asher);
64 //params.setBombardment(BombardType.SATURATION);
65 params.setDisrupt(Industries.FARMING, Industries.MEGAPORT);
66
67 raidAction = new FGRaidAction(params, 3f);
69
70 addAction(new FGTravelAction(gilead.getPrimaryEntity().getStarSystem().getCenter(),
71 garnir.getPrimaryEntity().getStarSystem().getCenter()),
73
74
75 origin = garnir.getPrimaryEntity();
76
77 createRoute(Factions.PIRATES, 30, 7, null);
78 }
79
80 protected void spawnFleets() {
81 MarketAPI garnir = Global.getSector().getEconomy().getMarket("corvus_IIIa");
82 Vector2f loc = garnir.getLocationInHyperspace();
83
84 Float damage = null;
85 if (route != null && route.getExtra() != null) {
86 damage = route.getExtra().damage;
87 }
88 if (damage == null) damage = 0f;
89
90 String factionId;
91 factionId = Factions.LUDDIC_CHURCH;
92 factionId = Factions.PIRATES;
93
94
95 WeightedRandomPicker<Integer> picker = new WeightedRandomPicker<Integer>(getRandom());
96 picker.add(3);
97 picker.add(4);
98 picker.add(6);
99 picker.add(7);
100 picker.add(9);
101 picker.add(10);
102 picker.add(10);
103
104 float total = 0;
105 for (Integer i : picker.getItems()) total += i;
106
107 float spawnsToSkip = total * damage * 0.5f;
108 float skipped = 0f;
109
110
111 while (!picker.isEmpty()) {
112 Integer size = picker.pickAndRemove();
113 if (skipped < spawnsToSkip && getRandom().nextFloat() < damage) {
114 skipped += size;
115 continue;
116 }
117
118 FleetCreatorMission m = new FleetCreatorMission(new Random());
119 m.beginFleet();
120
121 m.createQualityFleet(size, factionId, loc);
122 m.setFleetSource(garnir);
123 m.setFleetDamageTaken(damage);
124 //m.triggerSetFleetFaction();
125 //m.triggerFleetAllowLongPursuit();
126 m.triggerSetPirateFleet();
127 //m.triggerSetWarFleet();
128 m.triggerMakeNoRepImpact();
129
130 CampaignFleetAPI fleet = m.createFleet();
131 if (fleet != null && route != null) {
132 setLocationAndCoordinates(fleet, route.getCurrent());
133 fleets.add(fleet);
134 }
135 }
136
137 }
138
139 protected void addNonUpdateBulletPoints(TooltipMakerAPI info, Color tc, Object param, ListInfoMode mode, float initPad) {
140 Color h = Misc.getHighlightColor();
141 FGAction curr = getCurrentAction();
142 StarSystemAPI system = raidAction.getParams().where;
143
144 float untilDeparture = getETAUntil(TRAVEL_ACTION);
145 float untilRaid = getETAUntil(RAID_ACTION);
146 float untilReturn = getETAUntil(RETURN_ACTION, true);
147
148 if (mode == ListInfoMode.MESSAGES) { // initial notification only, not updates
149 info.addPara("Targeting the " + system.getNameWithLowercaseTypeShort(), tc, initPad);
150 initPad = 0f;
151 }
152 if (untilDeparture > 0) {
153 addETABulletPoints(null, null, false, untilDeparture, ETAType.DEPARTURE, info, tc, initPad);
154 }
155 if (untilRaid > 0 && getSource().getContainingLocation() != system) {
156 addETABulletPoints(system.getNameWithLowercaseTypeShort(), null, false, untilRaid, ETAType.ARRIVING,
157 info, tc, initPad);
158 initPad = 0f;
159 }
160 if (untilReturn > 0 && isSucceeded() && getSource().getContainingLocation() != system) {
161 StarSystemAPI from = getSource().getStarSystem();
162
163 addETABulletPoints(from.getNameWithLowercaseTypeShort(), null, false, untilReturn, ETAType.RETURNING,
164 info, tc, initPad);
165 initPad = 0f;
166 }
167 if (mode == ListInfoMode.INTEL && curr != null && curr.getId().equals(RAID_ACTION)) {
168 info.addPara("Operating in the " + system.getNameWithLowercaseTypeShort(), tc, initPad);
169 initPad = 0f;
170 }
171 if (mode != ListInfoMode.IN_DESC && isEnding()) {
172 if (!isSucceeded()) {
173 info.addPara("The raiding forces have been defeated and scatter", tc, initPad);
174 }
175 }
176 }
177
178 protected void addUpdateBulletPoints(TooltipMakerAPI info, Color tc, Object param, ListInfoMode mode, float initPad) {
179 StarSystemAPI system = raidAction.getParams().where;
180 //Color h = Misc.getHighlightColor();
181 if (ABORT_UPDATE.equals(param)) {
182 info.addPara("The raiding forces have been defeated and scatter", tc, initPad);
183 } else if (PREPARE_ACTION.equals(param)) {
184 float untilRaid = getETAUntil(RAID_ACTION);
185 addETABulletPoints(system.getNameWithLowercaseTypeShort(), null, true, untilRaid, ETAType.ARRIVING,
186 info, tc, initPad);
187 } else if (TRAVEL_ACTION.equals(param)) {
188 addArrivedBulletPoint(system.getNameWithLowercaseTypeShort(), null, info, tc, initPad);
189 } else if (RAID_ACTION.equals(param)) {
190 if (isSucceeded()) {
191 info.addPara("The raiding forces are withdrawing", tc, initPad);
192 } else {
193 info.addPara("The raiding forces have been defeated and scatter", tc, initPad);
194 }
195 }
196 }
197
198 @Override
200 if (RETURN_ACTION.equals(action.getId())) return false;
201 if (RAID_ACTION.equals(action.getId())) {
202 // if it failed, will send an update on abort() instead
203 return isSucceeded();
204 }
205 if (TRAVEL_ACTION.equals(action.getId())) {
206 // no update for "arriving" when traveling from one planet in-system to another
207 return getSource().getContainingLocation() != raidAction.getParams().where;
208 }
209
210 return super.shouldSendIntelUpdateWhenActionFinished(action);
211 }
212
213 protected void addBasicDescription(TooltipMakerAPI info, float width, float height, float opad) {
214 info.addImage(getFaction().getLogo(), width, 128, opad);
215
216 StarSystemAPI system = raidAction.getParams().where;
217
218 info.addPara(Misc.ucFirst(faction.getPersonNamePrefixAOrAn()) + " %s raid against "
219 + "the " + system.getNameWithLowercaseTypeShort() + ".", opad,
220 faction.getBaseUIColor(), faction.getEntityNamePrefix());
221 }
222
223 protected void addAssessmentSection(TooltipMakerAPI info, float width, float height, float opad) {
224 Color h = Misc.getHighlightColor();
225
226 FactionAPI faction = getFaction();
227
228 List<MarketAPI> targets = raidAction.getParams().allowedTargets;
229
230 if (!isEnding() && !isSucceeded()) {
231 info.addSectionHeading("Assessment",
232 faction.getBaseUIColor(), faction.getDarkUIColor(), Alignment.MID, opad);
233 if (targets.isEmpty()) {
234 info.addPara("There are no colonies for the raid to target in the system.", opad);
235 } else {
236 StarSystemAPI system = raidAction.getParams().where;
237
238 boolean potentialDanger = addStrengthDesc(info, opad, system, "raiding forces",
239 "the raid is unlikely to find success",
240 "the raid's outcome is uncertain",
241 "the raid is likely to find success");
242
243 if (potentialDanger) {
244 showMarketsInDanger(info, opad, width, system, targets,
245 "should be safe from the raid",
246 "are at risk of being raided and losing stability:",
247 "losing stability");
248 }
249 }
250 }
251 }
252
253
254 protected void addStatusSection(TooltipMakerAPI info, float width, float height, float opad) {
255 FGAction curr = getCurrentAction();
256
257 boolean showStatus = curr != null || isEnding() || isSucceeded();
258
259 if (showStatus) {
260 info.addSectionHeading("Status",
261 faction.getBaseUIColor(), faction.getDarkUIColor(), Alignment.MID, opad);
262 if (isEnding() && !isSucceeded()) {
263 info.addPara("The raiding forces have been defeated and any "
264 + "remaining ships are retreating in disarray.", opad);
265 } else if (isEnding() || isSucceeded()) {
266 info.addPara("The raid was successful and the raiding forces are withdrawing.", opad);
267 } else if (curr != null) {
268 //StarSystemAPI from = getSource().getStarSystem();
269 StarSystemAPI to = raidAction.getParams().where;
270 if (PREPARE_ACTION.equals(curr.getId())) {
271 BaseHubMission.addStandardMarketDesc("Making preparations in orbit around",
272 getSource().getMarket(), info, opad);
273 } else if (TRAVEL_ACTION.equals(curr.getId())) {
274 info.addPara("Traveling from " + getSource().getMarket().getName() + " to the " +
275 to.getNameWithLowercaseTypeShort() + ".", opad);
276 } else if (RAID_ACTION.equals(curr.getId())) {
277 info.addPara("Conducting operations in the " +
278 to.getNameWithLowercaseTypeShort() + ".", opad);
279 }
280 }
281 }
282 }
283
284
285 public String getBaseName() {
286 return Misc.ucFirst(getFaction().getPersonNamePrefix()) + " Raid";
287 }
288
289 public boolean isSucceeded() {
291 }
292
293 protected SectorEntityToken getSource() {
294 return origin;
295 }
296
297 protected SectorEntityToken getDestination() {
298 return raidAction.getParams().where.getHyperspaceAnchor();
299 }
300
301 @Override
302 protected boolean isPlayerTargeted() {
303 return true;
304 }
305}
306
307
308
309
static SectorAPI getSector()
Definition Global.java:59
void addArrivedBulletPoint(String destName, Color destHL, TooltipMakerAPI info, Color tc, float initPad)
void createRoute(String factionId, int approximateTotalDifficultyPoints, int approximateNumberOfFleets, Object custom)
void addETABulletPoints(String destName, Color destHL, boolean withDepartedText, float eta, ETAType type, TooltipMakerAPI info, Color tc, float initPad)
void showMarketsInDanger(TooltipMakerAPI info, float opad, float width, StarSystemAPI system, List< MarketAPI > targets, String safeStr, String riskStr, String riskStrHighlight)
boolean addStrengthDesc(TooltipMakerAPI info, float opad, StarSystemAPI system, String forces, String outcomeFailure, String outcomeUncertain, String outcomeSuccess)
static void setLocationAndCoordinates(CampaignFleetAPI fleet, RouteSegment current)
void addNonUpdateBulletPoints(TooltipMakerAPI info, Color tc, Object param, ListInfoMode mode, float initPad)
void addUpdateBulletPoints(TooltipMakerAPI info, Color tc, Object param, ListInfoMode mode, float initPad)
void addBasicDescription(TooltipMakerAPI info, float width, float height, float opad)
void addStatusSection(TooltipMakerAPI info, float width, float height, float opad)
void addAssessmentSection(TooltipMakerAPI info, float width, float height, float opad)