Starsector API
Loading...
Searching...
No Matches
ThreatFleetBehaviorScript.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat.threat;
2
3import com.fs.starfarer.api.EveryFrameScript;
4import com.fs.starfarer.api.Global;
5import com.fs.starfarer.api.campaign.CampaignFleetAPI;
6import com.fs.starfarer.api.campaign.FleetAssignment;
7import com.fs.starfarer.api.campaign.SectorEntityToken;
8import com.fs.starfarer.api.campaign.StarSystemAPI;
9import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
10import com.fs.starfarer.api.impl.campaign.fleets.DisposableFleetManager;
11import com.fs.starfarer.api.impl.campaign.ids.Abilities;
12import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
13import com.fs.starfarer.api.impl.campaign.ids.Stats;
14import com.fs.starfarer.api.util.Misc;
15
17
23
24 protected float seenByPlayerTimeout = 0f;
25
26
28 this.fleet = fleet;
29 this.system = system;
30
31 pickNext();
32 }
33
34 protected void pickNext() {
35 float days = 1f + 1f * (float) Math.random();
37 float distFromTarget = Misc.getDistance(fleet, target);
38 if (distFromTarget < 7000f) target = null;
39
41 if (player != null) {
42 float distFromPlayer = Misc.getDistance(fleet, player);
43 if (distFromPlayer < 4000f) target = null;
44 }
45
46 fleet.addAssignment(FleetAssignment.PATROL_SYSTEM, target, days, "cruising");
47 }
48
49 public void advance(float amount) {
50 if (fleet.getCurrentAssignment() == null) {
51 pickNext();
52 }
53
54 seenByPlayerTimeout -= amount;
55
57 if (player == null) return;
58
59 boolean playerHasSensorMods = Global.getSector().getPlayerMemoryWithoutUpdate().getBoolean(
61 //playerHasSensorMods = true;
62 if (playerHasSensorMods) {
66 } else {
69 }
70
71
72 boolean visibleToPlayer = fleet.isVisibleToPlayerFleet() && player.isVisibleToSensorsOf(fleet);
74 float dist = Misc.getDistance(fleet, player);
75 dist -= fleet.getRadius() + player.getRadius();
76 if (playerHasSensorMods) {
78 }
79 boolean asb = player.getAbility(Abilities.SENSOR_BURST) != null &&
81 visibleToPlayer = dist < 150f || asb && dist < 500f;
82 }
83
84
85 if (visibleToPlayer) {
87 }
88 if (seenByPlayerTimeout > 0f) {
89 visibleToPlayer = true;
90 }
91 //visibleToPlayer = false;
92
93 if (!visibleToPlayer) {
94 if (fleet.getAI() instanceof ModularFleetAIAPI) {
96 for (int i = 0; i < 3; i++) {
97 ai.getNavModule().avoidEntity(player, 3000f, 5000f, 0.2f);
98 }
99
102 }
103 } else {
106 }
107 }
108
113
114 public boolean isDone() {
115 return false;
116 }
117
118 public boolean runWhilePaused() {
119 return false;
120 }
121
122
123}
124
125
126
127
128
129
130
131
132
133
static SettingsAPI getSettings()
Definition Global.java:57
static SectorAPI getSector()
Definition Global.java:65
void modifyMult(String source, float value)
static final String DETECTED_BY_PLAYER_RANGE_MULT
Definition Stats.java:86
static float getDistance(SectorEntityToken from, SectorEntityToken to)
Definition Misc.java:599
void addAssignment(FleetAssignment assignment, SectorEntityToken target, float maxDurationInDays)
FleetAssignmentDataAPI getCurrentAssignment()
SectorEntityToken createToken(float x, float y)
boolean isVisibleToSensorsOf(SectorEntityToken other)
void avoidEntity(SectorEntityToken entity, float minRange, float maxRange, float duration)
void set(String key, Object value)