1package com.fs.starfarer.api.impl.campaign.abilities.ai;
3import com.fs.starfarer.api.Global;
4import com.fs.starfarer.api.campaign.CampaignFleetAPI;
5import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
6import com.fs.starfarer.api.campaign.ai.FleetAIFlags;
7import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
8import com.fs.starfarer.api.campaign.rules.MemoryAPI;
9import com.fs.starfarer.api.characters.AbilityPlugin;
10import com.fs.starfarer.api.impl.campaign.abilities.InterdictionPulseAbility;
11import com.fs.starfarer.api.impl.campaign.ids.Abilities;
12import com.fs.starfarer.api.util.IntervalUtil;
13import com.fs.starfarer.api.util.Misc;
23 if (!interval.intervalElapsed())
return;
46 if (fleeingFrom !=
null) {
50 if (dist > range + 200)
return;
53 if (level == VisibilityLevel.NONE)
return;
60 float speed = Math.max(1f, fleeingFrom.
getVelocity().length());
61 float time = dist / speed;
63 boolean usingHasBenefit =
false;
71 usingHasBenefit =
true;
77 if (eb !=
null && eb.
getCooldownLeft() < activationTime + 1f) usingHasBenefit =
true;
80 if (time > activationTime + 2f && time < activationTime + 7f && usingHasBenefit) {
87 if (pursueTarget !=
null) {
90 if (dist > range + 200)
return;
93 if (level == VisibilityLevel.NONE)
return;
101 float speed = Math.max(1f, pursueTarget.
getVelocity().length());
104 speed = Math.max(1f, (speed - closingSpeed) / 2f);
105 float time = Math.max(200, (range - dist)) / speed;
108 boolean usingHasBenefit =
false;
115 usingHasBenefit =
true;
127 usingHasBenefit =
true;
134 usingHasBenefit =
true;
137 if (usingHasBenefit && time > activationTime + 0.5f) {
149 if (
fleet == other)
continue;
static SectorAPI getSector()
static final String USED_INTERDICTION_PULSE
static final String HAS_SPEED_PENALTY
static final String PURSUIT_TARGET
static final String NEAREST_FLEEING_FROM
static float getInterdictSeconds(CampaignFleetAPI fleet, CampaignFleetAPI other)
static float getRange(CampaignFleetAPI fleet)
boolean shouldSkipUsing()
static final float AI_FREQUENCY_MULT
static final String SUSTAINED_BURN
static final String INTERDICTION_PULSE
static final String EMERGENCY_BURN
static final String TAG_BURN
static final String TRANSVERSE_JUMP
void advance(float amount)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static float getClosingSpeed(Vector2f p1, Vector2f p2, Vector2f v1, Vector2f v2)
LocationAPI getContainingLocation()
CampaignFleetAIAPI getAI()
List< CampaignFleetAPI > getFleets()
CampaignClockAPI getClock()
VisibilityLevel getVisibilityLevelTo(SectorEntityToken other)
Map< String, AbilityPlugin > getAbilities()
MemoryAPI getMemoryWithoutUpdate()
AbilityPlugin getAbility(String id)
boolean isHostileTo(CampaignFleetAPI other)
TacticalModulePlugin getTacticalModule()
boolean isMaintainingContact()
void set(String key, Object value)
CampaignFleetAPI getFleet(String key)
boolean isActiveOrInProgress()
float getProgressFraction()
float getActivationDays()
boolean hasTag(String tag)