1package com.fs.starfarer.api.impl.campaign.intel.inspection;
4import java.util.ArrayList;
6import java.util.Random;
9import org.lwjgl.input.Keyboard;
11import com.fs.starfarer.api.Global;
12import com.fs.starfarer.api.campaign.CampaignFleetAPI;
13import com.fs.starfarer.api.campaign.FactionAPI;
14import com.fs.starfarer.api.campaign.ReputationActionResponsePlugin.ReputationAdjustmentResult;
15import com.fs.starfarer.api.campaign.SectorEntityToken;
16import com.fs.starfarer.api.campaign.econ.Industry;
17import com.fs.starfarer.api.campaign.econ.MarketAPI;
18import com.fs.starfarer.api.characters.PersonAPI;
19import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin;
20import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact;
21import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
22import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
23import com.fs.starfarer.api.impl.campaign.DebugFlags;
24import com.fs.starfarer.api.impl.campaign.fleets.RouteLocationCalculator;
25import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
26import com.fs.starfarer.api.impl.campaign.ids.Factions;
27import com.fs.starfarer.api.impl.campaign.ids.Tags;
28import com.fs.starfarer.api.impl.campaign.intel.raid.RaidAssignmentAI;
29import com.fs.starfarer.api.impl.campaign.intel.raid.RaidIntel;
30import com.fs.starfarer.api.impl.campaign.intel.raid.RaidIntel.RaidDelegate;
31import com.fs.starfarer.api.impl.campaign.procgen.themes.RouteFleetAssignmentAI;
32import com.fs.starfarer.api.ui.Alignment;
33import com.fs.starfarer.api.ui.ButtonAPI;
34import com.fs.starfarer.api.ui.IntelUIAPI;
35import com.fs.starfarer.api.ui.LabelAPI;
36import com.fs.starfarer.api.ui.SectorMapAPI;
37import com.fs.starfarer.api.ui.TooltipMakerAPI;
38import com.fs.starfarer.api.util.Misc;
44 public static interface InspectionEndedListener {
45 public void notifyInspectionEnded(HegemonyInspectionOutcome
outcome);
48 public static enum HegemonyInspectionOutcome {
49 COLONY_NO_LONGER_EXISTS,
52 FOUND_EVIDENCE_NO_CORES,
57 public static enum AntiInspectionOrders {
73 protected AntiInspectionOrders
orders = AntiInspectionOrders.COMPLY;
81 protected HegemonyInspectionOutcome
outcome;
82 protected Random
random =
new Random();
94 String
id = curr.getAICoreId();
104 float orgDur = 20f + 10f * (float) Math.random();
115 if (gather ==
null || raidJump ==
null) {
120 float successMult = 0.5f;
125 assemble.
setAbortFP(inspectionFP * successMult);
131 travel.
setAbortFP(inspectionFP * successMult);
213 super.advanceImpl(amount);
223 protected transient ReputationAdjustmentResult
repResult =
null;
228 new RepActionEnvelope(RepActions.MAKE_HOSTILE_AT_BEST,
229 null,
null,
null,
false,
false),
240 CustomRepImpact impact =
new CustomRepImpact();
241 impact.delta = delta;
243 new RepActionEnvelope(RepActions.CUSTOM,
244 impact,
null,
null,
false,
false),
254 String base =
"Hegemony AI Inspection";
255 if (
outcome == HegemonyInspectionOutcome.TASK_FORCE_DESTROYED ||
256 outcome == HegemonyInspectionOutcome.COLONY_NO_LONGER_EXISTS)
return base +
" - Failed";
257 if (
outcome !=
null)
return base +
" - Completed";
272 if (mode == ListInfoMode.IN_DESC) initPad = opad;
281 orders = AntiInspectionOrders.RESIST;
286 info.
addPara(
"Target: %s", initPad, tc,
293 null,
null, info, tc, isUpdate, initPad);
299 info.
addPara(
"Target: %s", initPad, tc,
302 info.
addPara(
"Arrived in-system", tc, initPad);
311 String cores =
"cores";
312 if (num == 1) cores =
"core";
313 info.
addPara(
"%s AI " + cores +
" confiscated", initPad, tc, h,
"" + num);
316 if (
outcome == HegemonyInspectionOutcome.BRIBED) {
317 info.
addPara(
"No AI cores found", initPad, tc, h,
"" + num);
318 }
else if (
outcome == HegemonyInspectionOutcome.FOUND_EVIDENCE_NO_CORES) {
320 info.
addPara(
"Operations at %s disrupted", initPad, tc,
323 }
else if (
outcome == HegemonyInspectionOutcome.CONFISCATE_CORES) {
328 null,
null, info, tc, isUpdate, initPad);
345 info.
addPara(
"Target: %s", initPad, tc,
349 if (eta > 1 &&
outcome ==
null) {
351 info.
addPara(
"Estimated %s " + days +
" until arrival",
352 initPad, tc, h,
"" + (
int)Math.round(eta));
355 if (hostile ||
orders == AntiInspectionOrders.RESIST) {
356 info.
addPara(
"Defenders will resist", tc, initPad);
357 }
else if (
orders == AntiInspectionOrders.COMPLY) {
358 info.
addPara(
"Defenders will comply", tc, initPad);
359 }
else if (
orders == AntiInspectionOrders.BRIBE) {
360 info.
addPara(
"Funds allocated for bribe", tc, initPad);
363 info.
addPara(
"Inspection under way", tc, initPad);
368 String cores =
"cores";
369 if (num == 1) cores =
"core";
370 info.
addPara(
"%s AI " + cores +
" confiscated", initPad, tc, h,
"" + num);
372 }
else if (
outcome == HegemonyInspectionOutcome.TASK_FORCE_DESTROYED) {
383 for (RaidStage stage :
stages) {
394 super.createIntelInfo(info, mode);
418 String fleets =
"fleets";
419 if (numFleets == 1) fleets =
"fleet";
422 " targeting %s for an inspection due to the suspected use of AI cores there." +
423 " The task force is projected to be " + strDesc +
" and is likely comprised of " +
424 "" + numFleets +
" " + fleets +
".",
436 for (RaidStage stage :
stages) {
437 stage.showStageInfo(info);
459 "It is certain to find any AI cores currently in use.", opad);
462 info.
addPara(
"You've allocated enough funds to ensure the inspection " +
463 "will produce a satisfactory outcome all around.", opad);
470 info.
addPara(
"Your space and ground forces will attempt to resist the inspection.", opad);
477 (
int)(width), 20f, opad * 2f);
480 info.
addPara(
"The inspection task force is in-system and there's no time to implement new orders.", opad);
488 null,
null, info, tc,
false, opad);
504 super.sendUpdateIfPlayerHasIntel(
listInfoParam, onlyIfImportant, sendIfHidden);
511 Set<String> tags = super.getIntelTags(map);
522 outcome = HegemonyInspectionOutcome.COLONY_NO_LONGER_EXISTS;
524 outcome = HegemonyInspectionOutcome.TASK_FORCE_DESTROYED;
551 return super.getMapLocation(map);
static SettingsAPI getSettings()
static SectorAPI getSector()
static void addAdjustmentMessage(float delta, FactionAPI faction, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, boolean withCurrent, float pad)
static boolean HEGEMONY_INSPECTION_DEBUG
static boolean FAST_RAIDS
static JumpPointAPI findJumpPointToUse(CampaignFleetAPI fleet, SectorEntityToken from)
static final String HEGEMONY
static final String PLAYER
void unindent(TooltipMakerAPI info)
transient Object listInfoParam
Object getListInfoParam()
Color getBulletColorForMode(ListInfoMode mode)
void setImportant(Boolean important)
static String getDaysString(float days)
void bullet(TooltipMakerAPI info)
List< String > getCoresRemoved()
RouteFleetAssignmentAI createAssignmentAI(CampaignFleetAPI fleet, RouteData route)
void sendUpdateIfPlayerHasIntel(Object listInfoParam, boolean onlyIfImportant, boolean sendIfHidden)
HegemonyInspectionOutcome outcome
void applyRepPenalty(float delta)
static final Object MADE_HOSTILE_UPDATE
void createSmallDescription(TooltipMakerAPI info, float width, float height)
static final Object OUTCOME_UPDATE
void notifyRaidEnded(RaidIntel raid, RaidStageStatus status)
boolean isEnteredSystem()
void buttonPressConfirmed(Object buttonId, IntelUIAPI ui)
AntiInspectionOrders getOrders()
InspectionEndedListener listener
void setEnteredSystem(boolean enteredSystem)
void setOrders(AntiInspectionOrders orders)
HIActionStage getActionStage()
HegemonyInspectionOutcome getOutcome()
void setOutcome(HegemonyInspectionOutcome outcome)
void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode)
void makeHostileAndSendUpdate()
SectorEntityToken getMapLocation(SectorMapAPI map)
static final Object ENTERED_SYSTEM_UPDATE
transient ReputationAdjustmentResult repResult
transient String targetOwner
static final String BUTTON_CHANGE_ORDERS
Set< String > getIntelTags(SectorMapAPI map)
List< String > getExpectedCores()
void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode)
HegemonyInspectionIntel(MarketAPI from, MarketAPI target, float inspectionFP)
void setInvestedCredits(int investedCredits)
AntiInspectionOrders orders
void sendInSystemUpdate()
InspectionEndedListener getListener()
void setListener(InspectionEndedListener listener)
List< String > expectedCores
void advanceImpl(float amount)
void setSpawnFP(float spawnFP)
void addSource(MarketAPI source)
void setAbortFP(float abortFP)
static Object UPDATE_RETURNING
void addStage(RaidStage stage)
void addStandardStrengthComparisons(TooltipMakerAPI info, MarketAPI target, FactionAPI targetFaction, boolean withGround, boolean withBombard, String raid, String raids)
void forceFail(boolean withUpdate)
FactionAPI getFactionForUIColors()
int getStageIndex(RaidStage stage)
static Color getTextColor()
static String ucFirst(String str)
static Color getGrayColor()
static Color getHighlightColor()
String getSpriteName(String category, String id)
String getDisplayNameHasOrHave()
String getDisplayNameWithArticleWithoutArticle()
String getDisplayNameWithArticle()
boolean isHostileTo(FactionAPI other)
String getDisplayNameIsOrAre()
ReputationAdjustmentResult adjustPlayerReputation(Object action, String factionId)
FactionAPI getPlayerFaction()
IntelManagerAPI getIntelManager()
void addIntel(IntelInfoPlugin plugin)
List< Industry > getIndustries()
StarSystemAPI getStarSystem()
SectorEntityToken getPrimaryEntity()
void showDialog(SectorEntityToken target, String trigger)
void setHighlight(int start, int end)
void setHighlightColors(Color ... colors)