Starsector API
Loading...
Searching...
No Matches
SeededFleetManager.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.fleets;
2
3import java.util.ArrayList;
4import java.util.List;
5
6import com.fs.starfarer.api.EveryFrameScript;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.BattleAPI;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.StarSystemAPI;
11import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
12import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
13import com.fs.starfarer.api.util.Misc;
14
15public abstract class SeededFleetManager implements FleetEventListener, EveryFrameScript{
16
17 public static float DESPAWN_PAD_LY = 1f;
18
19 public static class SeededFleet {
20 public long seed;
21 public int points;
22 public CampaignFleetAPI fleet;
23 }
24
25 protected List<SeededFleet> fleets = new ArrayList<SeededFleet>();
26 protected float inflateRangeLY = 5f;
27 protected StarSystemAPI system;
28
29 public static boolean DEBUG = false;
30
31 public SeededFleetManager(StarSystemAPI system, float inflateRangeLY) {
32 this.system = system;
33 this.inflateRangeLY = inflateRangeLY;
34 }
35
36 public void addSeed(long seed) {
37 SeededFleet f = new SeededFleet();
38 f.seed = seed;
39 fleets.add(f);
40 }
41
42 public float getInflateRangeLY() {
43 return inflateRangeLY;
44 }
45
46 public StarSystemAPI getSystem() {
47 return system;
48 }
49
50 protected abstract CampaignFleetAPI spawnFleet(long seed);
51
52 public void advance(float amount) {
53 CampaignFleetAPI player = Global.getSector().getPlayerFleet();
54
55 float distFromSystem = Misc.getDistanceLY(player.getLocationInHyperspace(), system.getLocation());
56 if (distFromSystem < inflateRangeLY) {
57 float index = 0f;
58 for (SeededFleet curr : fleets) {
59 float threshold = inflateRangeLY * (0.9f + 0.1f / fleets.size() * (index + 1f));
60 if (distFromSystem < threshold) {
61 if (curr.fleet == null) {
62 curr.fleet = spawnFleet(curr.seed);
63 if (curr.fleet != null) {
64 if (DEBUG) {
65 System.out.println("Created " + curr.fleet.getName() + " (seed: " + curr.seed + ")");
66 //System.out.println(" Portrait: " + curr.fleet.getCommander().getPortraitSprite());
67 }
68 curr.fleet.addEventListener(this);
69 curr.points = curr.fleet.getFleetPoints();
70 }
71 }
72 }
73 index++;
74 }
75 }
76
77 for (SeededFleet curr : fleets) {
78 if (curr.fleet != null) {
79 float dist = Misc.getDistanceLY(player.getLocationInHyperspace(), curr.fleet.getLocationInHyperspace());
80 if (dist > inflateRangeLY + DESPAWN_PAD_LY && curr.points == curr.fleet.getFleetPoints()) {
81 if (DEBUG) System.out.println("Despawned " + curr.fleet.getName() + " (seed: " + curr.seed + ")");
82 curr.fleet.despawn(FleetDespawnReason.PLAYER_FAR_AWAY, null);
83 curr.fleet = null;
84 curr.points = 0;
85 }
86 }
87 }
88 }
89
90
91
92 public boolean isDone() {
93 return fleets.isEmpty();
94 }
95
96 public boolean runWhilePaused() {
97 //return false;
98 return Global.getSettings().isDevMode();
99 }
100
101
102 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
103 if (reason == FleetDespawnReason.PLAYER_FAR_AWAY) return;
104
105 for (SeededFleet curr : fleets) {
106 if (curr.fleet != null && curr.fleet == fleet) {
107 fleets.remove(curr);
108 if (DEBUG) System.out.println("Removed " + curr.fleet.getName() + " (seed: " + curr.seed + "), remaiing: " + fleets.size());
109 break;
110 }
111 }
112 }
113
114 public void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle) {
115
116 }
117}
118
119
120
121
static SettingsAPI getSettings()
Definition Global.java:51
static SectorAPI getSector()
Definition Global.java:59
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
SeededFleetManager(StarSystemAPI system, float inflateRangeLY)