Starsector API
Loading...
Searching...
No Matches
SlipstreamLuddicPathEPEC.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.impl.campaign.ids.Factions;
11import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
12import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseIntel;
13import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
14import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn;
15import com.fs.starfarer.api.util.Misc;
16
18
19 @Override
20 public void createEncounter(EncounterManager manager, EncounterPoint point) {
21 Random random = manager.getRandom();
22
23 LuddicPathBaseIntel intel = getClosestLuddicPathBase(point.getLocInHyper());
24 float f = getProximityFactor(point.getLocInHyper());
25
26 int difficulty = 0;
27 difficulty += (int) Math.round(f * 3f);
28 if (intel != null) {
29 if (intel.isLarge()) {
30 difficulty += 4;
31 } else {
32 difficulty += 2;
33 }
34 }
35 difficulty += random.nextInt(4);
36
37 FleetCreatorMission m = new FleetCreatorMission(random);
38 m.beginFleet();
39
40 Vector2f loc = point.getLocInHyper();
41 m.createStandardFleet(difficulty, Factions.LUDDIC_PATH, loc);
42 m.triggerSetPirateFleet();
43 m.triggerMakeLowRepImpact();
44 m.triggerFleetAllowLongPursuit();
45 if (intel != null && intel.getMarket() != null) {
46 m.triggerSetFleetMemoryValue(MemFlags.MEMORY_KEY_SOURCE_MARKET, intel.getMarket().getId());
47 }
48
49 CampaignFleetAPI fleet = m.createFleet();
50 if (fleet != null) {
51 point.where.addEntity(fleet);
52 fleet.setLocation(point.loc.x, point.loc.y);
53 Vector2f spawnLoc = Misc.getPointWithinRadius(point.loc, 1000f);
54 SectorEntityToken e = point.where.createToken(spawnLoc);
55 fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, e, 30f * random.nextFloat(), "laying in wait");
56 fleet.removeScriptsOfClass(MissionFleetAutoDespawn.class);
57 fleet.addScript(new MissionFleetAutoDespawn(null, fleet));
58 }
59 }
60
62 if (!EncounterManager.EP_TYPE_SLIPSTREAM.equals(point.type)) return 0f;
63
64 LuddicPathBaseIntel intel = getClosestLuddicPathBase(point.getLocInHyper());
65 float f = getProximityFactor(point.getLocInHyper());
66
67 if (intel != null && f > 0) {
68 f = 0.25f + 0.75f * f;
69 if (intel.isLarge()) {
70 f *= 5f;
71 } else {
72 f *= 3f;
73 }
74 }
75 return 10f * f;
76 }
77
78 public static float getProximityFactor(Vector2f locInHyper) {
79 LuddicPathBaseIntel intel = getClosestLuddicPathBase(locInHyper);
80 float f = getLuddicPathBaseProximityFactor(intel, locInHyper);
81
82 return f;
83 }
84}
85
86
87
88
89
static float getLuddicPathBaseProximityFactor(LuddicPathBaseIntel base, Vector2f locInHyper)
static LuddicPathBaseIntel getClosestLuddicPathBase(Vector2f locInHyper)
float getFrequencyForPoint(EncounterManager manager, EncounterPoint point)
void createEncounter(EncounterManager manager, EncounterPoint point)