1package com.fs.starfarer.api.impl.campaign.shared;
3import java.util.ArrayList;
4import java.util.LinkedHashMap;
7import org.apache.log4j.Logger;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.util.IntervalUtil;
11import com.fs.starfarer.api.util.Misc;
16 public static class CommodityData {
17 private String commodityId;
18 private float totalPrice;
19 private float quantity;
21 public float getQuantity() {
24 public void setQuantity(
float quantity) {
25 this.quantity = quantity;
27 public CommodityData(String commodityId) {
28 this.commodityId = commodityId;
30 public String getCommodityId() {
33 public void setCommodityId(String commodityId) {
34 this.commodityId = commodityId;
36 public float getTotalPrice() {
39 public void setTotalPrice(
float totalPrice) {
40 this.totalPrice = totalPrice;
44 private Map<String, CommodityData> dataBought =
new LinkedHashMap<String, CommodityData>();
47 private long accruedXP = 0;
53 public void reportNetBought(String commodityId,
float quantity,
float totalPrice) {
55 data.setQuantity(data.getQuantity() + quantity);
56 data.setTotalPrice(data.getTotalPrice() + totalPrice);
59 public void reportNetSold(String commodityId,
float quantity,
float totalPrice) {
61 if (data.getQuantity() < 1 || quantity < 1)
return;
62 float avgBuyPrice = data.getTotalPrice() / data.getQuantity();
65 if (quantity > data.getQuantity()) net = data.getQuantity();
66 data.setQuantity(data.getQuantity() - net);
70 float paidForNet = avgBuyPrice * net;
71 data.setTotalPrice(Math.max(0, data.getTotalPrice() - paidForNet));
73 float receivedForNet = net * totalPrice / quantity;
75 float profit = receivedForNet - paidForNet;
76 if (profit <= 0)
return;
80 long xp = (long) (profit * xpPerCredit);
84 log.info(
"Player accrued " + xp +
" xp for selling " + commodityId +
" (profit per unit: " + (
int) (profit / net) +
")");
91 if (tracker.intervalElapsed()) {
93 for (CommodityData cd :
new ArrayList<CommodityData>(dataBought.values())) {
94 cd.setQuantity(cd.getQuantity() * factor);
95 cd.setTotalPrice(cd.getTotalPrice() * factor);
96 if (cd.getQuantity() < 1) dataBought.remove(cd.getCommodityId());
102 CommodityData cd = dataBought.get(commodityId);
104 cd =
new CommodityData(commodityId);
105 dataBought.put(commodityId, cd);
115 this.accruedXP = accruedXP;
static SettingsAPI getSettings()
static Logger getLogger(Class c)
CommodityData getBoughtDataFor(String commodityId)
PlayerTradeProfitabilityData()
void reportNetBought(String commodityId, float quantity, float totalPrice)
void setAccruedXP(long accruedXP)
void reportNetSold(String commodityId, float quantity, float totalPrice)
void advance(float amount)
static float getGenericRollingAverageFactor()
static IntervalUtil createEconIntervalTracker()
float getFloat(String key)