Starsector API
Loading...
Searching...
No Matches
SlipstreamScavengerEPEC.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.FleetTypes;
12import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn;
13import com.fs.starfarer.api.impl.campaign.procgen.themes.RuinsFleetRouteManager;
14import com.fs.starfarer.api.impl.campaign.procgen.themes.ScavengerPiracyScript;
15import com.fs.starfarer.api.util.Misc;
16import com.fs.starfarer.api.util.WeightedRandomPicker;
17
19
20 @Override
21 public void createEncounter(EncounterManager manager, EncounterPoint point) {
22 Random random = manager.getRandom();
23 boolean pirate = random.nextBoolean();
24 pirate = true; // seems like legit scavengers wouldn't spend too much time waiting in ambush
25
26 WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>(random);
27 picker.add(FleetTypes.SCAVENGER_SMALL, 5f);
28 picker.add(FleetTypes.SCAVENGER_MEDIUM, 15f);
29 picker.add(FleetTypes.SCAVENGER_LARGE, 10f);
30 String type = picker.pick();
31
32 CampaignFleetAPI fleet = RuinsFleetRouteManager.createScavenger(type, point.getLocInHyper(),
33 null, null, pirate, random);
34
35 if (fleet != null) {
36 point.where.addEntity(fleet);
37 fleet.setLocation(point.loc.x, point.loc.y);
38 Vector2f spawnLoc = Misc.getPointWithinRadius(point.loc, 1000f);
39 SectorEntityToken e = point.where.createToken(spawnLoc);
40 fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, e, 30f * random.nextFloat(), "waiting");
41 fleet.removeScriptsOfClass(MissionFleetAutoDespawn.class);
42 fleet.addScript(new MissionFleetAutoDespawn(null, fleet));
43 fleet.addScript(new ScavengerPiracyScript(fleet));
44 }
45 }
46
48 if (!EncounterManager.EP_TYPE_SLIPSTREAM.equals(point.type)) return 0f;
49
50 float f = getProximityFactor(point.getLocInHyper());
51 if (f > 0) {
52 f = 0.25f + 0.75f * f;
53 }
54 return 10f * f;
55 }
56
57
58 public static float getProximityFactor(Vector2f locInHyper) {
59 StarSystemAPI ruins = getClosestSystemWithRuins(locInHyper);
60 float f = getRuinsProximityFactor(ruins, locInHyper);
61 return f;
62 }
63
64
65}
66
67
68
69
70
static float getRuinsProximityFactor(StarSystemAPI system, Vector2f locInHyper)
float getFrequencyForPoint(EncounterManager manager, EncounterPoint point)
void createEncounter(EncounterManager manager, EncounterPoint point)