Starsector API
Loading...
Searching...
No Matches
StarSystemActivityTracker.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.shared;
2
3import org.apache.log4j.Logger;
4
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.BaseCampaignEventListener;
7import com.fs.starfarer.api.campaign.BattleAPI;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.StarSystemAPI;
10import com.fs.starfarer.api.util.IntervalUtil;
11import com.fs.starfarer.api.util.Misc;
12import com.fs.starfarer.api.util.RollingAverageTracker;
13import com.fs.starfarer.api.util.TimeoutTracker;
14
15public class StarSystemActivityTracker extends BaseCampaignEventListener {
16
17 public static Logger log = Global.getLogger(StarSystemActivityTracker.class);
18 public static final float ROLLING_AVG_FACTOR = 0.5f;
19
20 private float econInterval = Global.getSettings().getFloat("economyIntervalnGameDays");
21
22 private IntervalUtil timer = new IntervalUtil(0.25f, .75f);
23 private TimeoutTracker<String> seen = new TimeoutTracker<String>();
24 private StarSystemAPI system;
25
26 private RollingAverageTracker points, fleets, ships;
27
28 public StarSystemActivityTracker(StarSystemAPI system) {
29 super(false);
30
31 this.system = system;
32
33 points = new RollingAverageTracker(econInterval - Math.min(econInterval * 0.5f, 2f),
34 econInterval + - Math.min(econInterval * 0.5f, 2f),
36 fleets = new RollingAverageTracker(econInterval - Math.min(econInterval * 0.5f, 2f),
37 econInterval + - Math.min(econInterval * 0.5f, 2f),
39 ships = new RollingAverageTracker(econInterval - Math.min(econInterval * 0.5f, 2f),
40 econInterval + - Math.min(econInterval * 0.5f, 2f),
42 }
43
44
45 Object readResolve() {
46 return this;
47 }
48
49 Object writeReplace() {
50 return this;
51 }
52
53 public void advance(float days) {
54 seen.advance(days);
55
56 timer.advance(days);
57 if (timer.intervalElapsed()) {
58 for (CampaignFleetAPI fleet : system.getFleets()) {
59 if (!seen.contains(fleet.getId())) {
60 seen.set(fleet.getId(), econInterval);
61
62 points.add(fleet.getFleetPoints());
63 ships.add(fleet.getFleetData().getMembersListCopy().size());
64 fleets.add(1);
65 }
66 }
67
68 for (CampaignFleetAPI fleet : Global.getSector().getHyperspace().getFleets()) {
69 float dist = Misc.getDistance(fleet.getLocation(), system.getLocation());
70 //if (!seen.contains(fleet) && dist < 1000) {
71 if (!seen.contains(fleet.getId()) && dist < Global.getSettings().getFloat("commRelayRangeAroundSystem")) {
72 seen.set(fleet.getId(), econInterval);
73
74 points.add(fleet.getFleetPoints());
75 ships.add(fleet.getFleetData().getMembersListCopy().size());
76 fleets.add(1);
77 }
78 }
79 }
80
81 points.advance(days);
82 fleets.advance(days);
83 ships.advance(days);
84
85 }
86
87
88
89 public StarSystemAPI getSystem() {
90 return system;
91 }
92
93 public float getPointsSeen() {
94 return points.getAverage();
95 }
96
97 public float getFleetsSeen() {
98 return fleets.getAverage();
99 }
100
101 public float getShipsSeen() {
102 return ships.getAverage();
103 }
104
105 @Override
106 public void reportBattleOccurred(CampaignFleetAPI primaryWinner, BattleAPI battle) {
107
108// if (!primaryWinner.isInOrNearSystem(system)) return;
109//
110// int minSize = 4;
111//
112// //for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) {
113// for (MarketAPI market : Misc.getMarketsInLocation(system)) {
114// if (market.getSize() < minSize) continue;
115//
116// if (market.getFaction().getCustom().optBoolean(Factions.CUSTOM_POSTS_NO_BOUNTIES)) {
117// continue;
118// }
119//
120// for (CampaignFleetAPI winner : battle.getSnapshotSideFor(primaryWinner)) {
121// increaseBountyProbability(winner, market);
122// }
123//
124// for (CampaignFleetAPI loser : battle.getOtherSideSnapshotFor(primaryWinner)) {
125// increaseBountyProbability(loser, market);
126// }
127// }
128 }
129
130
131// private void increaseBountyProbability(CampaignFleetAPI fleetWithLosses, MarketAPI market) {
132// CampaignEventManagerAPI eventManager = Global.getSector().getEventManager();
133// EventProbabilityAPI ep = eventManager.getProbability(Events.SYSTEM_BOUNTY, market);
134// if (!eventManager.isOngoing(ep)) {
135// float fpLost = Misc.getSnapshotFPLost(fleetWithLosses);
136// if (fpLost < 10) fpLost = 10;
137// float fpSeen = points.getAverage();
138// if (fpSeen < 1) fpSeen = 1;
139// float f = fpLost / fpSeen;
140// if (f > 1) f = 1;
141// //float probabilityIncrease = f * 10f;
142// float probabilityIncrease = f * 0.05f;
143// if (probabilityIncrease > 0) {
144// ep.increaseProbability(probabilityIncrease);
145// log.info("Increasing system bounty probability for " + market.getName() + " by " + probabilityIncrease + ", is now " + ep.getProbability());
146// }
147// }
148// }
149}
150
151
152
153
154
155
156
157
158
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 primaryWinner, BattleAPI battle)