Starsector API
Loading...
Searching...
No Matches
BaseLimitedFleetManager.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 org.apache.log4j.Logger;
7
8import com.fs.starfarer.api.EveryFrameScript;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.BattleAPI;
11import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
12import com.fs.starfarer.api.campaign.CampaignFleetAPI;
13import com.fs.starfarer.api.campaign.LocationAPI;
14import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
15import com.fs.starfarer.api.util.IntervalUtil;
16
17//public abstract class BaseLimitedFleetManager extends BaseCampaignEventListener implements EveryFrameScript {
25public abstract class BaseLimitedFleetManager implements EveryFrameScript, FleetEventListener {
26
27 public static Logger log = Global.getLogger(BaseLimitedFleetManager.class);
28
29 public static class ManagedFleetData {
30 //public float startingFleetPoints = 0;
31 public CampaignFleetAPI fleet;
32 public LocationAPI spawnedFor;
33 public ManagedFleetData(CampaignFleetAPI fleet, LocationAPI spawnedFor) {
34 this.fleet = fleet;
35 this.spawnedFor = spawnedFor;
36 //startingFleetPoints = fleet.getFleetPoints();
37 }
38 }
39
40 protected List<ManagedFleetData> active = new ArrayList<ManagedFleetData>();
41 protected IntervalUtil tracker;
42
44 float interval = 30f;
45 tracker = new IntervalUtil(interval * 0.75f, interval * 1.25f);
47 }
48
49 protected Object readResolve() {
50 return this;
51 }
52
53 protected abstract int getMaxFleets();
54 protected abstract CampaignFleetAPI spawnFleet();
55
56 protected float getNextInterval() {
57 return 30f * (0.75f + (float) Math.random() * 0.5f);
58 }
59
60 protected float getSpawnRateMult() {
61 return 1f;
62 }
63
64 public void advance(float amount) {
65 float days = Global.getSector().getClock().convertToDays(amount);
66
67 tracker.advance(days * getSpawnRateMult());
68 if (!tracker.intervalElapsed()) return;
69
70 float next = getNextInterval();
71 tracker.setInterval(next, next);
72
73 Global.getSettings().profilerBegin(this.getClass().getSimpleName() + ".advance()");
74 List<ManagedFleetData> remove = new ArrayList<ManagedFleetData>();
75 for (ManagedFleetData data : active) {
76 if (data.fleet.getContainingLocation() == null ||
77 !data.fleet.getContainingLocation().getFleets().contains(data.fleet)) {
78 remove.add(data);
79 log.info("Cleaning up orphaned fleet [" + data.fleet.getNameWithFaction() + "]");
80 }
81 }
82 active.removeAll(remove);
83
84 int max = getMaxFleets();
85
86 if (active.size() < max) {
87 //log.info(active.size() + " out of a maximum " + max + " fleets in play for [" + getClass().getName() + "]");
88 CampaignFleetAPI fleet = spawnFleet();
89 if (fleet != null) {
90 fleet.addEventListener(this);
91 LocationAPI spawnLoc = null;
92 if (this instanceof DisposableFleetManager) {
93 spawnLoc = ((DisposableFleetManager)this).getCurrSpawnLoc();
94 }
95 ManagedFleetData data = new ManagedFleetData(fleet, spawnLoc);
96 active.add(data);
97 log.info("Spawned fleet [" + fleet.getNameWithFaction() + "] at hyperloc " + fleet.getLocationInHyperspace());
98 } else {
99 //log.info("Could not spawn fleet - returned null");
100 }
101 } else {
102 log.debug("Maximum number of " + max + " fleets already in play for [" + getClass().getName() + "]");
103 }
105 }
106
107 public boolean isDone() {
108 return false;
109 }
110
111 public boolean runWhilePaused() {
112 return false;
113 }
114
115 public void reportFleetDespawned(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
116 for (ManagedFleetData data : active) {
117 if (data.fleet == fleet) {
118 active.remove(data);
119 break;
120 }
121 }
122 }
123
124 public void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle) {
125 }
126
127 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
128 }
129
130}
131
132
133
134
135
136
137
138
139
140
141
142
143
144
static SettingsAPI getSettings()
Definition Global.java:51
static Logger getLogger(Class c)
Definition Global.java:26
static SectorAPI getSector()
Definition Global.java:59
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
void reportFleetDespawned(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)