1package com.fs.starfarer.api.impl.campaign.intel.group;
3import java.util.ArrayList;
5import java.util.Random;
10import org.lwjgl.util.vector.Vector2f;
12import com.fs.starfarer.api.Global;
13import com.fs.starfarer.api.campaign.CampaignFleetAPI;
14import com.fs.starfarer.api.campaign.FactionAPI;
15import com.fs.starfarer.api.campaign.LocationAPI;
16import com.fs.starfarer.api.campaign.SectorEntityToken;
17import com.fs.starfarer.api.campaign.StarSystemAPI;
18import com.fs.starfarer.api.campaign.econ.Industry;
19import com.fs.starfarer.api.campaign.econ.MarketAPI;
20import com.fs.starfarer.api.campaign.rules.MemoryAPI;
21import com.fs.starfarer.api.impl.campaign.command.WarSimScript;
22import com.fs.starfarer.api.impl.campaign.fleets.RouteLocationCalculator;
23import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
24import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.OptionalFleetData;
25import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
26import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteFleetSpawner;
27import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
28import com.fs.starfarer.api.impl.campaign.ids.Conditions;
29import com.fs.starfarer.api.impl.campaign.ids.Factions;
30import com.fs.starfarer.api.impl.campaign.ids.Industries;
31import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
32import com.fs.starfarer.api.impl.campaign.ids.Tags;
33import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin;
34import com.fs.starfarer.api.impl.campaign.intel.group.GenericRaidFGI.GenericRaidParams;
35import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
36import com.fs.starfarer.api.impl.campaign.procgen.themes.RouteFleetAssignmentAI.TravelState;
37import com.fs.starfarer.api.ui.LabelAPI;
38import com.fs.starfarer.api.ui.SectorMapAPI;
39import com.fs.starfarer.api.ui.TooltipMakerAPI;
40import com.fs.starfarer.api.util.CountingMap;
41import com.fs.starfarer.api.util.Misc;
59 public static interface FGIEventListener {
73 public static boolean DEBUG =
false;
76 protected Random
random =
new Random();
77 protected List<FGAction>
actions =
new ArrayList<FGAction>();
80 protected List<CampaignFleetAPI>
fleets =
new ArrayList<CampaignFleetAPI>();
84 protected List<CampaignFleetAPI>
spawning =
new ArrayList<CampaignFleetAPI>();
116 public float getETAUntil(String actionId,
boolean untilEndOfAction) {
119 if (action.getId() !=
null && action.getId().equals(actionId)) {
120 if (untilEndOfAction) {
121 eta += action.getEstimatedDaysToComplete();
125 eta += action.getEstimatedDaysToComplete();
158 return route !=
null &&
route.getElapsed() <= 0f &&
route.getDelay() > 0;
167 route.setDelay(delay);
173 return route.getDelay();
186 super.advance(amount);
191 if (
route ==
null)
return;
221 RouteSegment curr =
route.getCurrent();
229 if (
route.isExpired()) {
278 return action !=
null && action.
getId() !=
null;
290 List<CampaignFleetAPI>
remove =
new ArrayList<CampaignFleetAPI>();
292 if (!fleet.isAlive()) {
302 List<CampaignFleetAPI>
remove =
new ArrayList<CampaignFleetAPI>();
305 float spawnFP = fleet.getMemoryWithoutUpdate().getFloat(
KEY_SPAWN_FP);
306 if (!fleet.isAlive()) {
312 totalFP += fleet.getFleetPoints();
326 List<CampaignFleetAPI>
remove =
new ArrayList<CampaignFleetAPI>();
330 fleetLocs.
add(fleet.getContainingLocation());
336 int count = fleetLocs.
getCount(loc);
337 if (count > maxCount) {
338 withMostFleets = loc;
343 if (withMostFleets ==
null)
return;
345 Vector2f com =
new Vector2f();
348 if (fleet.getContainingLocation() != withMostFleets)
continue;
349 float w = fleet.getFleetPoints();
350 Vector2f loc =
new Vector2f(fleet.getLocation());
352 Vector2f.add(com, loc, com);
356 if (weight < 1f) weight = 1f;
357 com.scale(1f / weight);
360 boolean canBeStragglers = action !=
null &&
363 int maybeStragglers = 0;
365 boolean potentialStraggler = fleet.getContainingLocation() != withMostFleets;
366 if (!potentialStraggler) {
367 potentialStraggler |=
Misc.
getDistance(fleet.getLocation(), com) > 4000;
369 if (fleet.getMemoryWithoutUpdate().getBoolean(
NEVER_STRAGGLER) || !canBeStragglers) {
370 potentialStraggler =
false;
373 MemoryAPI mem = fleet.getMemoryWithoutUpdate();
424 if (!
actions.get(0).isActionFinished()) {
425 actions.get(0).setActionFinished(
true);
436 if (!wasEnding && isAbort) {
470 protected void createRoute(String factionId,
int approximateTotalDifficultyPoints,
474 protected void createRoute(String factionId,
int approximateTotalDifficultyPoints,
476 OptionalFleetData extra =
new OptionalFleetData();
479 if (params !=
null && params.source !=
null) {
486 int before =
route.getSegments().size();
487 action.addRouteSegment(
route);
488 int after =
route.getSegments().size();
489 for (
int i = before; i < after; i++) {
490 route.getSegments().get(i).custom = action;
509 if (
route ==
null ||
route.getCurrent() ==
null) {
514 RouteSegment curr =
route.getCurrent();
518 if (action == curr.custom) {
530 System.out.println(getClass().getSimpleName() +
": about to spawn fleets");
543 fleet.getContainingLocation().removeEntity(fleet);
548 int fp = fleet.getFleetPoints();
555 actions.get(0).notifyFleetsSpawnedMidSegment(curr);
562 if (fleet ==
null)
return;
572 spawnDelay = 0.25f + (float) Math.random() * 0.25f;
613 for (RouteSegment seg :
getRoute().getSegments()) {
614 if (seg.custom == action)
return seg;
621 if (action !=
null) {
627 if (curr.getId() !=
null && curr.getId().equals(
id)) {
640 if (
actions.isEmpty())
return null;
661 if (segment.isInSystem()) {
662 return TravelState.IN_SYSTEM;
665 if (segment.hasLeaveSystemPhase() && segment.getLeaveProgress() < 1f) {
666 return TravelState.LEAVING_SYSTEM;
668 if (segment.hasEnterSystemPhase() && segment.getEnterProgress() > 0f) {
669 return TravelState.ENTERING_SYSTEM;
672 return TravelState.IN_HYPER_TRANSIT;
681 case ENTERING_SYSTEM: {
682 if (segment.to !=
null) {
697 if (state == TravelState.LEAVING_SYSTEM) {
698 float p = current.getLeaveProgress();
700 if (jp ==
null) jp = current.from;
703 else if (state == TravelState.ENTERING_SYSTEM) {
704 float p = current.getEnterProgress();
706 if (jp ==
null) jp = current.to;
709 else if (state == TravelState.IN_SYSTEM) {
710 float p = current.getTransitProgress();
712 current.from, current.to);
714 else if (state == TravelState.IN_HYPER_TRANSIT) {
715 float p = current.getTransitProgress();
802 if (factionId !=
null) {
808 return points * mult;
818 String factionId =
null;
829 System.out.println(
"---------------------------------");
830 System.out.println(
"FACTION: " + factionId);
832 System.out.println(
"Difficulty\tStd\tQuality\tQuantity");
833 for (
int j = 0; j < 1; j++) {
834 for (
int i = 1; i <= 10; i++) {
836 Vector2f loc =
new Vector2f();
838 float strStandard = 0;
839 float strQuality = 0;
840 float strQuantity = 0;
873 System.out.println(
"" + i +
"\t\t" + (
int)strStandard +
"\t" + (
int)strQuality +
"\t" + (
int)strQuantity);
875 System.out.println(
"---------------------------------");
886 ListInfoMode mode,
float initPad);
888 ListInfoMode mode,
float initPad);
902 Set<String> tags = super.getIntelTags(map);
907 if (system !=
null &&
923 return "Fleet Group Movement";
927 return " - Successful";
937 return " - Defeated";
983 return super.getSortTier();
1000 List<ArrowData> result =
new ArrayList<ArrowData>();
1002 ArrowData arrow =
new ArrowData(src, dest);
1022 float initPad = pad;
1023 if (mode == ListInfoMode.IN_DESC) initPad = opad;
1030 boolean isUpdate = param !=
null;
1048 if (destHL !=
null) {
1056 String hl = systemName;
1058 if (hl.endsWith(
" system")) {
1059 hl = hl.replaceAll(
" system",
"");
1061 if (hl.endsWith(
" nebula")) {
1062 hl = hl.replaceAll(
" nebula",
"");
1064 if (hl.endsWith(
" star system")) {
1065 hl = hl.replaceAll(
" star system",
"");
1071 public static enum ETAType {
1084 if (type == ETAType.DEPLOYMENT) {
1085 if ((
int) eta <= 0) {
1086 info.
addPara(
"Fleet deployment imminent", tc, initPad);
1088 String days = (int)eta == 1 ?
"day" :
"days";
1089 info.
addPara(
"Estimated %s " + days +
" until fleet deployment",
1090 initPad, tc, h,
"" + (
int) eta);
1095 if (type == ETAType.DEPARTURE) {
1096 if ((
int) eta <= 0) {
1097 info.
addPara(
"Departure imminent", tc, initPad);
1099 String days = (int)eta == 1 ?
"day" :
"days";
1100 info.
addPara(
"Estimated %s " + days +
" until departure",
1101 initPad, tc, h,
"" + (
int) eta);
1107 if (withDepartedText && eta <= 0) {
1109 label = info.
addPara(
"Operating in the " + destName, tc, initPad);
1111 if (destHL !=
null && label !=
null) {
1116 if (withDepartedText) {
1117 String pre =
"Departed for ";
1118 if (type == ETAType.RETURNING) {
1119 pre =
"Returning to ";
1121 label = info.
addPara(pre + destName, tc, initPad);
1123 if (destHL !=
null && label !=
null) {
1129 if ((
int) eta > 0) {
1130 String days = (int)eta == 1 ?
"day" :
"days";
1131 String post =
" until arrival";
1132 if (type == ETAType.RETURNING) {
1133 post =
" until return";
1135 if (!withDepartedText) {
1136 if (type == ETAType.RETURNING) post +=
" to " + destName;
1137 else if (type == ETAType.ARRIVING) post +=
" at " + destName;
1139 label = info.
addPara(
"Estimated %s " + days + post, initPad, tc, h,
"" + (
int) eta);
1141 if (!withDepartedText && destHL !=
null && label !=
null) {
1146 String pre =
"Arrival at ";
1147 if (type == ETAType.RETURNING) {
1150 label = info.
addPara(pre + destName +
" is imminent", tc, initPad);
1152 if (destHL !=
null && label !=
null) {
1179 List<MarketAPI> targets, String safeStr, String riskStr, String riskStrHighlight) {
1182 float raidStr =
getRoute().getExtra().getStrengthModifiedByDamage();
1185 List<MarketAPI> safe =
new ArrayList<MarketAPI>();
1186 List<MarketAPI> unsafe =
new ArrayList<MarketAPI>();
1189 if (defensiveStr > raidStr * 1.25f) {
1196 if (safe.size() == targets.size()) {
1197 info.
addPara(
"However, all colonies " + safeStr +
", " +
1198 "owing to their orbital defenses.", opad);
1200 info.
addPara(
"The following colonies " + riskStr, opad,
1216 float raidStr =
getRoute().getExtra().getStrengthModifiedByDamage();
1217 float defenderStr = 0f;
1220 if (raidStr < defenderStr * 0.75f) {
1222 }
else if (raidStr < defenderStr * 1.25f) {
1234 String forces, String outcomeFailure, String outcomeUncertain, String outcomeSuccess) {
1237 float raidStr =
getRoute().getExtra().getStrengthModifiedByDamage();
1238 float defenderStr = 0f;
1243 String
fleets =
"fleets";
1244 if (numFleets == 1)
fleets =
"fleet";
1246 String defenderDesc =
"";
1247 String defenderHighlight =
"";
1248 Color defenderHighlightColor = h;
1250 boolean potentialDanger =
false;
1251 String outcome =
null;
1252 if (raidStr < defenderStr * 0.75f) {
1253 defenderDesc =
"The defending fleets are superior";
1255 defenderHighlight =
"superior";
1256 outcome = outcomeFailure;
1257 }
else if (raidStr < defenderStr * 1.25f) {
1258 defenderDesc =
"The defending fleets are evenly matched";
1259 defenderHighlightColor = h;
1260 defenderHighlight =
"evenly matched";
1261 outcome = outcomeUncertain;
1262 potentialDanger =
true;
1264 defenderDesc =
"The defending fleets are outmatched";
1266 defenderHighlight =
"outmatched";
1267 outcome = outcomeSuccess;
1268 potentialDanger =
true;
1271 if (outcome !=
null) {
1272 defenderDesc +=
", and " + outcome +
".";
1274 defenderDesc +=
".";
1277 defenderDesc =
" " + defenderDesc;
1279 if (system ==
null) defenderDesc =
"";
1283 "projected to be %s and likely comprised of %s " +
fleets +
"." + defenderDesc,
1284 opad, h, strDesc,
"" + numFleets);
1285 label.
setHighlight(strDesc,
"" + numFleets, defenderHighlight);
1288 return potentialDanger;
1297 String forces, String outcomeFailure, String outcomeUncertain, String outcomeSuccess) {
1300 float raidStr =
getRoute().getExtra().getStrengthModifiedByDamage();
1301 float defenderStr = 0f;
1309 String
fleets =
"fleets";
1310 if (numFleets == 1)
fleets =
"fleet";
1312 String defenderDesc =
"";
1313 String defenderHighlight =
"";
1314 Color defenderHighlightColor = h;
1316 boolean potentialDanger =
false;
1317 String outcome =
null;
1318 if (raidStr < defenderStr * 0.75f) {
1319 defenderDesc =
"The defending forces are superior";
1321 defenderHighlight =
"superior";
1322 outcome = outcomeFailure;
1323 }
else if (raidStr < defenderStr * 1.25f) {
1324 defenderDesc =
"The defending forces are evenly matched";
1325 defenderHighlightColor = h;
1326 defenderHighlight =
"evenly matched";
1327 outcome = outcomeUncertain;
1328 potentialDanger =
true;
1330 defenderDesc =
"The defending forces are outmatched";
1332 defenderHighlight =
"outmatched";
1333 outcome = outcomeSuccess;
1334 potentialDanger =
true;
1337 if (outcome !=
null) {
1338 defenderDesc +=
", and " + outcome +
".";
1340 defenderDesc +=
".";
1343 defenderDesc =
" " + defenderDesc;
1345 if (system ==
null) defenderDesc =
"";
1349 "projected to be %s and likely comprised of %s " +
fleets +
"." + defenderDesc,
1350 opad, h, strDesc,
"" + numFleets);
1351 label.
setHighlight(strDesc,
"" + numFleets, defenderHighlight);
1354 return potentialDanger;
static SectorAPI getSector()
static float getStationStrength(FactionAPI faction, StarSystemAPI system, SectorEntityToken from)
static float getEnemyStrength(String factionId, StarSystemAPI system)
static int setLocation(CampaignFleetAPI fleet, float daysElapsed, float maxDays, int overflowIndex, boolean onlyAdjustIntervals, float[] intervals, SectorEntityToken ... sequence)
static JumpPointAPI findJumpPointToUse(CampaignFleetAPI fleet, SectorEntityToken from)
RouteData addRoute(String source, MarketAPI market, Long seed, OptionalFleetData extra, RouteFleetSpawner spawner)
static RouteManager getInstance()
void removeRoute(RouteData route)
static final String DECIVILIZED
static final String LUDDIC_PATH
static final String TRITACHYON
static final String HEGEMONY
static final String DIKTAT
static final String LUDDIC_CHURCH
static final String PERSEAN
static final String PIRATES
static final String REMNANTS
static final String PLAYER
static final String INDEPENDENT
static final String HIGHCOMMAND
static final String MILITARYBASE
static final String MEMORY_KEY_FLEET_DO_NOT_GET_SIDETRACKED
boolean isSendingUpdate()
static void addMarketTable(TooltipMakerAPI info, Color base, Color dark, Color bright, List< MarketAPI > markets, float width, float pad)
void unindent(TooltipMakerAPI info)
static String getSoundStandardUpdate()
void sendUpdateIfPlayerHasIntel(Object listInfoParam, TextPanelAPI textPanel)
Object getListInfoParam()
Color getBulletColorForMode(ListInfoMode mode)
void bullet(TooltipMakerAPI info)
static String getSoundMajorPosting()
Color getTitleColor(ListInfoMode mode)
LocationAPI spawnLocation
float groupAbortsMissionFPFraction
List< CampaignFleetAPI > fleets
boolean isInPreLaunchDelay()
abstract SectorEntityToken getSource()
void finish(boolean isAbort)
SectorEntityToken getMapLocation(SectorMapAPI map)
float getGroupAbortsMissionFPFraction()
float getETAUntil(String actionId, boolean untilEndOfAction)
FGIEventListener getListener()
Set< String > getIntelTags(SectorMapAPI map)
String getSmallDescriptionTitle()
void addArrivedBulletPoint(String destName, Color destHL, TooltipMakerAPI info, Color tc, float initPad)
void createRoute(String factionId, int approximateTotalDifficultyPoints, int approximateNumberOfFleets, Object custom)
FGIEventListener listener
void notifyActionFinished(FGAction action)
void advance(float amount)
void setFleetAbortsMissionFPFraction(float fleetAbortsMissionFPFraction)
FGAction getCurrentAction()
boolean shouldCancelRouteAfterDelayCheck(RouteData route)
void giveFleetsReturnAssignments()
boolean isFailedButNotDefeated()
void addETABulletPoints(String destName, Color destHL, boolean withDepartedText, float eta, ETAType type, TooltipMakerAPI info, Color tc, float initPad)
int getRelativeFGStrength(StarSystemAPI target)
static String FLEET_LAUNCH_UPDATE
List< ArrowData > getArrowData(SectorMapAPI map)
void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode)
float getDelayRemaining()
static final String KEY_STRAGGLER_RETURN_COUNTDOWN
void setTotalFPSpawned(float totalFPSpawned)
void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode)
String getNameWithNoType(String systemName)
void createRoute(String factionId, int approximateTotalDifficultyPoints, int approximateNumberOfFleets, Object custom, GenericRaidParams params)
abstract void addUpdateBulletPoints(TooltipMakerAPI info, Color tc, Object param, ListInfoMode mode, float initPad)
void showMarketsInDanger(TooltipMakerAPI info, float opad, float width, StarSystemAPI system, List< MarketAPI > targets, String safeStr, String riskStr, String riskStrHighlight)
static LocationAPI getLocationForState(RouteSegment segment, TravelState state)
void removeAction(String id)
boolean isSpawnedFleets()
static String ABORT_UPDATE
float getETAUntil(String actionId)
abstract void spawnFleets()
void addAction(FGAction action, String id)
static TravelState getTravelState(RouteSegment segment)
void setFaction(FactionAPI faction)
void setRandom(Random random)
String getCommMessageSound()
void setListener(FGIEventListener listener)
List< CampaignFleetAPI > spawning
void pruneDestroyedOrDamagedFleetsAndAbortIfNeeded()
void setPreFleetDeploymentDelay(float delay)
void setReturnLocation(SectorEntityToken returnLocation)
boolean addStrengthDesc(TooltipMakerAPI info, float opad, StarSystemAPI system, String forces, String outcomeFailure, String outcomeUncertain, String outcomeSuccess)
void setGroupAbortsMissionFPFraction(float groupAbortsMissionFPFraction)
static final String KEY_SPAWN_FP
void addAction(FGAction action)
void setFaction(String factionId)
abstract String getBaseName()
boolean sendFleetLaunchUpdate
String getSuccessPostfix()
float getPotentialStragglerCountdownDays()
void giveReturnAssignments(CampaignFleetAPI fleet)
void addFactionBulletPoint(TooltipMakerAPI info, Color tc, float initPad)
static void setLocationAndCoordinates(CampaignFleetAPI fleet, RouteSegment current)
boolean isDoIncrementalSpawn()
abstract void addNonUpdateBulletPoints(TooltipMakerAPI info, Color tc, Object param, ListInfoMode mode, float initPad)
boolean shouldSendIntelUpdateWhenActionFinished(FGAction action)
FGAction getAction(String id)
void reportAboutToBeDespawnedByRouteManager(RouteData route)
CampaignFleetAPI spawnFleet(RouteData route)
float fleetAbortsMissionFPFraction
String getFailurePostfix()
boolean failedButNotDefeated
RouteSegment getSegmentForAction(FGAction action)
float getFleetAbortsMissionFPFraction()
void addAssessmentSection(TooltipMakerAPI info, float width, float height, float opad)
boolean doIncrementalSpawn
static final String NEVER_STRAGGLER
SectorEntityToken returnLocation
FactionAPI getFactionForUIColors()
float getTotalFPSpawned()
void addStatusSection(TooltipMakerAPI info, float width, float height, float opad)
abstract boolean isPlayerTargeted()
IntelSortTier getSortTier()
void setSpawnedFleets(boolean spawnedFleets)
void createSmallDescription(TooltipMakerAPI info, float width, float height)
void setNeverStraggler(CampaignFleetAPI fleet)
boolean shouldRepeat(RouteData route)
boolean isSourceFunctionalMilitaryMarket()
abstract SectorEntityToken getDestination()
int getApproximateNumberOfFleets()
List< CampaignFleetAPI > getFleets()
boolean isCurrent(String id)
void handleIncrementalSpawning(float amount)
static float getApproximateStrengthForTotalDifficultyPoints(String factionId, int points)
void addBasicDescription(TooltipMakerAPI info, float width, float height, float opad)
List< FGAction > getActions()
int approximateNumberOfFleets
static LocationAPI getLocation(RouteSegment segment)
void setElapsed(float elapsed)
void setFailedButNotDefeated(boolean failedButNotDefeated)
SectorEntityToken getReturnLocation()
boolean sourceWasEverMilitaryMarket
static final String KEY_POTENTIAL_STRAGGLER
static void computeSampleFleetStrengths()
void setDoIncrementalSpawn(boolean doIncrementalSpawn)
void setRoute(RouteData route)
boolean addStrengthDesc(TooltipMakerAPI info, float opad, MarketAPI target, String forces, String outcomeFailure, String outcomeUncertain, String outcomeSuccess)
void setApproximateNumberOfFleets(int approximateNumberOfFleets)
CampaignFleetAPI createFleet()
void createQualityFleet(int difficulty, String factionId, Vector2f locInHyper)
void createStandardFleet(int difficulty, String factionId, Vector2f locInHyper)
void createQuantityFleet(int difficulty, String factionId, Vector2f locInHyper)
void add(K key, int quantity)
static Color getTextColor()
static List< MarketAPI > getMarketsInLocation(LocationAPI location, String factionId)
static Color getNegativeHighlightColor()
static void giveStandardReturnToSourceAssignments(CampaignFleetAPI fleet)
static Color getGrayColor()
static String getStrengthDesc(float strAdjustedFP)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static float getDays(float amount)
static long genRandomSeed()
static boolean isHyperspaceAnchor(SectorEntityToken entity)
static Color getHighlightColor()
static float getShipQuality(MarketAPI market)
static void giveStandardReturnAssignments(CampaignFleetAPI fleet, SectorEntityToken where, String text, boolean withClear)
static StarSystemAPI getStarSystemForAnchor(SectorEntityToken anchor)
static Color getPositiveHighlightColor()
float getEffectiveStrength()
void setLocation(float x, float y)
boolean getCustomBoolean(String key)
void addEntity(SectorEntityToken entity)
SectorEntityToken createToken(float x, float y)
void addScript(EveryFrameScript script)
void removeScript(EveryFrameScript script)
FactionAPI getPlayerFaction()
FactionAPI getFaction(String factionId)
LocationAPI getHyperspace()
LocationAPI getContainingLocation()
Vector2f getLocationInHyperspace()
MemoryAPI getMemoryWithoutUpdate()
boolean isPlanetConditionMarketOnly()
StarSystemAPI getStarSystem()
Industry getIndustry(String id)
boolean hasCondition(String id)
SectorEntityToken getPrimaryEntity()
boolean contains(String key)
void set(String key, Object value)
boolean isActionFinished()
void directFleets(float amount)
void notifySegmentFinished(RouteSegment segment)
void setIntel(FleetGroupIntel intel)
void setHighlight(int start, int end)
void setHighlightColor(Color color)
void highlightLast(String substring)
void setHighlightColors(Color ... colors)