1package com.fs.starfarer.api.impl.campaign;
5import org.lwjgl.util.vector.Vector2f;
7import com.fs.starfarer.api.EveryFrameScript;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FleetAssignment;
11import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
12import com.fs.starfarer.api.campaign.ai.FleetAssignmentDataAPI;
13import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
14import com.fs.starfarer.api.campaign.rules.MemoryAPI;
15import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
16import com.fs.starfarer.api.util.IntervalUtil;
17import com.fs.starfarer.api.util.Misc;
18import com.fs.starfarer.api.util.Misc.FleetFilter;
27 private float currDuration = 0f;
28 private float currElapsed = 0f;
30 private Vector2f startHyperLoc;
31 private float leashRange = 0f;
42 if (!interval.intervalElapsed())
return;
44 final float MAX_RANGE_FROM_PLAYER = 2000;
53 List<CampaignFleetAPI> fleets =
Misc.
findNearbyFleets(player, MAX_RANGE_FROM_PLAYER,
new FleetFilter() {
62 if (type ==
null || type.isEmpty())
return false;
64 if (global.
contains(timeoutKey))
return false;
73 if (vis == VisibilityLevel.NONE)
return false;
78 if (fleets.isEmpty())
return;
80 float minDist = Float.MAX_VALUE;
86 closestHassler = curr;
90 if (closestHassler ==
null)
return;
92 curr = closestHassler;
94 boolean hassle = (float) Math.random() < 0.25f;
97 currDuration = 10f + (float) Math.random() * 5f;
110 float timeoutDuration = 20f + (float) Math.random() * 10f;
113 if (type !=
null && !type.isEmpty()) {
115 global.
set(timeoutKey,
true, timeoutDuration);
134 if (currElapsed > currDuration) {
142 if (startHyperLoc !=
null) {
144 if (dist > leashRange) {
164 if (vis != VisibilityLevel.NONE) {
195 currDuration = currElapsed = 0f;
196 startHyperLoc =
null;
static SettingsAPI getSettings()
static SectorAPI getSector()
void maintainOngoingHassle(float days)
void advance(float amount)
static final String HASSLE_TIMEOUT_KEY
static final String HASSLE_COMPLETE_KEY
static final String HASSLE_TYPE
static final String MEMORY_KEY_PURSUE_PLAYER
static final String MEMORY_KEY_STICK_WITH_PLAYER_IF_ALREADY_TARGET
static final String WILL_HASSLE_PLAYER
static final String FLEET_BUSY
static final String FLEET_SPECIAL_ACTION
void advance(float amount)
static float getDistanceLY(SectorEntityToken from, SectorEntityToken to)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
static List< CampaignFleetAPI > findNearbyFleets(SectorEntityToken from, float maxRange, FleetFilter filter)
float getFloat(String key)
float convertToDays(float realSeconds)
CampaignFleetAIAPI getAI()
SectorEntityToken getInteractionTarget()
void setInteractionTarget(SectorEntityToken target)
boolean isHostileTo(SectorEntityToken other)
boolean isPlayerFaction()
FleetAssignmentDataAPI getCurrentAssignment()
void removeFirstAssignmentIfItIs(FleetAssignment assignment)
CampaignFleetAPI getPlayerFleet()
CampaignClockAPI getClock()
MemoryAPI getMemoryWithoutUpdate()
VisibilityLevel getVisibilityLevelTo(SectorEntityToken other)
Vector2f getLocationInHyperspace()
MemoryAPI getMemoryWithoutUpdate()
SectorEntityToken getTarget()
FleetAssignment getAssignment()
TacticalModulePlugin getTacticalModule()
SectorEntityToken getTarget()
void setTarget(SectorEntityToken target)
String getString(String key)
boolean contains(String key)
void set(String key, Object value)
boolean getBoolean(String key)