1package com.fs.starfarer.api.impl.campaign.fleets;
3import java.util.LinkedHashMap;
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.CampaignFleetAPI;
7import com.fs.starfarer.api.campaign.StarSystemAPI;
8import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI;
9import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.EncounterOption;
10import com.fs.starfarer.api.campaign.econ.MarketAPI;
11import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
12import com.fs.starfarer.api.impl.campaign.ids.Tags;
13import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
14import com.fs.starfarer.api.util.IntervalUtil;
15import com.fs.starfarer.api.util.Misc;
16import com.fs.starfarer.api.util.TimeoutTracker;
28 public static boolean DEBUG =
false;
30 public static final String
KEY_SYSTEM =
"$core_disposableFleetSpawnSystem";
31 public static final String
KEY_SPAWN_FP =
"$core_disposableFleetSpawnFP";
36 protected IntervalUtil
tracker2 =
new IntervalUtil(0.75f, 1.25f);;
37 protected LinkedHashMap<String, TimeoutTracker<Boolean>>
recentSpawns =
new LinkedHashMap<String, TimeoutTracker<Boolean>>();
49 return "$core_recentSpawn_" +
getSpawnId() +
"_" + system.getName();
76 String system = fleet.getMemoryWithoutUpdate().getString(
KEY_SYSTEM);
77 float spawnFP = fleet.getMemoryWithoutUpdate().getFloat(
KEY_SPAWN_FP);
79 float playerFP = player.getFleetPoints();
81 if (system ==
null || !system.equals(
currSpawnLoc.getName()))
return true;
83 if (spawnFP >= fleet.getFleetPoints() * 2f) {
84 if (fleet.getAI() instanceof CampaignFleetAIAPI) {
85 CampaignFleetAIAPI ai = (CampaignFleetAIAPI) fleet.getAI();
86 EncounterOption option = ai.pickEncounterOption(
null, player,
true);
87 if (option == EncounterOption.DISENGAGE)
return true;
89 return fleet.getFleetPoints() <= playerFP * 0.5f;
106 if (TutorialMissionIntel.isTutorialInProgress()) {
110 super.advance(amount);
114 if (player ==
null)
return;
129 for (ManagedFleetData data :
active) {
130 if (Misc.isFleetReturningToDespawn(data.fleet))
continue;
136 float fp = data.fleet.getFleetPoints();
137 float spawnFP = data.fleet.getMemoryWithoutUpdate().getFloat(
KEY_SPAWN_FP);
138 if (fp < spawnFP * 0.33f) {
139 Misc.giveStandardReturnToSourceAssignments(data.fleet);
157 System.out.println(
"No target system, spawnRateMult is 1");
166 float activeInSystem = 0f;
167 for (ManagedFleetData data :
active) {
180 System.out.println(String.format(
"ID: %s, system: %s, recent: %s, desired: %s, spawnRateMult: %s",
184 "" + desiredNumFleets,
200 if (player ==
null)
return null;
201 StarSystemAPI nearest =
null;
202 float minDist = Float.MAX_VALUE;
203 for (MarketAPI market :
Global.
getSector().getEconomy().getMarketsCopy()) {
204 if (market.isHidden())
continue;
205 if (market.getStarSystem() !=
null && market.getStarSystem().hasTag(Tags.SYSTEM_ABYSSAL))
continue;
207 if (market.isPlayerOwned() && market.getSize() <= 3)
continue;
208 if (!market.hasSpaceport())
continue;
210 float distToPlayerLY = Misc.getDistanceLY(player.getLocationInHyperspace(), market.getLocationInHyperspace());
214 if (distToPlayerLY < minDist && market.getStarSystem() !=
null) {
215 if (market.getStarSystem().getStar() !=
null) {
216 if (market.getStarSystem().getStar().getSpec().isPulsar())
continue;
219 nearest = market.getStarSystem();
220 minDist = distToPlayerLY;
227 float distToPlayerLY = Misc.getDistanceLY(player.getLocationInHyperspace(),
currSpawnLoc.getLocation());
248 fleet.getMemoryWithoutUpdate().set(
KEY_SPAWN_FP, fleet.getFleetPoints());
259 protected String
getTravelText(StarSystemAPI system, CampaignFleetAPI fleet) {
260 return "traveling to the " + system.getBaseName() +
" star system";
264 boolean patrol = fleet.getMemoryWithoutUpdate().getBoolean(MemFlags.MEMORY_KEY_PATROL_FLEET);
265 String verb =
"raiding";
266 if (patrol) verb =
"patrolling";
267 return verb +
" the " + system.getBaseName() +
" star system";
271 boolean patrol = fleet.getMemoryWithoutUpdate().getBoolean(MemFlags.MEMORY_KEY_PATROL_FLEET);
272 String verb =
"raiding";
273 if (patrol) verb =
"patrolling";
274 return verb +
" around the " + system.getBaseName() +
" star system";
280 if ((
float) Math.random() < probStartInHyper ||
284 system.addEntity(fleet);
static SectorAPI getSector()
List< ManagedFleetData > active
void addRecentSpawn(StarSystemAPI system)
static final float DESPAWN_RANGE_LY
String getActionOutsideText(StarSystemAPI system, CampaignFleetAPI fleet)
void advance(float amount)
static final String KEY_SYSTEM
abstract int getDesiredNumFleetsForSpawnLocation()
static final String KEY_SPAWN_FP
boolean isOkToDespawnAssumingNotPlayerVisible(CampaignFleetAPI fleet)
StarSystemAPI pickCurrentSpawnLocation()
CampaignFleetAPI spawnFleet()
void setLocationAndOrders(CampaignFleetAPI fleet, float probStartInHyper, float probStayInHyper)
abstract CampaignFleetAPI spawnFleetImpl()
abstract String getSpawnId()
StarSystemAPI pickNearestPopulatedSystem()
StarSystemAPI currSpawnLoc
LinkedHashMap< String, TimeoutTracker< Boolean > > recentSpawns
String getSpawnKey(StarSystemAPI system)
float getRecentSpawnsForSystem(StarSystemAPI system)
String getActionInsideText(StarSystemAPI system, CampaignFleetAPI fleet)
void updateSpawnRateMult()
String getTravelText(StarSystemAPI system, CampaignFleetAPI fleet)
float getExpireDaysPerFleet()
StarSystemAPI getCurrSpawnLoc()
static final float MAX_RANGE_FROM_PLAYER_LY
static float SPAWN_DIST_LY