Starsector API
Loading...
Searching...
No Matches
OutsideSystemRemnantEPEC.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.fleets.AutoDespawnScript;
11import com.fs.starfarer.api.impl.campaign.ids.Factions;
12import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
13import com.fs.starfarer.api.impl.campaign.ids.Tags;
14import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
15import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
16import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
17import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
18import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
19import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantStationFleetManager;
20import com.fs.starfarer.api.util.Misc;
21
23
24 @Override
25 public void createEncounter(EncounterManager manager, EncounterPoint point) {
26 if (!(point.custom instanceof RemnantStationFleetManager)) return;
27
28 Random random = manager.getRandom();
29 RemnantStationFleetManager fm = (RemnantStationFleetManager) point.custom;
30
31 int difficulty = 0;
32 int max = 10;
33 float mult = 1f;
34 if (fm.getSource() != null && fm.getSource().getStarSystem() != null &&
35 fm.getSource().getStarSystem().hasTag(Tags.THEME_REMNANT_SUPPRESSED)) {
36 max = 3;
37 mult = 0.25f;
38 }
39
40 difficulty += (int) Math.min(fm.getTotalLost() * mult, max);
41 difficulty += random.nextInt(4);
42 if (difficulty > 10) difficulty = 10;
43
44 FleetCreatorMission m = new FleetCreatorMission(random);
45 m.beginFleet();
46
47 Vector2f loc = point.getLocInHyper();
48
49 FleetSize size = FleetSize.MEDIUM;
50 FleetQuality quality = FleetQuality.VERY_HIGH;
51 OfficerQuality oQuality = OfficerQuality.AI_MIXED;
52 OfficerNum oNum = OfficerNum.ALL_SHIPS;
53 String type = FleetTypes.PATROL_SMALL;
54
55 if (difficulty <= 1) {
56 size = FleetSize.VERY_SMALL;
57 type = FleetTypes.PATROL_SMALL;
58 oQuality = OfficerQuality.AI_GAMMA;
59 } else if (difficulty <= 2) {
60 size = FleetSize.SMALL;
61 type = FleetTypes.PATROL_SMALL;
62 oQuality = OfficerQuality.AI_GAMMA;
63 } else if (difficulty <= 5) {
64 size = FleetSize.MEDIUM;
65 type = FleetTypes.PATROL_SMALL;
66 oQuality = OfficerQuality.AI_BETA_OR_GAMMA;
67 } else if (difficulty <= 7) {
68 size = FleetSize.LARGE;
69 type = FleetTypes.PATROL_MEDIUM;
70 oQuality = OfficerQuality.AI_BETA_OR_GAMMA;
71 } else if (difficulty == 8) {
72 size = FleetSize.LARGE;
73 type = FleetTypes.PATROL_LARGE;
74 oQuality = OfficerQuality.AI_MIXED;
75 } else if (difficulty == 9) {
76 size = FleetSize.LARGER;
77 type = FleetTypes.PATROL_LARGE;
78 oQuality = OfficerQuality.AI_ALPHA;
79 } else {
80 size = FleetSize.VERY_LARGE;
81 type = FleetTypes.PATROL_LARGE;
82 oQuality = OfficerQuality.AI_ALPHA;
83 }
84
85 m.triggerCreateFleet(size, quality, Factions.REMNANTS, type, loc);
86 m.triggerSetFleetOfficers(oNum, oQuality);
87 m.triggerSetRemnantConfigActive();
88 m.triggerFleetUnsetAllowLongPursuit();
89
90 CampaignFleetAPI fleet = m.createFleet();
91 if (fleet != null) {
92 point.where.addEntity(fleet);
93 fleet.setLocation(point.loc.x, point.loc.y);
94 Vector2f spawnLoc = Misc.getPointWithinRadius(point.loc, 1000f);
95 SectorEntityToken e = point.where.createToken(spawnLoc);
96 String actionText = "patrolling";
97 if (difficulty <= 2) actionText = "reconnoitering";
98 fleet.addAssignment(FleetAssignment.PATROL_SYSTEM, e, 30f * random.nextFloat(), actionText);
99 fleet.addAssignment(FleetAssignment.GO_TO_LOCATION, fm.getSource(), 1000f, "returning to " + fm.getSource().getName());
100 fleet.addAssignment(FleetAssignment.ORBIT_PASSIVE, fm.getSource(), 3f + random.nextFloat() * 2f, "uploading encrypted data");
101 fleet.addAssignment(FleetAssignment.GO_TO_LOCATION_AND_DESPAWN, fm.getSource(), 10f);
102 fleet.addScript(new AutoDespawnScript(fleet));
103 }
104 }
105
107 if (!EncounterManager.EP_TYPE_OUTSIDE_SYSTEM.equals(point.type)) return 0f;
108 if (!(point.custom instanceof RemnantStationFleetManager)) return 0f;
109 RemnantStationFleetManager fm = (RemnantStationFleetManager) point.custom;
110
111 float mult = 0.5f;
112 if (fm.getSource() != null && fm.getSource().getStarSystem() != null &&
113 fm.getSource().getStarSystem().hasTag(Tags.THEME_REMNANT_SUPPRESSED)) {
114 mult = 0.1f;
115 }
116
117 return 10f * (float) Math.min(10f, fm.getTotalLost()) * mult;
118 }
119
120
121
122}
123
124
125
126
127
void createEncounter(EncounterManager manager, EncounterPoint point)
float getFrequencyForPoint(EncounterManager manager, EncounterPoint point)