Starsector API
Loading...
Searching...
No Matches
SlipstreamPirateEPEC.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.ids.MemFlags;
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 PirateBaseIntel intel = getClosestPirateBase(point.getLocInHyper());
25 float f = getProximityFactor(point.getLocInHyper()); // not just bases - ruins/core, too
26
27 int difficulty = 0;
28 difficulty += (int) Math.round(f * 3f);
29 if (intel != null) {
30 switch (intel.getTier()) {
31 case TIER_1_1MODULE: difficulty += 1; break;
32 case TIER_2_1MODULE: difficulty += 1; break;
33 case TIER_3_2MODULE: difficulty += 2; break;
34 case TIER_4_3MODULE: difficulty += 3; break;
35 case TIER_5_3MODULE: difficulty += 4; break;
36 }
37 }
38 difficulty += random.nextInt(4);
39
40 FleetCreatorMission m = new FleetCreatorMission(random);
41 m.beginFleet();
42
43 Vector2f loc = point.getLocInHyper();
44 String factionId = Factions.PIRATES;
45 if (intel != null && intel.getMarket() != null) factionId = intel.getMarket().getFactionId();
46 m.createStandardFleet(difficulty, factionId, loc);
47 m.triggerSetPirateFleet();
48 m.triggerMakeLowRepImpact();
49 m.triggerFleetAllowLongPursuit();
50 if (intel != null && intel.getMarket() != null) {
51 m.triggerSetFleetMemoryValue(MemFlags.MEMORY_KEY_SOURCE_MARKET, intel.getMarket().getId());
52 }
53
54 CampaignFleetAPI fleet = m.createFleet();
55 if (fleet != null) {
56 point.where.addEntity(fleet);
57 fleet.setLocation(point.loc.x, point.loc.y);
58 Vector2f spawnLoc = Misc.getPointWithinRadius(point.loc, 1000f);
59 SectorEntityToken e = point.where.createToken(spawnLoc);
60 fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, e, 30f * random.nextFloat(), "laying in wait");
61 fleet.removeScriptsOfClass(MissionFleetAutoDespawn.class);
62 fleet.addScript(new MissionFleetAutoDespawn(null, fleet));
63 }
64 }
65
67 if (!EncounterManager.EP_TYPE_SLIPSTREAM.equals(point.type)) return 0f;
68
69 PirateBaseIntel intel = getClosestPirateBase(point.getLocInHyper());
70 float f = getProximityFactor(point.getLocInHyper()); // not just bases - ruins/core, too
71
72 if (intel != null && f > 0) {
73 f = 0.25f + 0.75f * f;
74 switch (intel.getTier()) {
75 case TIER_1_1MODULE: f *= 1f; break;
76 case TIER_2_1MODULE: f *= 2f; break;
77 case TIER_3_2MODULE: f *= 3f; break;
78 case TIER_4_3MODULE: f *= 4f; break;
79 case TIER_5_3MODULE: f *= 5f; break;
80 }
81 }
82 return 10f * f;
83 }
84
85
86 public static float getProximityFactor(Vector2f locInHyper) {
87 PirateBaseIntel intel = getClosestPirateBase(locInHyper);
88 float f = getPirateBaseProximityFactor(intel, locInHyper);
89
90 float f2 = getCoreProximityFactor(locInHyper);
91 f2 *= 0.5f;
92 if (f2 > f) f = f2;
93
94 StarSystemAPI ruins = getClosestSystemWithRuins(locInHyper);
95 float f3 = getRuinsProximityFactor(ruins, locInHyper);
96 f3 *= 0.25f;
97 if (f3 > f) f = f3;
98
99 return f;
100 }
101}
102
103
104
105
106
static float getRuinsProximityFactor(StarSystemAPI system, Vector2f locInHyper)
static PirateBaseIntel getClosestPirateBase(Vector2f locInHyper)
static float getPirateBaseProximityFactor(PirateBaseIntel base, Vector2f locInHyper)
void createEncounter(EncounterManager manager, EncounterPoint point)
float getFrequencyForPoint(EncounterManager manager, EncounterPoint point)