1package com.fs.starfarer.api.impl.campaign.intel.punitive;
4import java.util.ArrayList;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.SectorEntityToken;
10import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.ActionType;
11import com.fs.starfarer.api.campaign.econ.Industry;
12import com.fs.starfarer.api.campaign.econ.MarketAPI;
13import com.fs.starfarer.api.impl.campaign.DebugFlags;
14import com.fs.starfarer.api.impl.campaign.MilitaryResponseScript;
15import com.fs.starfarer.api.impl.campaign.MilitaryResponseScript.MilitaryResponseParams;
16import com.fs.starfarer.api.impl.campaign.command.WarSimScript;
17import com.fs.starfarer.api.impl.campaign.econ.impl.OrbitalStation;
18import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
19import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
20import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
21import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
22import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionIntel.PunExOutcome;
23import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionManager.PunExGoal;
24import com.fs.starfarer.api.impl.campaign.intel.raid.ActionStage;
25import com.fs.starfarer.api.impl.campaign.intel.raid.RaidIntel.RaidStageStatus;
26import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseAssignmentAI.FleetActionDelegate;
27import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD;
28import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.BombardType;
29import com.fs.starfarer.api.ui.TooltipMakerAPI;
30import com.fs.starfarer.api.util.Misc;
36 protected List<MilitaryResponseScript>
scripts =
new ArrayList<MilitaryResponseScript>();
51 super.advance(amount);
67 float duration = 100f;
69 MilitaryResponseParams params =
new MilitaryResponseParams(ActionType.HOSTILE,
79 MilitaryResponseParams defParams =
new MilitaryResponseParams(ActionType.HOSTILE,
107 if (
status != RaidStageStatus.ONGOING)
return;
116 status = RaidStageStatus.FAILURE;
126 PunExGoal goal =
intel.getGoal();
127 if (goal == PunExGoal.BOMBARD) {
128 return "bombarding " + market.
getName();
130 return "raiding " + market.
getName();
135 PunExGoal goal =
intel.getGoal();
136 if (goal == PunExGoal.BOMBARD) {
137 return "moving in to bombard " + market.
getName();
139 return "moving in to raid " + market.
getName();
146 PunExGoal goal =
intel.getGoal();
148 status = RaidStageStatus.SUCCESS;
150 if (goal == PunExGoal.BOMBARD) {
158 if (cost <= maxCost) {
160 intel.setOutcome(PunExOutcome.SUCCESS);
162 intel.setOutcome(PunExOutcome.BOMBARD_FAIL);
163 status = RaidStageStatus.FAILURE;
181 intel.setOutcome(PunExOutcome.SUCCESS);
183 intel.setOutcome(PunExOutcome.RAID_FAIL);
184 status = RaidStageStatus.FAILURE;
198 if (
intel.getOutcome() !=
null) {
199 if (
status == RaidStageStatus.SUCCESS) {
200 intel.sendOutcomeUpdate();
215 if (defensiveStr >= str) {
216 status = RaidStageStatus.FAILURE;
223 intel.
setOutcome(PunExOutcome.TASK_FORCE_DEFEATED);
228 if (station !=
null) {
244 for (RouteData route : routes) {
263 if (curr < index)
return;
265 if (
status == RaidStageStatus.ONGOING && curr == index) {
266 info.
addPara(
"The expedition forces are currently in-system.", opad);
272 switch (
intel.getOutcome()) {
274 info.
addPara(
"The ground defenses of " +
target.
getName() +
" were sufficient to prevent bombardment.", opad);
277 info.
addPara(
"The raiding forces have been repelled by the ground defenses of " +
target.
getName() +
".", opad);
280 if (
intel.goal == PunExGoal.BOMBARD) {
282 info.
addPara(
"The expeditionary force has successfully bombarded " +
target.
getName() +
", destroying the colony outright.", opad);
284 info.
addPara(
"The expeditionary force has successfully bombarded " +
target.
getName() +
".", opad);
286 }
else if (
intel.getTargetIndustry() !=
null) {
287 info.
addPara(
"The expeditionary force has disrupted " +
288 intel.getTargetIndustry().getCurrentName() +
" operations for %s days.",
289 opad, h,
"" + (
int)Math.round(
intel.getTargetIndustry().getDisruptedDays()));
292 case TASK_FORCE_DEFEATED:
293 info.
addPara(
"The expeditionary force has been defeated by the defenders of " +
296 case COLONY_NO_LONGER_EXISTS:
297 info.
addPara(
"The expedition has been aborted.", opad);
301 }
else if (
status == RaidStageStatus.SUCCESS) {
302 info.
addPara(
"The expeditionary force has succeeded.", opad);
304 info.
addPara(
"The expeditionary force has failed.", opad);
315 return "orbiting " + from.
getName();
static SettingsAPI getSettings()
static boolean PUNITIVE_EXPEDITION_DEBUG
static boolean FAST_RAIDS
static float getFactionStrength(String factionId, StarSystemAPI system)
static float getStationStrength(FactionAPI faction, StarSystemAPI system, SectorEntityToken from)
static void disrupt(Industry station)
static boolean isPlayerInSpawnRange(SectorEntityToken from)
List< RouteData > getRoutesForSource(String source)
static RouteManager getInstance()
static final String RECENTLY_RAIDED
static final String RECENTLY_BOMBARDED
boolean isPlayerTargeted()
void advance(float amount)
String getRaidApproachText(CampaignFleetAPI fleet, MarketAPI market)
String getRaidPrepText(CampaignFleetAPI fleet, SectorEntityToken from)
String getRaidDefaultText(CampaignFleetAPI fleet)
void showStageInfo(TooltipMakerAPI info)
List< MilitaryResponseScript > scripts
void performRaid(CampaignFleetAPI fleet, MarketAPI market)
PEActionStage(PunitiveExpeditionIntel raid, MarketAPI target)
String getRaidActionText(CampaignFleetAPI fleet, MarketAPI market)
boolean canRaid(CampaignFleetAPI fleet, MarketAPI market)
String getRaidInSystemText(CampaignFleetAPI fleet)
void setOutcome(PunExOutcome outcome)
PunExOutcome getOutcome()
void giveReturnOrdersToStragglers(List< RouteData > stragglers)
List< RouteData > getRoutes()
void abortIfNeededBasedOnFP(boolean giveReturnOrders)
String getRouteSourceId()
int getStageIndex(RaidStage stage)
float getRaidFPAdjusted()
boolean doIndustryRaid(FactionAPI faction, float attackerStr, Industry industry, float durMult)
void doBombardment(FactionAPI faction, BombardType type)
static int getBombardmentCost(MarketAPI market, CampaignFleetAPI fleet)
static float getRaidStr(CampaignFleetAPI fleet)
static Color getTextColor()
static float FP_TO_GROUND_RAID_STR_APPROX_MULT
static Color getGrayColor()
static float getDays(float amount)
static Color getHighlightColor()
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
static Industry getStationIndustry(MarketAPI market)
static float FP_TO_BOMBARD_COST_APPROX_MULT
static void setRaidedTimestamp(MarketAPI market)
float getFloat(String key)
void addScript(EveryFrameScript script)
SectorEntityToken getCenter()
LocationAPI getContainingLocation()
MemoryAPI getMemoryWithoutUpdate()
StarSystemAPI getStarSystem()
SectorEntityToken getPrimaryEntity()