Starsector API
Loading...
Searching...
No Matches
PlayerActivityTracker.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.shared;
2
3import java.util.ArrayList;
4import java.util.HashMap;
5import java.util.LinkedHashMap;
6import java.util.List;
7import java.util.Map;
8
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.econ.MarketAPI;
12import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
13
15
16 public static class FleetStatsSnapshot implements Cloneable {
17 private float fleetPoints;
18 private float cargoOnBoard;
19 private float cargoCapacity;
20 private float fuelOnBoard;
21 private float fuelCapacity;
22 private float numShips;
23 private float fleetSizeNum;
24
25 public void update() {
26 CampaignFleetAPI pf = Global.getSector().getPlayerFleet();
27 fleetPoints = pf.getFleetPoints();
28 cargoOnBoard = pf.getCargo().getSpaceUsed();
29 cargoCapacity = pf.getCargo().getMaxCapacity();
30 fuelOnBoard = pf.getCargo().getFuel();
31 fuelCapacity = pf.getCargo().getMaxFuel();
32 numShips = pf.getFleetData().getMembersListCopy().size();
33 fleetSizeNum = pf.getFleetSizeCount();
34 }
35 @Override
36 public FleetStatsSnapshot clone() {
37 try {
38 return (FleetStatsSnapshot) super.clone();
39 } catch (CloneNotSupportedException e) {
40 throw new RuntimeException(e);
41 }
42 }
43
44 public float getFleetPoints() {
45 return fleetPoints;
46 }
47 public void setFleetPoints(float fleetPoints) {
48 this.fleetPoints = fleetPoints;
49 }
50 public float getCargoOnBoard() {
51 return cargoOnBoard;
52 }
53 public void setCargoOnBoard(float cargoOnBoard) {
54 this.cargoOnBoard = cargoOnBoard;
55 }
56 public float getCargoCapacity() {
57 return cargoCapacity;
58 }
59 public void setCargoCapacity(float cargoCapacity) {
60 this.cargoCapacity = cargoCapacity;
61 }
62 public float getFuelOnBoard() {
63 return fuelOnBoard;
64 }
65 public void setFuelOnBoard(float fuelOnBoard) {
66 this.fuelOnBoard = fuelOnBoard;
67 }
68 public float getFuelCapacity() {
69 return fuelCapacity;
70 }
71 public void setFuelCapacity(float fuelCapacity) {
72 this.fuelCapacity = fuelCapacity;
73 }
74 public float getNumShips() {
75 return numShips;
76 }
77 public void setNumShips(float numShips) {
78 this.numShips = numShips;
79 }
80 public float getFleetSizeNum() {
81 return fleetSizeNum;
82 }
83 public void setFleetSizeNum(float fleetSizeNum) {
84 this.fleetSizeNum = fleetSizeNum;
85 }
86 }
87
88
89 private Map<MarketAPI, Long> lastVisit = new HashMap<MarketAPI, Long>();
90 private Map<SubmarketAPI, PlayerTradeDataForSubmarket> submarketTradeData = new LinkedHashMap<SubmarketAPI, PlayerTradeDataForSubmarket>();
91 private PlayerTradeProfitabilityData profitabilityData = new PlayerTradeProfitabilityData();
92 private ReputationChangeTracker repChangeTracker = new ReputationChangeTracker();
93 private FleetStatsSnapshot playerFleetStats = new FleetStatsSnapshot();
94
95 protected Object readResolve() {
96 if (profitabilityData == null) {
97 profitabilityData = new PlayerTradeProfitabilityData();
98 }
99 if (repChangeTracker == null) {
100 repChangeTracker = new ReputationChangeTracker();
101 }
102 if (playerFleetStats == null) {
103 playerFleetStats = new FleetStatsSnapshot();
104 }
105 return this;
106 }
107
108 public void advance(float days) {
109 //submarketTradeData.clear();
110 List<SubmarketAPI> remove = new ArrayList<SubmarketAPI>();
111 for (PlayerTradeDataForSubmarket data : submarketTradeData.values()) {
112 data.advance(days);
113
114 MarketAPI market = Global.getSector().getEconomy().getMarket(data.getMarket().getId());
115 if (market == null || market.getSubmarket(data.getSubmarket().getSpecId()) == null ||
116 market.getSubmarket(data.getSubmarket().getSpecId()) != data.getSubmarket()) {
117 remove.add(data.getSubmarket());
118 }
119 }
120
121 for (SubmarketAPI sub : remove) {
122 submarketTradeData.remove(sub);
123 }
124
125 List<MarketAPI> remove2 = new ArrayList<MarketAPI>();
126 for (MarketAPI curr : lastVisit.keySet()) {
127 if (curr.getPrimaryEntity() == null || !curr.getPrimaryEntity().isAlive()) {
128 remove2.add(curr);
129 }
130 }
131 for (MarketAPI curr : remove2) {
132 lastVisit.remove(curr);
133 }
134
135 profitabilityData.advance(days);
136
137 repChangeTracker.advance(days);
138
139 playerFleetStats.update();
140 }
141
143 return repChangeTracker;
144 }
145
146
148 return profitabilityData;
149 }
150
151 public void updateLastVisit(MarketAPI market) {
152 Long timestamp = Global.getSector().getClock().getTimestamp();
153 lastVisit.put(market, timestamp);
154 }
155
156 public float getDaysSinceLastVisitTo(MarketAPI market) {
157 Long timestamp = lastVisit.get(market);
158 if (timestamp == null) return 10000f;
159 return Global.getSector().getClock().getElapsedDaysSince(timestamp);
160 }
161
162
163 public PlayerTradeDataForSubmarket getPlayerTradeData(SubmarketAPI submarket) {
164 PlayerTradeDataForSubmarket data = submarketTradeData.get(submarket);
165 if (data == null) {
166 data = new PlayerTradeDataForSubmarket(submarket);
167 submarketTradeData.put(submarket, data);
168 }
169 return data;
170 }
171
172
173 public FleetStatsSnapshot getPlayerFleetStats() {
174 return playerFleetStats;
175 }
176
177 public Map<SubmarketAPI, PlayerTradeDataForSubmarket> getSubmarketTradeData() {
178 return submarketTradeData;
179 }
180
181
182}
static SectorAPI getSector()
Definition Global.java:59
Map< SubmarketAPI, PlayerTradeDataForSubmarket > getSubmarketTradeData()
PlayerTradeDataForSubmarket getPlayerTradeData(SubmarketAPI submarket)