1package com.fs.starfarer.api.impl.campaign.graid;
4import java.util.Random;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CargoAPI;
8import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
9import com.fs.starfarer.api.campaign.CargoStackAPI;
10import com.fs.starfarer.api.campaign.TextPanelAPI;
11import com.fs.starfarer.api.campaign.econ.CommodityOnMarketAPI;
12import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
13import com.fs.starfarer.api.campaign.econ.Industry;
14import com.fs.starfarer.api.campaign.econ.MarketAPI;
15import com.fs.starfarer.api.impl.campaign.econ.CommodityIconCounts;
16import com.fs.starfarer.api.impl.campaign.econ.ShippingDisruption;
17import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
18import com.fs.starfarer.api.loading.Description;
19import com.fs.starfarer.api.loading.Description.Type;
20import com.fs.starfarer.api.ui.IconGroupAPI;
21import com.fs.starfarer.api.ui.IconRenderMode;
22import com.fs.starfarer.api.ui.TooltipMakerAPI;
23import com.fs.starfarer.api.util.Misc;
36 protected CommodityOnMarketAPI
com;
37 private int deficitActuallyCaused;
40 super(
market, commodityId);
41 com =
market.getCommodityData(commodityId);
47 if (spec ==
null)
return;
49 CommodityOnMarketAPI
com =
market.getCommodityData(
id);
50 CommodityIconCounts counts =
new CommodityIconCounts(
com);
52 int deficit = counts.deficit;
53 int available = Math.max(0, counts.available - counts.extra);
54 int extra = counts.extra;
57 if (counts.production >= counts.available) {
58 Color c = Misc.interpolateColor(Misc.getPositiveHighlightColor(), Misc.zeroColor, 0.5f);
59 iconGroup.addIconGroup(
id, IconRenderMode.OUTLINE_CUSTOM, available, c);
61 iconGroup.addIconGroup(
id, IconRenderMode.NORMAL, available,
null);
65 iconGroup.addIconGroup(
id, IconRenderMode.RED, deficit,
null);
68 iconGroup.addIconGroup(
id, IconRenderMode.GREEN, extra,
null);
74 if (!spec.isFuel() && !spec.isPersonnel()) {
96 int diff = Misc.computeEconUnitChangeFromTradeModChange(
com, -(
int)quantity);
98 if (diff < 0) diff = 0;
104 return com.getCommodity();
111 RaidDangerLevel danger =
com.getCommodity().getBaseDanger();
112 CommodityIconCounts counts =
new CommodityIconCounts(
com);
113 if (counts.production >= counts.available) {
114 danger = danger.prev();
116 if (counts.deficit > 0) {
117 danger = danger.next();
119 if (counts.extra > 0) {
120 danger = danger.prev();
123 danger =
source.adjustCommodityDangerLevel(
id, danger);
138 return base * marines;
148 float unit =
com.getCommodity().getEconUnit();
150 CommodityIconCounts counts =
new CommodityIconCounts(
com);
164 if (result < 0) result = 0;
170 Industry best =
null;
172 int available =
com.getAvailable();
173 RaidDangerLevel base =
com.getCommodity().getBaseDanger();
174 for (Industry ind :
market.getIndustries()) {
175 int supply = ind.getSupply(
com.getId()).
getQuantity().getModifiedInt();
176 int metDemand = Math.min(available, ind.getDemand(
com.getId()).getQuantity().getModifiedInt());
177 int currScore = Math.max(supply, metDemand) * 1000;
178 RaidDangerLevel danger = ind.adjustCommodityDangerLevel(
com.getId(), base);
179 currScore += 1000 - danger.ordinal();
180 if (currScore > score) {
189 return com.getCommodity().getName();
202 public int performRaid(CargoAPI loot, Random random,
float lootMult, TextPanelAPI text) {
208 float mult = 0.9f + random.nextFloat() * 0.2f;
217 if (deficitActuallyCaused > 0) {
218 com.getAvailableStat().addTemporaryModFlat(
219 ShippingDisruption.ACCESS_LOSS_DURATION,
220 Misc.genUID(),
"Recent raid", -deficitActuallyCaused);
228 return deficitActuallyCaused;
232 this.deficitActuallyCaused = deficitActuallyCaused;
244 Color h = Misc.getHighlightColor();
245 Color bad = Misc.getNegativeHighlightColor();
246 Color good = Misc.getPositiveHighlightColor();
250 t.addPara(desc.getText1FirstPara(), 0f);
252 t.addPara(
"Base value: %s per unit", opad, h, Misc.getDGSCredits(
com.getCommodity().getBasePrice()));
static SettingsAPI getSettings()
static FactoryAPI getFactory()
void setSource(Industry source)
void addIcons(IconGroupAPI iconGroup)
CommodityGroundRaidObjectivePluginImpl(MarketAPI market, String commodityId)
void createTooltip(TooltipMakerAPI t, boolean expanded)
float getQuantitySortValue()
RaidDangerLevel getDangerLevel()
String getCommodityIdForDeficitIcons()
static float QUANTITY_MULT_NORMAL_FOR_DEFICIT
CargoStackAPI getStackForIcon()
static float QUANTITY_MULT_OVERALL
float getQuantity(int marines, boolean forDeficit)
static float QUANTITY_MULT_DEFICIT
static float QUANTITY_MULT_NORMAL
static float QUANTITY_MULT_EXCESS
float getQuantity(int marines)
int getDeficitActuallyCaused()
int getProjectedCreditsValue()
static float ECON_IMPACT_MULT
void setDeficitActuallyCaused(int deficitActuallyCaused)
int getValue(int marines)
int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text)
float getBaseRaidQuantity(boolean forDeficit)
CommoditySpecAPI getCommoditySpec()
int getCargoSpaceNeeded()
static Industry computeCommoditySource(MarketAPI market, CommodityOnMarketAPI com)
CargoStackAPI createCargoStack(CargoItemType type, Object data, CargoAPI cargo)
Description getDescription(String id, Type type)
static float XP_GAIN_VALUE_MULT
static float QUANTITY_SORT_TIER_0