1package com.fs.starfarer.api.impl.campaign.procgen.themes;
3import java.util.Random;
5import org.lwjgl.util.vector.Vector2f;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.SectorEntityToken;
10import com.fs.starfarer.api.campaign.StarSystemAPI;
11import com.fs.starfarer.api.combat.BattleCreationContext;
12import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.BaseFIDDelegate;
13import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.FIDConfig;
14import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.FIDConfigGen;
15import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
16import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
17import com.fs.starfarer.api.impl.campaign.fleets.SeededFleetManager;
18import com.fs.starfarer.api.impl.campaign.ids.Abilities;
19import com.fs.starfarer.api.impl.campaign.ids.Factions;
20import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
21import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
22import com.fs.starfarer.api.impl.campaign.ids.Tags;
23import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
24import com.fs.starfarer.api.util.Misc;
25import com.fs.starfarer.api.util.WeightedRandomPicker;
99 public static class RemnantFleetInteractionConfigGen
implements FIDConfigGen {
100 public FIDConfig createConfig() {
101 FIDConfig config =
new FIDConfig();
102 config.showTransponderStatus =
false;
103 config.delegate =
new BaseFIDDelegate() {
159 public void battleContextCreated(InteractionDialogAPI dialog, BattleCreationContext bcc) {
160 bcc.aiRetreatAllowed =
false;
180 for (
int i = 0; i < num; i++) {
188 Random random =
new Random(seed);
192 String type = FleetTypes.PATROL_SMALL;
193 if (combatPoints > 8) type = FleetTypes.PATROL_MEDIUM;
194 if (combatPoints > 16) type = FleetTypes.PATROL_LARGE;
198 FleetParamsV3 params =
new FleetParamsV3(
199 system.getLocation(),
211 params.withOfficers =
false;
212 params.random = random;
214 CampaignFleetAPI fleet = FleetFactoryV3.createFleet(params);
215 if (fleet ==
null)
return null;
217 system.addEntity(fleet);
218 fleet.setFacing(random.nextFloat() * 360f);
224 for (SeededFleet f : fleets) {
225 if (f.fleet !=
null) numActive++;
234 if (target !=
null) {
238 fleet.setCircularOrbit(target,
239 random.nextFloat() * 360f,
240 fleet.getRadius() + target.getRadius() + 100f + 100f * random.nextFloat(),
241 25f + 5f * random.nextFloat());
243 Vector2f loc = Misc.getPointAtRadius(
new Vector2f(), 4000f, random);
244 fleet.setLocation(loc.x, loc.y);
254 public static SectorEntityToken
pickEntityToGuard(Random random, StarSystemAPI system, CampaignFleetAPI fleet) {
255 WeightedRandomPicker<SectorEntityToken> picker =
new WeightedRandomPicker<SectorEntityToken>(random);
257 for (SectorEntityToken entity : system.getEntitiesWithTag(Tags.SALVAGEABLE)) {
259 if (entity.hasTag(Tags.NEUTRINO_HIGH)) w = 3f;
260 if (entity.hasTag(Tags.NEUTRINO_LOW)) w = 0.33f;
261 picker.add(entity, w);
264 for (SectorEntityToken entity : system.getJumpPoints()) {
265 picker.add(entity, 1f);
268 return picker.pick();
274 if (random ==
null) random =
new Random();
276 fleet.removeAbility(Abilities.EMERGENCY_BURN);
277 fleet.removeAbility(Abilities.SENSOR_BURST);
278 fleet.removeAbility(Abilities.GO_DARK);
281 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_ON,
true);
282 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_PATROL_FLEET,
true);
283 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_ALLOW_LONG_PURSUIT,
true);
284 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_MAKE_HOLD_VS_STRONGER,
true);
291 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_NO_JUMP,
true);
294 fleet.setTransponderOn(
false);
298 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_MAKE_ALLOW_DISENGAGE,
true);
299 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_MAKE_AGGRESSIVE,
true);
301 fleet.setNullAIActionText(
"dormant");
307 long salvageSeed = random.nextLong();
308 fleet.getMemoryWithoutUpdate().set(MemFlags.SALVAGE_SEED, salvageSeed);
312 fleet.getMemoryWithoutUpdate().set(MemFlags.FLEET_INTERACTION_DIALOG_CONFIG_OVERRIDE_GEN,
313 new RemnantFleetInteractionConfigGen());
static void addRemnantInteractionConfig(CampaignFleetAPI fleet)
static void initRemnantFleetProperties(Random random, CampaignFleetAPI fleet, boolean dormant)
static SectorEntityToken pickEntityToGuard(Random random, StarSystemAPI system, CampaignFleetAPI fleet)
RemnantSeededFleetManager(StarSystemAPI system, int minFleets, int maxFleets, int minPts, int maxPts, float activeChance)
CampaignFleetAPI spawnFleet(long seed)