1package com.fs.starfarer.api.impl.campaign.ghosts;
3import java.util.ArrayList;
5import java.util.Random;
7import org.lwjgl.util.vector.Vector2f;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.CustomCampaignEntityAPI;
12import com.fs.starfarer.api.campaign.LocationAPI;
13import com.fs.starfarer.api.campaign.SectorEntityToken;
14import com.fs.starfarer.api.impl.campaign.abilities.InterdictionPulseAbility;
15import com.fs.starfarer.api.impl.campaign.ids.Entities;
16import com.fs.starfarer.api.impl.campaign.ids.Factions;
17import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
18import com.fs.starfarer.api.impl.campaign.ids.Tags;
19import com.fs.starfarer.api.util.Misc;
20import com.fs.starfarer.api.util.SmoothMovementUtil;
24 public static enum DespawnReason {
40 protected List<GhostBehavior>
script =
new ArrayList<GhostBehavior>();
60 if (
script.isEmpty())
return;
79 return 700f +
getRandom().nextFloat() * 300f;
82 return 1000f +
getRandom().nextFloat() * 500f;
85 return 1500f +
getRandom().nextFloat() * 500f;
89 return 2500f +
getRandom().nextFloat() * 1000f;
93 return 10f +
getRandom().nextFloat() * 5f;
96 return 20f +
getRandom().nextFloat() * 10f;
99 return 22f +
getRandom().nextFloat() * 28f;
102 return 50f +
getRandom().nextFloat() * 25f;
105 return 75f +
getRandom().nextFloat() * 25f;
109 return min + (max - min) *
getRandom().nextFloat();
112 return min +
getRandom().nextInt(max - min + 1);
121 return base * (0.75f + 0.5f *
getRandom().nextFloat());
132 Vector2f loc =
new Vector2f();
134 for (
int i = 0; i < 20; i++) {
135 float r = minDist + random.nextFloat() * (maxDist - minDist);
154 Vector2f loc =
new Vector2f();
156 float r = minDist + random.nextFloat() * (maxDist - minDist);
176 if (radius > maxFleetRadius) {
177 extraInds = (int) Math.round((radius - maxFleetRadius) / 20f);
181 public void initEntity(
float sensorProfile,
float radius,
int extraSensorInds) {
198 if (extraSensorInds > 0) {
205 int num = min + random.nextInt(max - min + 1);
246 if (dist > range)
continue;
294 public void moveTo(Vector2f dest,
float maxBurn) {
295 moveTo(dest,
null, maxBurn);
298 public void moveTo(Vector2f dest, Vector2f destVel,
float maxBurn) {
356 this.creationFailed =
true;
static SettingsAPI getSettings()
static SectorAPI getSector()
static float getRange(CampaignFleetAPI fleet)
void addBehavior(GhostBehavior b)
float genFloat(float min, float max)
void setNumSensorIndicators(int min, int max, Random random)
transient boolean creationFailed
List< GhostBehavior > getScript()
void initEntity(float sensorProfile, float radius, int extraSensorInds, LocationAPI where)
float genSmallSensorProfile()
SmoothMovementUtil movement
boolean isDespawnOutsideSector()
float genInt(int min, int max)
void setLoc(Vector2f loc)
List< GhostBehavior > script
float genLargeSensorProfile()
boolean despawnOutsideSector
float genDelay(float base)
void setVel(Vector2f vel)
void setDespawnRange(float despawnRange)
void advance(float amount)
void setDespawnOutsideSector(boolean despawnOutsideSector)
SmoothMovementUtil getMovement()
BaseSensorGhost(SensorGhostManager manager, int fleeBurnLevel)
float genMediumSensorProfile()
void setAccelMult(float accelMult)
void moveTo(Vector2f dest, float maxBurn)
void placeNearEntity(SectorEntityToken entity, float minDist, float maxDist)
boolean placeNearPlayer(float minDist, float maxDist)
float genVerySmallRadius()
float genHugeSensorProfile()
boolean placeNearPlayer()
void moveTo(Vector2f dest, Vector2f destVel, float maxBurn)
CustomCampaignEntityAPI getEntity()
boolean isDespawnInAbyss()
void initEntity(float sensorProfile, float radius)
void addInterrupt(GhostBehaviorInterrupt interrupt)
void setDespawnInAbyss(boolean despawnInAbyss)
SensorGhostManager manager
void reportDespawning(DespawnReason reason, Object param)
void initEntity(float sensorProfile, float radius, int extraSensorInds)
CustomCampaignEntityAPI entity
boolean isCreationFailed()
static final String SENSOR_GHOST
static final String NEUTRAL
static final String GLOBAL_INTERDICTION_PULSE_JUST_USED_IN_CURRENT_LOCATION
static final String JUST_DID_INTERDICTION_PULSE
static final String EXTRA_SENSOR_INDICATORS
static final String SENSOR_INDICATORS_OVERRIDE
static boolean isInAbyss(Vector2f loc)
static boolean isInsideSlipstream(Vector2f loc, float radius)
static void fadeAndExpire(SectorEntityToken entity)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static boolean isOutsideSector(Vector2f loc)
static float getBurnLevelForSpeed(float speed)
static Vector2f getPointAtRadius(Vector2f from, float r)
static float getSpeedForBurnLevel(float burnLevel)
void setDest(Vector2f dest, Vector2f destVel)
void advance(float amount)
void setMaxSpeed(float maxSpeed)
void setAcceleration(float acceleration)
float getFloat(String key)
LocationAPI getContainingLocation()
void setRadius(float radius)
CustomCampaignEntityAPI addCustomEntity(String id, String name, String type, String factionId)
void removeEntity(SectorEntityToken entity)
List< CampaignFleetAPI > getFleets()
CampaignFleetAPI getPlayerFleet()
MemoryAPI getMemoryWithoutUpdate()
LocationAPI getHyperspace()
LocationAPI getContainingLocation()
void setDetectionRangeDetailsOverrideMult(Float detectionRangeDetailsOverrideMult)
void setSensorProfile(Float sensorProfile)
void addScript(EveryFrameScript script)
void setDiscoverable(Boolean discoverable)
void forceSensorFaderOut()
boolean hasTag(String tag)
MemoryAPI getMemoryWithoutUpdate()
void setDiscoveryXP(Float discoveryXP)
void set(String key, Object value)
boolean getBoolean(String key)
void advance(float amount, SensorGhost ghost)