1package com.fs.starfarer.api.impl.campaign.procgen.themes;
3import org.lwjgl.util.vector.Vector2f;
5import com.fs.starfarer.api.EveryFrameScript;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.Script;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.CustomCampaignEntityAPI;
10import com.fs.starfarer.api.campaign.CustomEntitySpecAPI;
11import com.fs.starfarer.api.campaign.FleetAssignment;
12import com.fs.starfarer.api.campaign.SectorEntityToken;
13import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
14import com.fs.starfarer.api.campaign.ai.FleetAIFlags;
15import com.fs.starfarer.api.campaign.ai.FleetAssignmentDataAPI;
16import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
17import com.fs.starfarer.api.campaign.econ.MarketAPI;
18import com.fs.starfarer.api.campaign.rules.MemoryAPI;
19import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
20import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
21import com.fs.starfarer.api.impl.campaign.ids.Tags;
22import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD;
23import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.Objectives;
24import com.fs.starfarer.api.plugins.BuildObjectiveTypePicker;
25import com.fs.starfarer.api.plugins.BuildObjectiveTypePicker.BuildObjectiveParams;
26import com.fs.starfarer.api.util.IntervalUtil;
27import com.fs.starfarer.api.util.Misc;
43 protected Boolean
done =
null;
138 float minDist = Float.MAX_VALUE;
149 if (dist < minDist) {
159 boolean ownerHasColonyInSystem =
false;
161 if (curr.getFaction() == objective.getFaction() &&
162 !curr.getFaction().isNeutralFaction()) {
163 ownerHasColonyInSystem =
true;
167 if (ownerHasColonyInSystem)
continue;
171 if (dist < minDist) {
178 if (closest ==
null || minDist > 2000f)
return;
181 if (other ==
fleet)
continue;
183 if (other.isHostileTo(
fleet)) {
189 if (dist < minDist)
return;
194 BuildObjectiveParams params =
new BuildObjectiveParams();
196 params.fleet =
fleet;
197 params.stableLoc = closest;
223 String capText =
"taking control of " + name;
224 String moveText =
"moving to take control of " + name;
229 loc.scale(holdRadius);
235 holdRadius, 1000000f);
274 String capText =
"constructing " + name;
275 String moveText =
"moving to construct " + name;
280 loc.scale(holdRadius);
286 holdRadius, 1000000f);
294 BuildObjectiveParams params =
new BuildObjectiveParams();
296 params.fleet =
fleet;
297 params.stableLoc = target;
369 if (pursueTarget !=
null || fleeingFrom !=
null) {
386 float minDist = Float.MAX_VALUE;
401 if (dist < minDist) {
407 if (closest ==
null || minDist > 2000f)
return;
410 if (other ==
fleet)
continue;
412 if (other.isHostileTo(
fleet)) {
413 VisibilityLevel vis = other.getVisibilityLevelTo(
fleet);
414 boolean canSee = vis == VisibilityLevel.COMPOSITION_AND_FACTION_DETAILS || vis == VisibilityLevel.COMPOSITION_DETAILS;
424 MemoryAPI mem = other.getMemoryWithoutUpdate();
427 if (smuggler || trader)
continue;
429 if (other.getFleetPoints() >
fleet.
getFleetPoints() * 0.25f || other.isStationMode())
return;
433 if (other.isStationMode())
continue;
441 if (dist < minDist)
return;
456 String name = target.
getName();
457 String capText =
"raiding " + name;
458 String moveText =
"moving to raid " + name;
461 if (s !=
null) moveText = s;
464 if (s !=
null) capText = s;
470 loc.scale(holdRadius);
475 holdRadius, 1000000f);
484 boolean raided =
false;
static SettingsAPI getSettings()
static SectorAPI getSector()
static final String PURSUIT_TARGET
static final String NEAREST_FLEEING_FROM
static boolean isPlayerInSpawnRange(SectorEntityToken from)
static final String MEMORY_KEY_SMUGGLER
static final String RECENTLY_PERFORMED_RAID
static final String FLEET_BUSY
static final String MEMORY_KEY_TRADE_FLEET
static final String RECENTLY_SALVAGED
void checkRaid(float amount)
void giveRaidOrder(final MarketAPI target)
void checkObjectiveAction(boolean build)
void advance(float amount)
static String TEMP_BUSY_REASON
abstract void giveInitialAssignments()
void giveCaptureOrder(final SectorEntityToken target)
void giveBuildOrder(final SectorEntityToken target, String type)
FleetActionDelegate getDelegate()
void checkCapture(float amount)
IntervalUtil buildTracker
FleetActionDelegate delegate
static String TEMP_ASSIGNMENT
BaseAssignmentAI(CampaignFleetAPI fleet)
void setDelegate(FleetActionDelegate delegate)
void checkBuild(float amount)
void clearTempAssignments(CampaignFleetAPI fleet)
void doGenericRaid(FactionAPI faction, float attackerStr)
static float getRaidStr(CampaignFleetAPI fleet)
void build(String type, String factionId)
void control(String factionId)
void advance(float amount)
static Vector2f getUnitVectorAtDegreeAngle(float degrees)
static List< CampaignFleetAPI > getNearbyFleets(SectorEntityToken from, float maxDist)
static boolean isWarFleet(CampaignFleetAPI fleet)
static boolean isRaider(CampaignFleetAPI fleet)
static List< MarketAPI > getMarketsInLocation(LocationAPI location, String factionId)
static void fadeAndExpire(SectorEntityToken entity)
static boolean isFleetMadeHostileToFaction(CampaignFleetAPI fleet, FactionAPI faction)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static float getDays(float amount)
static boolean flagHasReason(MemoryAPI memory, String flagKey, String reason)
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
static float getAngleInDegrees(Vector2f v)
GO_TO_LOCATION_AND_DESPAWN
CustomEntitySpecAPI getCustomEntitySpec(String id)
LocationAPI getContainingLocation()
CampaignFleetAIAPI getAI()
FleetAssignmentDataAPI getCurrentAssignment()
void addAssignmentAtStart(FleetAssignment assignment, SectorEntityToken target, float maxDurationInDays, String actionText, Script onCompletion)
boolean isCurrentAssignment(FleetAssignment assignment)
< T > T pickPlugin(Class< T > c, Object params)
List< SectorEntityToken > getEntitiesWithTag(String tag)
void addEntity(SectorEntityToken entity)
SectorEntityToken createToken(float x, float y)
GenericPluginManagerAPI getGenericPlugins()
LocationAPI getContainingLocation()
void setCircularOrbit(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
MemoryAPI getMemoryWithoutUpdate()
boolean areAssignmentsFrozen()
List< FleetAssignmentDataAPI > getAssignmentsCopy()
void removeAssignment(FleetAssignmentDataAPI assignment)
boolean isMaintainingContact()
void setCustom(Object custom)
TacticalModulePlugin getTacticalModule()
AssignmentModulePlugin getAssignmentModule()
SectorEntityToken getTarget()
LocationAPI getContainingLocation()
SectorEntityToken getPrimaryEntity()
void set(String key, Object value)
boolean getBoolean(String key)
CampaignFleetAPI getFleet(String key)
String getRaidActionText(CampaignFleetAPI fleet, MarketAPI market)
String getRaidApproachText(CampaignFleetAPI fleet, MarketAPI market)
String getRaidInSystemText(CampaignFleetAPI fleet)
String getRaidDefaultText(CampaignFleetAPI fleet)
void performRaid(CampaignFleetAPI fleet, MarketAPI market)
boolean canRaid(CampaignFleetAPI fleet, MarketAPI market)
String getRaidPrepText(CampaignFleetAPI fleet, SectorEntityToken from)
String pickObjectiveToBuild(BuildObjectiveParams params)