1package com.fs.starfarer.api.impl.campaign;
3import java.util.Random;
5import org.lwjgl.util.vector.Vector2f;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.FleetAssignment;
9import com.fs.starfarer.api.campaign.SectorEntityToken;
10import com.fs.starfarer.api.campaign.TextPanelAPI;
11import com.fs.starfarer.api.campaign.ai.FleetAssignmentDataAPI;
12import com.fs.starfarer.api.campaign.rules.MemoryAPI;
13import com.fs.starfarer.api.combat.MutableStat.StatMod;
14import com.fs.starfarer.api.impl.campaign.ghosts.BaseSensorGhost;
15import com.fs.starfarer.api.impl.campaign.ghosts.GBGoInDirection;
16import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
17import com.fs.starfarer.api.impl.campaign.ids.Tags;
18import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin;
19import com.fs.starfarer.api.ui.TooltipMakerAPI;
20import com.fs.starfarer.api.util.Misc;
29 super.init(
entity, pluginParams);
33 Object readResolve() {
44 if (fleet.isInHyperspaceTransition())
continue;
47 if (reset && !fleet.getFaction().isPlayerFaction()) {
49 }
else if (reset && fleet.isPlayerFleet()) {
53 String desc =
"Sensor array";
56 desc =
"Makeshift sensor array";
66 StatMod curr = fleet.getStats().getSensorRangeMod().getFlatBonus(
id);
67 if (curr ==
null || curr.value <= bonus) {
68 fleet.getStats().addTemporaryModFlat(0.1f,
id,
70 fleet.getStats().getSensorRangeMod());
100 text.
addPara(
"This one, however, does not appear to be transmitting a sensor telemetry broadcast. The cause of its lack of function is unknown.");
103 text.
addPara(
"You have a hack running on this sensor array.");
118 text.
addPara(
"%s sensor range for in-system fleets",
124 super.addHackStatusToTooltip(text, pad);
128 return "sensor_array";
144 boolean spawnReading = random.nextFloat() < 0.5f;
151 float dur = 3f + 3f + random.nextFloat();
156 float r = random.nextFloat();
160 maxBurn = 9 + random.nextInt(3);
161 }
else if (r < 0.6f) {
163 maxBurn = 8 + random.nextInt(3);
166 maxBurn = 7 + random.nextInt(3);
178 if (accelMult < 0.1f) accelMult = 0.1f;
182 float sign = Math.signum(random.nextFloat() - 0.5f);
183 dir += sign * (30f + random.nextFloat() * 60f);
194 if (fleet.
getAI() ==
null) {
214 if (!patrol && !warFleet && !pirate) {
219 if (random ==
null) {
224 boolean willRespond = random.nextFloat() < 0.75f;
238 float chaseDur = (2.5f + (float) Math.random()) * 2f;
246 angle += arc/2f - arc * random.nextFloat();
247 float dist = 3000f + 3000f * random.nextFloat();
253 String actionText =
"investigating anomalous sensor reading";
void printEffect(TooltipMakerAPI text, float pad)
void printNonFunctionalAndHackDescription(TextPanelAPI text)
void respondToFalseSensorReadings(CampaignFleetAPI fleet)
void init(SectorEntityToken entity, Object pluginParams)
void spawnPlayerSensorReading(CampaignFleetAPI fleet)
void advance(float amount)
static float SENSOR_BONUS
static String GHOST_RESPONSE
void addHackStatusToTooltip(TooltipMakerAPI text, float pad)
static float SENSOR_BONUS_MAKESHIFT
void addBehavior(GhostBehavior b)
float genLargeSensorProfile()
float genMediumSensorProfile()
void setAccelMult(float accelMult)
boolean placeNearPlayer()
CustomCampaignEntityAPI getEntity()
void initEntity(float sensorProfile, float radius)
static final String MEMORY_KEY_WAR_FLEET
static final String MEMORY_KEY_PATROL_FLEET
static final String FLEET_CHASING_GHOST_RANDOM
static final String OBJECTIVE_NON_FUNCTIONAL
static final String MEMORY_KEY_PIRATE
static final String FLEET_NOT_CHASING_GHOST
static final String FLEET_CHASING_GHOST
static final String FLEET_BUSY
static final String INDENT
static Vector2f getUnitVectorAtDegreeAngle(float degrees)
static Random getRandom(long seed, int level)
static long getSalvageSeed(SectorEntityToken entity)
static Color getHighlightColor()
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
static float getSpeedForBurnLevel(float burnLevel)
static float getAngleInDegrees(Vector2f v)
LocationAPI getContainingLocation()
CampaignFleetAIAPI getAI()
FleetAssignmentDataAPI getCurrentAssignment()
void addAssignmentAtStart(FleetAssignment assignment, SectorEntityToken target, float maxDurationInDays, String actionText, Script onCompletion)
void addScript(EveryFrameScript script)
SectorEntityToken createToken(float x, float y)
List< CampaignFleetAPI > getFleets()
LocationAPI getContainingLocation()
boolean hasTag(String tag)
MemoryAPI getMemoryWithoutUpdate()
LabelAPI addPara(String text)
List< FleetAssignmentDataAPI > getAssignmentsCopy()
void removeAssignment(FleetAssignmentDataAPI assignment)
void setCustom(Object custom)
void set(String key, Object value)
boolean getBoolean(String key)