1package com.fs.starfarer.api.impl.campaign.econ.impl;
3import java.util.HashMap;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.FactionAPI;
8import com.fs.starfarer.api.campaign.econ.CommodityOnMarketAPI;
9import com.fs.starfarer.api.campaign.econ.EconomyAPI.EconomyUpdateListener;
10import com.fs.starfarer.api.campaign.econ.MarketAPI;
11import com.fs.starfarer.api.combat.StatBonus;
12import com.fs.starfarer.api.impl.campaign.ids.Commodities;
13import com.fs.starfarer.api.impl.campaign.ids.Stats;
17 public static final String
KEY =
"$core_shipQualityManager";
29 public static class QualityData {
30 public String econGroup;
31 public FactionAPI faction;
32 public StatBonus quality =
new StatBonus();
35 public MarketAPI market;
37 public float qMod = 0f;
38 public QualityData(String econGroup, FactionAPI faction) {
39 this.econGroup = econGroup;
40 this.faction = faction;
44 protected transient Map<String, QualityData>
data =
new HashMap<String, QualityData>();
47 data =
new HashMap<String, QualityData>();
55 public String
getKey(MarketAPI market) {
56 return market.getFactionId() +
"_" + market.getEconGroup();
67 for (MarketAPI market :
Global.
getSector().getEconomy().getMarketsCopy()) {
74 CommodityOnMarketAPI com = market.getCommodityData(Commodities.SHIPS);
75 int prod = Math.min(com.getAvailable(), com.getMaxSupply());
85 int inFactionShipping = com.getCommodityMarketData().getMaxShipping(market,
true);
86 prod = Math.min(prod, inFactionShipping);
87 prod = Math.max(Math.min(com.getAvailable(), com.getMaxSupply()), prod);
88 if (prod >= d.prod && prod > 0) {
89 float q = market.getStats().getDynamic().getMod(Stats.PRODUCTION_QUALITY_MOD).computeEffective(0f);
90 if (q >= d.qMod || prod > d.prod) {
94 d.quality = market.getStats().getDynamic().getMod(Stats.PRODUCTION_QUALITY_MOD);
103 String key =
getKey(market);
104 QualityData d =
data.get(key);
109 d =
new QualityData(market.getEconGroup(), market.getFaction());
110 if (!market.isHidden()) {
111 d.quality.modifyFlat(
"no_prod_penalty",
IMPORT_PENALTY,
"Cross-faction imports");
133 if (market !=
null) {
135 quality = d.quality.computeEffective(0f);
136 quality += market.getStats().getDynamic().getMod(Stats.FLEET_QUALITY_MOD).computeEffective(0f);
139 if (factionId !=
null) {
140 if (market !=
null) {
141 quality -= market.getFaction().getDoctrine().getShipQualityContribution();
143 quality +=
Global.
getSector().getFaction(factionId).getDoctrine().getShipQualityContribution();
static SettingsAPI getSettings()
static SectorAPI getSector()
void commodityUpdated(String commodityId)
boolean isEconomyListenerExpired()
static ShipQuality getInstance()
QualityData getQualityData(MarketAPI market)
String getKey(MarketAPI market)
static float getShipQuality(MarketAPI market, String factionId)
transient Map< String, QualityData > data
static float IMPORT_PENALTY
float getFloat(String key)