1package com.fs.starfarer.api.impl.campaign.econ.impl;
5import org.json.JSONException;
6import org.json.JSONObject;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.AICoreOfficerPlugin;
10import com.fs.starfarer.api.campaign.BattleAPI;
11import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
12import com.fs.starfarer.api.campaign.CampaignFleetAPI;
13import com.fs.starfarer.api.campaign.CustomCampaignEntityAPI;
14import com.fs.starfarer.api.campaign.FleetInflater;
15import com.fs.starfarer.api.campaign.SectorEntityToken;
16import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
17import com.fs.starfarer.api.campaign.econ.Industry;
18import com.fs.starfarer.api.campaign.econ.MarketAPI.MarketInteractionMode;
19import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
20import com.fs.starfarer.api.characters.PersonAPI;
21import com.fs.starfarer.api.combat.ShipVariantAPI;
22import com.fs.starfarer.api.fleet.FleetMemberAPI;
23import com.fs.starfarer.api.fleet.FleetMemberType;
24import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent;
25import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflater;
26import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams;
27import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
28import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
29import com.fs.starfarer.api.impl.campaign.ids.Abilities;
30import com.fs.starfarer.api.impl.campaign.ids.Commodities;
31import com.fs.starfarer.api.impl.campaign.ids.Entities;
32import com.fs.starfarer.api.impl.campaign.ids.Factions;
33import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
34import com.fs.starfarer.api.impl.campaign.ids.HullMods;
35import com.fs.starfarer.api.impl.campaign.ids.Industries;
36import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
37import com.fs.starfarer.api.impl.campaign.ids.Stats;
38import com.fs.starfarer.api.impl.campaign.ids.Tags;
39import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantOfficerGeneratorPlugin;
40import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
41import com.fs.starfarer.api.ui.TooltipMakerAPI;
42import com.fs.starfarer.api.util.Misc;
43import com.fs.starfarer.api.util.Pair;
64 }
else if (starfortress) {
106 member.getRepairTracker().setCR(cr);
109 if (inflater !=
null) {
127 if (deficit < 0) deficit = 0f;
144 float cr = 0.5f + 0.5f * Math.min(d, q);
153 return mode != IndustryTooltipMode.NORMAL ||
isFunctional();
159 if (mode != IndustryTooltipMode.NORMAL ||
isFunctional()) {
164 tooltip.
addPara(
"Station combat readiness: %s", opad, h,
"" + Math.round(cr * 100f) +
"%");
204 super.advance(amount);
269 super.buildingFinished();
280 super.notifyBeingRemoved(mode, forUpgrade);
289 super.upgradeFinished(previous);
343 super.notifyColonyRenamed();
359 fParams.allWeapons =
true;
407 if (entity.hasTag(
Tags.
STATION) && !entity.hasTag(
"NO_ORBITAL_STATION")) {
419 float orbitRadius = primary.
getRadius() + 150f;
432 String fleetName =
null;
433 String variantId =
null;
437 JSONObject json =
new JSONObject(
getSpec().getData());
438 variantId = json.getString(
"variant");
439 radius = (float) json.getDouble(
"radius");
440 fleetName = json.getString(
"fleetName");
441 }
catch (JSONException e) {
442 throw new RuntimeException(e);
461 String name = fleetName;
493 for (
int i = 1; i < member.
getStatus().getNumStatuses(); i++) {
526 }
else if (battlestation) {
584 if (commander !=
null) {
601 super.disruptionFinished();
608 super.notifyDisrupted();
633 boolean canBuild =
false;
635 if (ind ==
this)
continue;
636 if (!ind.isFunctional())
continue;
646 return "Requires a functional spaceport";
654 int stabilityMod = 1;
657 }
else if (starfortress) {
686 String pre =
"Alpha-level AI core currently assigned. ";
687 if (mode == AICoreDescriptionMode.MANAGE_CORE_DIALOG_LIST || mode == AICoreDescriptionMode.INDUSTRY_TOOLTIP) {
688 pre =
"Alpha-level AI core. ";
690 if (mode == AICoreDescriptionMode.INDUSTRY_TOOLTIP) {
693 text.
addPara(pre +
"Reduces upkeep cost by %s. Reduces demand by %s unit. " +
694 "Increases station combat effectiveness.", 0f, highlight,
700 tooltip.
addPara(pre +
"Reduces upkeep cost by %s. Reduces demand by %s unit. " +
701 "Increases station combat effectiveness.", opad, highlight,
725 if (mode == ImprovementDescriptionMode.INDUSTRY_TOOLTIP) {
732 super.addImproveDesc(info, mode);
739 return battlestation || starfortress;
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static SectorAPI getSector()
MutableStat getQuantity()
void modifyFlat(String source, float value)
void unmodifyFlat(String source)
void modifyMult(String source, float value)
void unmodifyMult(String source)
void modifyFlat(String source, float value)
IndustrySpecAPI getSpec()
static int DEMAND_REDUCTION
void applyIncomeAndUpkeep(float sizeOverride)
Map< String, MutableCommodityQuantity > supply
String getImprovementsDescForModifiers()
MutableCommodityQuantity getDemand(String id)
void addStabilityPostDemandSection(TooltipMakerAPI tooltip, boolean hasDemand, IndustryTooltipMode mode)
void unmodifyStabilityWithBaseMod()
void modifyStabilityWithBaseMod()
void addGroundDefensesImpactSection(TooltipMakerAPI tooltip, float bonus, String ...commodities)
Map< String, MutableCommodityQuantity > demand
String getNameForModifier()
MutableStat demandReduction
Pair< String, Integer > getMaxDeficit(String ... commodityIds)
void removeStationEntityAndFleetIfNeeded()
Pair< String, Integer > getStabilityAffectingDeficit()
void applyNoAICoreModifiers()
void applyAlphaCoreSupplyAndDemandModifiers()
void addImproveDesc(TooltipMakerAPI info, ImprovementDescriptionMode mode)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
void disruptionFinished()
boolean hasPostDemandSection(boolean hasDemand, IndustryTooltipMode mode)
boolean usingExistingStation
static float IMPROVE_STABILITY_BONUS
RaidDangerLevel adjustCommodityDangerLevel(String commodityId, RaidDangerLevel level)
void matchCommanderToAICore(String aiCore)
static float DEFENSE_BONUS_FORTRESS
RaidDangerLevel adjustItemDangerLevel(String itemId, String data, RaidDangerLevel level)
void matchStationAndCommanderToCurrentIndustry()
void applyAlphaCoreModifiers()
void applyImproveModifiers()
static float DEFENSE_BONUS_BASE
String getUnavailableReason()
void addAlphaCoreDescription(TooltipMakerAPI tooltip, AICoreDescriptionMode mode)
CampaignFleetAPI stationFleet
void addPostDemandSection(TooltipMakerAPI tooltip, boolean hasDemand, IndustryTooltipMode mode)
SectorEntityToken getStationEntity()
void ensureStationEntityIsSetOrCreated()
SectorEntityToken stationEntity
void advance(float amount)
boolean isAvailableToBuild()
void upgradeFinished(Industry previous)
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
static void disrupt(Industry station)
void notifyColonyRenamed()
CampaignFleetAPI getStationFleet()
void notifyBeingRemoved(MarketInteractionMode mode, boolean forUpgrade)
int getBaseStabilityMod()
static float DEFENSE_BONUS_BATTLESTATION
int getHumanCommanderLevel()
AvailableOfficer createOfficer(boolean isMerc, MarketAPI market, Random random)
static CampaignFleetAPI createFleet(FleetParamsV3 params)
static final String TRANSPONDER
static final String SUPPLIES
static final String ALPHA_CORE
static final String STATION_BUILT_FROM_INDUSTRY
static final String REMNANTS
static final String PATROL_SMALL
static final String VASTBULK
static final String TAG_STARFORTRESS
static final String TAG_BATTLESTATION
static final String TAG_SPACEPORT
static final String STATION_BASE_FLEET
static final String STATION_FLEET
static final String STATION_MARKET
static final String GROUND_DEFENSES_MOD
static void integrateAndAdaptCoreForAIFleet(FleetMemberAPI member)
static AICoreOfficerPlugin getAICoreOfficerPlugin(String commodityId)
static Color getHighlightColor()
static float getShipQuality(MarketAPI market)
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
CommoditySpecAPI getCommoditySpec(String commodityId)
PersonAPI createPerson(String aiCoreId, String factionId, Random random)
void setName(String name)
void setHidden(Boolean hidden)
void setAbortDespawn(Boolean abortDespawn)
void setStationMode(Boolean stationMode)
List< FleetMemberAPI > getMembersWithFightersCopy()
FleetMemberAPI getFlagship()
void setAI(CampaignFleetAIAPI campaignFleetAI)
FleetDataAPI getFleetData()
FleetInflater getInflater()
void setNoFactionInName(boolean noFactionInName)
void addFleetMember(FleetMemberAPI member)
List< FleetMemberAPI > getMembersListCopy()
void setQuality(float quality)
void addEventListener(FleetEventListener listener)
void removeEventListener(FleetEventListener listener)
void addEntity(SectorEntityToken entity)
CustomCampaignEntityAPI addCustomEntity(String id, String name, String type, String factionId)
void removeEntity(SectorEntityToken entity)
FactionAPI getFaction(String factionId)
LocationAPI getContainingLocation()
StatBonus getDetectedRangeMod()
void setExpired(boolean expired)
void setCircularOrbit(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
void setName(String name)
boolean hasTag(String tag)
void setCircularOrbitWithSpin(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays, float minSpin, float maxSpin)
MemoryAPI getMemoryWithoutUpdate()
void setMarket(MarketAPI market)
AbilityPlugin getAbility(String id)
void addAbility(String id)
void setDisrupted(float days)
IndustrySpecAPI getSpec()
LocationAPI getContainingLocation()
Set< SectorEntityToken > getConnectedEntities()
MutableMarketStatsAPI getStats()
MutableStatWithTempMods getStability()
List< Industry > getIndustries()
SectorEntityToken getPrimaryEntity()
void set(String key, Object value)
MutableCharacterStatsAPI getStats()
List< String > getModuleSlots()
ShipVariantAPI getModuleVariant(String slotId)
boolean hasHullMod(String id)
ShipVariantAPI getVariant()
void setCaptain(PersonAPI commander)
void setShipName(String name)
FleetMemberStatusAPI getStatus()
void setFlagship(boolean isFlagship)
void setDetached(int index, Boolean detached)
void setPermaDetached(int index, Boolean detached)
void setHullFraction(float fraction)
DynamicStatsAPI getDynamic()
boolean hasTag(String tag)
StatBonus getMod(String id)