Starsector API
Loading...
Searching...
No Matches
SlipstreamMercenaryEPEC.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.enc;
2
3import java.util.Random;
4
5import org.lwjgl.util.vector.Vector2f;
6
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.FleetAssignment;
9import com.fs.starfarer.api.campaign.SectorEntityToken;
10import com.fs.starfarer.api.campaign.StarSystemAPI;
11import com.fs.starfarer.api.impl.campaign.ids.Factions;
12import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseIntel;
13import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel;
14import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
15import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn;
16import com.fs.starfarer.api.util.Misc;
17
19
20 @Override
21 public void createEncounter(EncounterManager manager, EncounterPoint point) {
22 Random random = manager.getRandom();
23
24 float f = getProximityFactor(point.getLocInHyper());
25
26 int difficulty = 0;
27 difficulty += (int) Math.round(f * 5f);
28 difficulty += random.nextInt(6);
29
30 FleetCreatorMission m = new FleetCreatorMission(random);
31 m.beginFleet();
32
33 Vector2f loc = point.getLocInHyper();
34 m.createQualityFleet(difficulty, Factions.MERCENARY, loc);
35 m.triggerFleetAllowLongPursuit();
36 m.triggerSetFleetFaction(Factions.INDEPENDENT);
37 m.triggerMakeNoRepImpact();
38 m.triggerFleetSetAllWeapons();
39
40 CampaignFleetAPI fleet = m.createFleet();
41 if (fleet != null) {
42 point.where.addEntity(fleet);
43 fleet.setLocation(point.loc.x, point.loc.y);
44 Vector2f spawnLoc = Misc.getPointWithinRadius(point.loc, 1000f);
45 SectorEntityToken e = point.where.createToken(spawnLoc);
46 fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, e, 30f * random.nextFloat(), "laying in wait");
47 fleet.removeScriptsOfClass(MissionFleetAutoDespawn.class);
48 fleet.addScript(new MissionFleetAutoDespawn(null, fleet));
49 }
50 }
51
53 if (!EncounterManager.EP_TYPE_SLIPSTREAM.equals(point.type)) return 0f;
54
55 float f = getProximityFactor(point.getLocInHyper());
56 if (f > 0) {
57 f = 0.25f + 0.75f * f;
58 }
59 return 10f * f;
60 }
61
62 public static float getProximityFactor(Vector2f locInHyper) {
63 LuddicPathBaseIntel intel = getClosestLuddicPathBase(locInHyper);
64 float f1 = getLuddicPathBaseProximityFactor(intel, locInHyper);
65
66 PirateBaseIntel intel2 = getClosestPirateBase(locInHyper);
67 float f2 = getPirateBaseProximityFactor(intel2, locInHyper);
68
69 float result = Math.max(f1, f2);
70
71 StarSystemAPI ruins = getClosestSystemWithRuins(locInHyper);
72 float f3 = getRuinsProximityFactor(ruins, locInHyper);
73 f3 *= 0.25f;
74 result = Math.max(result, f3);
75
76 return result;
77 }
78
79}
80
81
82
83
84
static float getRuinsProximityFactor(StarSystemAPI system, Vector2f locInHyper)
static float getLuddicPathBaseProximityFactor(LuddicPathBaseIntel base, Vector2f locInHyper)
static PirateBaseIntel getClosestPirateBase(Vector2f locInHyper)
static float getPirateBaseProximityFactor(PirateBaseIntel base, Vector2f locInHyper)
static LuddicPathBaseIntel getClosestLuddicPathBase(Vector2f locInHyper)
float getFrequencyForPoint(EncounterManager manager, EncounterPoint point)
void createEncounter(EncounterManager manager, EncounterPoint point)