Starsector API
Loading...
Searching...
No Matches
TTMercenaryReversedAttack.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.group;
2
3import java.util.LinkedHashSet;
4import java.util.Random;
5import java.util.Set;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.InteractionDialogAPI;
10import com.fs.starfarer.api.campaign.SectorEntityToken;
11import com.fs.starfarer.api.campaign.StarSystemAPI;
12import com.fs.starfarer.api.campaign.econ.Industry;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.campaign.rules.MemoryAPI;
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.ids.MemFlags;
18import com.fs.starfarer.api.impl.campaign.ids.Tags;
19import com.fs.starfarer.api.impl.campaign.intel.events.TriTachyonHostileActivityFactor;
20import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TTCRMercenariesBribedFactor;
21import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TriTachyonCommerceRaiding;
22import com.fs.starfarer.api.impl.campaign.intel.group.FGRaidAction.FGRaidType;
23import com.fs.starfarer.api.ui.SectorMapAPI;
24import com.fs.starfarer.api.util.IntervalUtil;
25import com.fs.starfarer.api.util.Misc;
26
27
28
30
31 public static final String TTMAR_FLEET = "$TTMAR_fleet";
32 public static final String TTMAR_COMMAND = "$TTMAR_command";
33
34 public static String KEY = "$TTMAR_ref";
35 public static TTMercenaryReversedAttack get() {
36 return (TTMercenaryReversedAttack) Global.getSector().getMemoryWithoutUpdate().get(KEY);
37 }
38
39
40
41
42 public static void sendReversedAttack(InteractionDialogAPI dialog) {
44 if (attack == null || attack.isEnding()) return;
45
46 Random random = new Random();
47
48 StarSystemAPI target = TriTachyonHostileActivityFactor.getPrimaryTriTachyonSystem();
49 if (target == null) return;
50
51 GenericRaidParams params = new GenericRaidParams(new Random(), false);
52 //params.makeFleetsHostile = true; // irrelevant since fleets already spawned
53
54 //params.source = attack.params.source;
55
56 CampaignFleetAPI pf = Global.getSector().getPlayerFleet();
57 SectorEntityToken origin = pf.getContainingLocation().createToken(pf.getLocation());
58
59 MarketAPI fake = Global.getFactory().createMarket("fake", "an independent world", 5);
60 fake.setPrimaryEntity(origin);
61 origin.setMarket(fake);
62 params.source = fake;
63
64 params.prepDays = 0f;
65 params.payloadDays = 27f + 7f * random.nextFloat();
66
67 params.raidParams.where = target;
68 params.raidParams.type = FGRaidType.SEQUENTIAL;
69
70 Set<String> disrupt = new LinkedHashSet<String>();
71 for (MarketAPI market : Misc.getMarketsInLocation(target, Factions.TRITACHYON)) {
72 params.raidParams.allowedTargets.add(market);
73 params.raidParams.allowNonHostileTargets = true;
74 for (Industry ind : market.getIndustries()) {
75 if (ind.getSpec().hasTag(Industries.TAG_UNRAIDABLE)) continue;
76 disrupt.add(ind.getId());
77 }
78 }
79
80 params.raidParams.disrupt.addAll(disrupt);
81 params.raidParams.raidsPerColony = Math.min(disrupt.size(), 4);
82 if (disrupt.isEmpty()) {
83 params.raidParams.raidsPerColony = 2;
84 }
85
86 if (params.raidParams.allowedTargets.isEmpty()) {
87 return;
88 }
89
90 params.factionId = Factions.INDEPENDENT;
91
92
94
95// CampaignFleetAPI pf = Global.getSector().getPlayerFleet();
96// SectorEntityToken origin = pf.getContainingLocation().createToken(pf.getLocation());
97// reverse.setOrigin(origin);
98
99
100 reverse.setSpawnedFleets(true);
101 reverse.setDoIncrementalSpawn(false);
102 reverse.getFleets().addAll(attack.getFleets());
103 reverse.setTotalFPSpawned(attack.getTotalFPSpawned());
104
106
107 reverse.getRoute().setExtra(attack.getRoute().getExtra());
108
109 // the raid "source" may be a tritach market
110 // so, make the fleets scatter/return to their individual sourceMarket instead
112
113 attack.finish(false);
114 attack.getFleets().clear();
115 attack.endImmediately();
116
117 String reasonTTMA = "TTMA";
118 String reasonTTMAR = "TTMAR";
119 for (CampaignFleetAPI fleet : reverse.getFleets()) {
120 MemoryAPI mem = fleet.getMemoryWithoutUpdate();
121 fleet.clearAssignments();
122 mem.unset(Misc.FLEET_RETURNING_TO_DESPAWN);
123
124 mem.set(TTMAR_FLEET, true);
125 if (mem.getBoolean(TTMercenaryAttack.TTMA_COMMAND)) {
126 mem.set(TTMAR_COMMAND, true);
127 }
128
130 mem.unset(TTMercenaryAttack.TTMA_FLEET);
131
132 Misc.makeNonHostileToFaction(fleet, Factions.DIKTAT, false, -1);
133 Misc.makeNonHostileToFaction(fleet, Factions.TRITACHYON, false, -1);
134
135
136 Misc.setFlagWithReason(mem, MemFlags.MEMORY_KEY_MAKE_HOSTILE,
137 reasonTTMA, false, -1f);
138 Misc.setFlagWithReason(mem, MemFlags.MEMORY_KEY_MAKE_NON_HOSTILE,
139 reasonTTMAR, true, -1f);
140 }
141
142
143 // not player targeted, so needs to be "important" so the player gets updates
144 reverse.setImportant(true);
145
146 Global.getSector().getIntelManager().addIntel(reverse, false, dialog.getTextPanel());
147
148 TriTachyonCommerceRaiding.addFactorCreateIfNecessary(new TTCRMercenariesBribedFactor(), dialog);
149 }
150
151
152
153 protected IntervalUtil interval = new IntervalUtil(0.1f, 0.3f);
154
155
156 public TTMercenaryReversedAttack(GenericRaidParams params) {
157 super(params);
158
159 Global.getSector().getMemoryWithoutUpdate().set(KEY, this);
160 }
161
162 @Override
163 protected void notifyEnding() {
164 super.notifyEnding();
165
166 Global.getSector().getMemoryWithoutUpdate().unset(KEY);
167 }
168
169 @Override
170 protected void notifyEnded() {
171 super.notifyEnded();
172 }
173
174
175 @Override
176 public String getNoun() {
177 return "mercenary attack";
178 }
179
180 @Override
181 public String getForcesNoun() {
182 return super.getForcesNoun();
183 }
184
185
186 @Override
187 public String getBaseName() {
188 return "Mercenary Counter-raid";
189 }
190
191 @Override
192 public void abort() {
193 if (!isAborted()) {
194 for (CampaignFleetAPI curr : getFleets()) {
195 curr.getMemoryWithoutUpdate().unset(TTMAR_FLEET);
196 }
197 }
198 super.abort();
199 }
200
201
202 @Override
203 public void advance(float amount) {
204 super.advance(amount);
205
206 float days = Misc.getDays(amount);
207 interval.advance(days);
208
209 if (interval.intervalElapsed()) {
211 for (CampaignFleetAPI curr : getFleets()) {
212 Misc.makeHostileToFaction(curr, Factions.TRITACHYON, 1f);
213 }
214 }
215 }
216 }
217
218 @Override
219 public Set<String> getIntelTags(SectorMapAPI map) {
220 Set<String> tags = super.getIntelTags(map);
221 tags.remove(Tags.INTEL_COLONIES);
222 return tags;
223 }
224
225
226}
227
228
229
230
static FactoryAPI getFactory()
Definition Global.java:35
static SectorAPI getSector()
Definition Global.java:59
MarketAPI createMarket(String id, String name, int size)