1package com.fs.starfarer.api.impl.campaign.econ.impl;
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
7import com.fs.starfarer.api.campaign.econ.MarketAPI;
8import com.fs.starfarer.api.campaign.econ.MarketImmigrationModifier;
9import com.fs.starfarer.api.combat.MutableStat;
10import com.fs.starfarer.api.impl.campaign.ids.Commodities;
11import com.fs.starfarer.api.impl.campaign.ids.Industries;
12import com.fs.starfarer.api.impl.campaign.ids.Stats;
13import com.fs.starfarer.api.impl.campaign.intel.events.ht.HyperspaceTopographyEventIntel;
14import com.fs.starfarer.api.impl.campaign.intel.events.ht.HyperspaceTopographyEventIntel.Stage;
15import com.fs.starfarer.api.impl.campaign.population.PopulationComposition;
16import com.fs.starfarer.api.ui.Alignment;
17import com.fs.starfarer.api.ui.TooltipMakerAPI;
18import com.fs.starfarer.api.util.Misc;
19import com.fs.starfarer.api.util.Pair;
43 int size =
market.getSize();
45 boolean megaport = Industries.MEGAPORT.equals(
getId());
47 if (megaport) extraSize = 2;
49 demand(Commodities.FUEL, size - 2 + extraSize);
50 demand(Commodities.SUPPLIES, size - 2 + extraSize);
51 demand(Commodities.SHIPS, size - 2 + extraSize);
53 supply(Commodities.CREW, size - 1 + extraSize);
60 if (deficit.two > 0) {
67 market.setHasSpaceport(
true);
79 market.getStats().getDynamic().getMod(Stats.OFFICER_PROB_MOD).modifyFlat(
getModId(0), officerProb);
89 market.setHasSpaceport(
true);
98 market.setHasSpaceport(
false);
103 market.getStats().getDynamic().getMod(Stats.OFFICER_PROB_MOD).unmodifyFlat(
getModId(0));
109 if (loss < 0) loss = 0;
114 return getMaxDeficit(Commodities.FUEL, Commodities.SUPPLIES, Commodities.SHIPS);
119 return mode != IndustryTooltipMode.NORMAL ||
isFunctional();
125 if (mode != IndustryTooltipMode.NORMAL ||
isFunctional()) {
126 MutableStat fake =
new MutableStat(0);
128 boolean megaport = Industries.MEGAPORT.equals(
getId());
135 fake.modifyFlat(
getModId(0), a, desc);
145 String totalStr =
"+" + (int)Math.round(total * 100f) +
"%";
146 Color h = Misc.getHighlightColor();
148 h = Misc.getNegativeHighlightColor();
149 totalStr =
"" + (int)Math.round(total * 100f) +
"%";
154 tooltip.addPara(
"Accessibility bonus: %s", opad, h, totalStr);
156 tooltip.addPara(
"Accessibility penalty: %s", opad, h, totalStr);
160 tooltip.addPara(
"Population growth: %s", opad, h,
"+" + (
int)bonus);
162 HyperspaceTopographyEventIntel intel = HyperspaceTopographyEventIntel.get();
163 if (intel !=
null && intel.isStageActive(Stage.SLIPSTREAM_DETECTION)) {
164 h = Misc.getHighlightColor();
165 tooltip.addSectionHeading(
"Hyperspace topography", Alignment.MID, opad);
167 tooltip.addPara(
"Slipstream detection requires functional Spaceport", Misc.getNegativeHighlightColor(), opad);
169 int range = (int) Math.round(
market.getStats().getDynamic().getMod(Stats.SLIPSTREAM_REVEAL_RANGE_LY_MOD).computeEffective(0f));
170 tooltip.addPara(
"Slipstream detection range: %s light-years", opad, h,
"" + range);
171 tooltip.addStatModGrid(tooltip.getWidthSoFar(), 50, opad, pad,
market.getStats().getDynamic().getMod(Stats.SLIPSTREAM_REVEAL_RANGE_LY_MOD));
198 boolean megaport = Industries.MEGAPORT.equals(
getId());
230 Color highlight = Misc.getHighlightColor();
232 String pre =
"Alpha-level AI core currently assigned. ";
233 if (mode == AICoreDescriptionMode.MANAGE_CORE_DIALOG_LIST || mode == AICoreDescriptionMode.INDUSTRY_TOOLTIP) {
234 pre =
"Alpha-level AI core. ";
237 String aStr =
"" + (int)Math.round(a * 100f) +
"%";
239 if (mode == AICoreDescriptionMode.INDUSTRY_TOOLTIP) {
241 TooltipMakerAPI text = tooltip.beginImageWithText(coreSpec.getIconName(), 48);
242 text.addPara(pre +
"Reduces upkeep cost by %s. Reduces demand by %s unit. " +
243 "Increases accessibility by %s.", 0f, highlight,
246 tooltip.addImageWithText(opad);
250 tooltip.addPara(pre +
"Reduces upkeep cost by %s. Reduces demand by %s unit. " +
251 "Increases accessibility by %s.", opad, highlight,
268 market.getAccessibilityMod().unmodifyFlat(
"spaceport_improve");
272 public void addImproveDesc(TooltipMakerAPI info, ImprovementDescriptionMode mode) {
274 Color highlight = Misc.getHighlightColor();
277 String aStr =
"" + (int)Math.round(a * 100f) +
"%";
279 if (mode == ImprovementDescriptionMode.INDUSTRY_TOOLTIP) {
280 info.addPara(
"Accessibility increased by %s.", 0f, highlight, aStr);
282 info.addPara(
"Increases accessibility by %s.", 0f, highlight, aStr);
285 info.addSpacer(opad);
286 super.addImproveDesc(info, mode);
static SettingsAPI getSettings()
static int DEMAND_REDUCTION
Map< String, MutableCommodityQuantity > supply
String getImprovementsDescForModifiers()
static String getDeficitText(String commodityId)
Map< String, MutableCommodityQuantity > demand
String getNameForModifier()
MutableStat demandReduction
Pair< String, Integer > getMaxDeficit(String ... commodityIds)
void applyAlphaCoreModifiers()
void applyNoAICoreModifiers()
static float OFFICER_PROB_MOD
static float OFFICER_PROB_MOD_MEGA
void modifyIncoming(MarketAPI market, PopulationComposition incoming)
static float IMPROVE_ACCESSIBILITY
static float BASE_ACCESSIBILITY
void addAlphaCoreDescription(TooltipMakerAPI tooltip, AICoreDescriptionMode mode)
void applyAlphaCoreSupplyAndDemandModifiers()
float getUpkeepPenalty(Pair< String, Integer > deficit)
boolean hasPostDemandSection(boolean hasDemand, IndustryTooltipMode mode)
void applyImproveModifiers()
Pair< String, Integer > getUpkeepAffectingDeficit()
float getPopulationGrowthBonus()
static float UPKEEP_MULT_PER_DEFICIT
static float MEGAPORT_ACCESSIBILITY
static float ALPHA_CORE_ACCESSIBILITY
void addPostDemandSection(TooltipMakerAPI tooltip, boolean hasDemand, IndustryTooltipMode mode)
void addImproveDesc(TooltipMakerAPI info, ImprovementDescriptionMode mode)
CommoditySpecAPI getCommoditySpec(String commodityId)