1package com.fs.starfarer.api.impl.combat.threat;
4import java.util.Random;
6import org.lwjgl.util.vector.Vector2f;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.FactionAPI.ShipPickMode;
12import com.fs.starfarer.api.campaign.FactionAPI.ShipPickParams;
13import com.fs.starfarer.api.campaign.LocationAPI;
14import com.fs.starfarer.api.campaign.StarSystemAPI;
15import com.fs.starfarer.api.campaign.listeners.CurrentLocationChangedListener;
16import com.fs.starfarer.api.fleet.FleetMemberAPI;
17import com.fs.starfarer.api.fleet.ShipRolePick;
18import com.fs.starfarer.api.impl.campaign.enc.AbyssalRogueStellarObjectEPEC;
19import com.fs.starfarer.api.impl.campaign.fleets.DisposableFleetManager;
20import com.fs.starfarer.api.impl.campaign.ids.Factions;
21import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
22import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
23import com.fs.starfarer.api.impl.campaign.ids.ShipRoles;
24import com.fs.starfarer.api.impl.campaign.ids.Tags;
25import com.fs.starfarer.api.util.Misc;
26import com.fs.starfarer.api.util.WeightedRandomPicker;
34 public static enum FabricatorEscortStrength {
42 public static class ThreatFleetCreationParams {
43 public int numFabricators = 0;
44 public int numHives = 0;
45 public int numOverseers = 0;
46 public int numCapitals = 0;
47 public int numCruisers = 0;
48 public int numDestroyers = 0;
49 public int numFrigates = 0;
86 super.advance(amount);
112 Random random =
new Random(
id.hashCode() * 1343890534L);
115 if (depth <= 1f)
return 0;
119 float f = (depth - 1f) / (maxDepth - 1f);
126 return minFleets + random.nextInt(maxFleets - minFleets + 1);
137 if (player ==
null)
return null;
139 float minDist = Float.MAX_VALUE;
147 if (distToPlayerLY < minDist) {
149 minDist = distToPlayerLY;
167 if (system ==
null)
return null;
170 if (player ==
null)
return null;
180 if (type ==
null)
continue;
195 if (depth >=
DEPTH_2 && (
float) Math.random() < 0.5f) maxSecond = 2;
198 depth = Math.min(depth,
DEPTH_2 - 0.1f);
200 if (numSecond > maxSecond) {
201 if ((
float) Math.random() < 0.5f) {
202 depth = Math.min(depth,
DEPTH_0 - 0.1f);
204 depth = Math.min(depth,
DEPTH_1 - 0.1f);
210 FabricatorEscortStrength strength = FabricatorEscortStrength.NONE;
214 picker.
add(FabricatorEscortStrength.LOW, 3f);
215 picker.
add(FabricatorEscortStrength.MEDIUM, 10f);
216 picker.
add(FabricatorEscortStrength.HIGH, 1f);
217 strength = picker.
pick();
220 picker.
add(FabricatorEscortStrength.NONE, 1f);
221 picker.
add(FabricatorEscortStrength.LOW, 10f);
222 picker.
add(FabricatorEscortStrength.MEDIUM, 5f);
223 strength = picker.
pick();
224 if (strength == FabricatorEscortStrength.NONE) {
229 picker.
add(FabricatorEscortStrength.LOW, 10f);
230 picker.
add(FabricatorEscortStrength.MEDIUM, 5f);
231 picker.
add(FabricatorEscortStrength.HIGH, 5f);
232 picker.
add(FabricatorEscortStrength.MAXIMUM, 5f);
233 strength = picker.
pick();
234 if (strength == FabricatorEscortStrength.MAXIMUM) {
239 picker.
add(FabricatorEscortStrength.LOW, 10f);
240 picker.
add(FabricatorEscortStrength.MEDIUM, 5f);
241 picker.
add(FabricatorEscortStrength.HIGH, 5f);
242 picker.
add(FabricatorEscortStrength.MAXIMUM, 5f);
243 strength = picker.
pick();
244 if (strength == FabricatorEscortStrength.LOW || strength == FabricatorEscortStrength.MEDIUM) {
253 float radius = 4000f + 2000f * (float) Math.random();
263 int minOtherCapitals,
int maxOtherCapitals, FabricatorEscortStrength escorts, Random random) {
268 int minOverseers = 0;
269 int maxOverseers = 0;
272 int minDestroyers = 0;
273 int maxDestroyers = 0;
287 if (numFabricators <= 0) {
302 if (numFabricators <= 0) {
333 ThreatFleetCreationParams params =
new ThreatFleetCreationParams();
334 params.numFabricators = numFabricators;
335 params.numHives = minHives + random.nextInt(maxHives - minHives + 1);
336 params.numOverseers = minOverseers + random.nextInt(maxOverseers - minOverseers + 1);
337 params.numCapitals = minOtherCapitals + random.nextInt(maxOtherCapitals - minOtherCapitals + 1);
338 params.numCruisers = minCruisers + random.nextInt(maxCruisers - minCruisers + 1);
339 params.numDestroyers = minDestroyers + random.nextInt(maxDestroyers - minDestroyers + 1);
340 params.numFrigates = minFrigates + random.nextInt(maxFrigates - minFrigates + 1);
343 if (numFabricators >= 3 ||
344 (numFabricators >= 2 && escorts.ordinal() >= FabricatorEscortStrength.HIGH.ordinal())) {
346 }
else if (numFabricators >= 2 ||
347 (numFabricators >= 1 && escorts.ordinal() >= FabricatorEscortStrength.HIGH.ordinal())) {
372 curr.getRepairTracker().setCR(curr.getRepairTracker().getMaxCR());
394 ShipPickParams p =
new ShipPickParams(ShipPickMode.ALL);
395 p.blockFallback =
true;
398 for (
int i = 0; i < num; i++) {
399 List<ShipRolePick> picks = faction.
pickShip(role, p,
null, random);
static FactoryAPI getFactory()
static SectorAPI getSector()
void modifyMult(String source, float value)
static float MAX_THREAT_PROB_DEPTH
static final float DESPAWN_RANGE_LY
StarSystemAPI currSpawnLoc
static final float MAX_RANGE_FROM_PLAYER_LY
static final String THREAT
static final String PATROL_SMALL
static final String PATROL_LARGE
static final String PATROL_MEDIUM
static final String MAY_GO_INTO_ABYSS
static final String FLEET_INTERACTION_DIALOG_CONFIG_OVERRIDE_GEN
static final String MEMORY_KEY_MAKE_HOSTILE
static final String MEMORY_KEY_MAKE_AGGRESSIVE
static final String MEMORY_KEY_ALLOW_LONG_PURSUIT
static final String MEMORY_KEY_FLEET_TYPE
static final String COMBAT_CAPITAL
static final String COMBAT_LARGE
static final String COMBAT_SMALL
static final String THREAT_OVERSEER
static final String COMBAT_MEDIUM
static final String THREAT_FABRICATOR
static final String THREAT_HIVE
float getExpireDaysPerFleet()
StarSystemAPI pickCurrentSpawnLocation()
static void addShips(CampaignFleetAPI fleet, int num, String role, Random random)
static String THREAT_DETECTED_RANGE_MULT_ID
static String SENSOR_MODS_KEY
static CampaignFleetAPI createThreatFleet(int numFabricators, int minOtherCapitals, int maxOtherCapitals, FabricatorEscortStrength escorts, Random random)
static float THREAT_DETECTED_RANGE_MULT
boolean withReturnToSourceAssignments()
void reportCurrentLocationChanged(LocationAPI prev, LocationAPI curr)
static float ONSLAUGHT_MKI_SENSOR_MODIFICATIONS_RANGE_MULT
DisposableThreatFleetManager()
static CampaignFleetAPI createThreatFleet(ThreatFleetCreationParams params, Random random)
int getDesiredNumFleetsForSpawnLocation()
void advance(float amount)
CampaignFleetAPI spawnFleetImpl()
void forceIntervalElapsed()
static float getDistanceLY(SectorEntityToken from, SectorEntityToken to)
static Vector2f getPointAtRadius(Vector2f from, float r)
static float getAbyssalDepth(Vector2f loc)
static String getFleetType(CampaignFleetAPI fleet)
CampaignFleetAPI createEmptyFleet(String factionId, String name, boolean aiMode)
void setName(String name)
FleetDataAPI getFleetData()
void setInflater(FleetInflater inflater)
void setLocation(float x, float y)
List< ShipRolePick > pickShip(String role, ShipPickParams params)
String getFleetTypeName(String type)
void addFleetMember(FleetMemberAPI member)
List< FleetMemberAPI > getMembersListCopy()
void addEntity(SectorEntityToken entity)
List< CampaignFleetAPI > getFleets()
CampaignFleetAPI getPlayerFleet()
List< StarSystemAPI > getStarSystems()
boolean isInNewGameAdvance()
FactionAPI getFaction(String factionId)
ListenerManagerAPI getListenerManager()
StatBonus getDetectedRangeMod()
void addScript(EveryFrameScript script)
Vector2f getLocationInHyperspace()
MemoryAPI getMemoryWithoutUpdate()
String getOptionalUniqueId()
void addListener(Object listener)
void set(String key, Object value)