Starsector API
Loading...
Searching...
No Matches
PlayerVisibleFleetManager.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.fleets;
2
3import java.util.Iterator;
4
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.CampaignFleetAPI;
7import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
8import com.fs.starfarer.api.util.IntervalUtil;
9import com.fs.starfarer.api.util.Misc;
10
11
13
14 protected IntervalUtil despawnTracker = new IntervalUtil(0.75f, 1.25f);
15
16 protected Object readResolve() {
17 super.readResolve();
18 if (despawnTracker == null) {
19 despawnTracker = new IntervalUtil(0.75f, 1.25f);
20 }
21 return this;
22 }
23
24 @Override
25 public void advance(float amount) {
26 super.advance(amount);
27
28 boolean reset = false;
29 //reset = true;
30
31 if (reset) {
32 if (this instanceof DisposableFleetManager) {
34 dfm.recentSpawns.clear();
35 }
36 }
37
38 float days = Global.getSector().getClock().convertToDays(amount);
39 despawnTracker.advance(days);
40 if (despawnTracker.intervalElapsed()) {
41 Iterator<ManagedFleetData> iter = active.iterator();
42 while (iter.hasNext()) {
43 ManagedFleetData curr = iter.next();
44 if (reset ||
45 (!isVisibleToPlayer(curr.fleet) && isOkToDespawnAssumingNotPlayerVisible(curr.fleet))) {
46 if (curr.fleet.getBattle() == null) {
47 curr.fleet.despawn(FleetDespawnReason.PLAYER_FAR_AWAY, null);
48 iter.remove();
49 }
50 // can't just directly despawn as it might be involved in a battle or something else
51// if (curr.fleet.getAI() != null) {
52// curr.fleet.getAI().clearAssignments();
53// curr.fleet.getAI().addAssignmentAtStart(FleetAssignment.GO_TO_LOCATION_AND_DESPAWN, curr.fleet, 100f, null);
54// }
55 }
56 }
57 }
58 }
59
60 protected abstract boolean isOkToDespawnAssumingNotPlayerVisible(CampaignFleetAPI fleet);
61
62 protected boolean isVisibleToPlayer(CampaignFleetAPI fleet) {
63 CampaignFleetAPI player = Global.getSector().getPlayerFleet();
64 if (player == null) return false;
65
66 if (player.getContainingLocation() != fleet.getContainingLocation()) {
67 float dist = Misc.getDistance(player.getLocationInHyperspace(), fleet.getLocationInHyperspace());
68 return dist < getHyperspaceCullRange();
69 }
70
71 float cullRange = player.getMaxSensorRangeToDetect(fleet) + getInSystemCullRange();
72 float dist = Misc.getDistance(player.getLocation(), fleet.getLocation());
73 return dist < cullRange;
74 }
75
76 protected float getHyperspaceCullRange() {
77 return 1500;
78 }
79
80 protected float getInSystemCullRange() {
81 return 500;
82 }
83}
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
static SectorAPI getSector()
Definition Global.java:59
LinkedHashMap< String, TimeoutTracker< Boolean > > recentSpawns
abstract boolean isOkToDespawnAssumingNotPlayerVisible(CampaignFleetAPI fleet)