1package com.fs.starfarer.api.impl.campaign.procgen.themes;
3import java.util.Random;
5import org.lwjgl.util.vector.Vector2f;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.StarSystemAPI;
10import com.fs.starfarer.api.campaign.econ.MarketAPI;
11import com.fs.starfarer.api.impl.campaign.fleets.BaseRouteFleetManager;
12import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
13import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
14import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
15import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.OptionalFleetData;
16import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
17import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
18import com.fs.starfarer.api.impl.campaign.ids.Factions;
19import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
20import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
21import com.fs.starfarer.api.impl.campaign.ids.Tags;
22import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
23import com.fs.starfarer.api.util.Misc;
24import com.fs.starfarer.api.util.WeightedRandomPicker;
43 return (
int) (1 + Math.min(salvage / 2, 7));
52 if (market ==
null)
return;
54 Long seed =
new Random().nextLong();
57 OptionalFleetData extra =
new OptionalFleetData(market);
62 float travelDays = distLY * 1.5f;
64 float prepDays = 2f + (float) Math.random() * 3f;
65 float endDays = 8f + (float) Math.random() * 3f;
67 float totalTravelTime = prepDays + endDays + travelDays * 2f;
68 float stayDays = Math.max(20f, totalTravelTime);
91 if (market.getContainingLocation() ==
null)
continue;
92 if (market.getContainingLocation().isHyperspace())
continue;
93 if (market.isHidden())
continue;
96 float weight = market.getSize();
98 float f = Math.max(0.1f, 1f - Math.min(1f, distLY / 20f));
102 markets.
add(market, weight);
105 return markets.
pick();
110 Random random = route.getRandom();
117 String type = picker.
pick();
119 boolean pirate = random.nextBoolean();
121 if (fleet ==
null)
return null;;
129 return createScavenger(type, locInHyper,
null, source, pirate, random);
132 if (random ==
null) random =
new Random();
140 type = picker.
pick();
152 combat = random.nextInt(2) + 1;
153 tanker = random.nextInt(2) + 1;
154 utility = random.nextInt(2) + 1;
156 combat = 4 + random.nextInt(5);
157 freighter = 4 + random.nextInt(5);
158 tanker = 3 + random.nextInt(4);
159 transport = random.nextInt(2);
160 utility = 2 + random.nextInt(3);
162 combat = 7 + random.nextInt(8);
163 freighter = 6 + random.nextInt(7);
164 tanker = 5 + random.nextInt(6);
165 transport = 3 + random.nextInt(8);
166 utility = 4 + random.nextInt(5);
172 transport = utility = 0;
181 route !=
null ? route.getMarket() : source,
184 route ==
null ?
null : route.getQualityOverride(),
195 params.timestamp = route.getTimestamp();
197 params.random = random;
200 if (fleet ==
null || fleet.
isEmpty())
return null;
206 if (pirate ||
true) {
static SectorAPI getSector()
static CampaignFleetAPI createFleet(FleetParamsV3 params)
RouteData addRoute(String source, MarketAPI market, Long seed, OptionalFleetData extra, RouteFleetSpawner spawner)
static RouteManager getInstance()
static final String SCAVENGERS
static final String INDEPENDENT
static final String SCAVENGER_MEDIUM
static final String SCAVENGER_LARGE
static final String SCAVENGER_SMALL
static final String MEMORY_KEY_SCAVENGER
static float getVeryApproximateSalvageValue(StarSystemAPI system)
MarketAPI pickSourceMarket()
void addRouteFleetIfPossible()
static CampaignFleetAPI createScavenger(String type, Vector2f locInHyper, MarketAPI source, boolean pirate, Random random)
CampaignFleetAPI spawnFleet(RouteData route)
boolean shouldRepeat(RouteData route)
RuinsFleetRouteManager(StarSystemAPI system)
static CampaignFleetAPI createScavenger(String type, Vector2f locInHyper, RouteData route, MarketAPI source, boolean pirate, Random random)
void reportAboutToBeDespawnedByRouteManager(RouteData route)
boolean shouldCancelRouteAfterDelayCheck(RouteData data)
String getRouteSourceId()
static boolean isTutorialInProgress()
static float getDistanceLY(SectorEntityToken from, SectorEntityToken to)
static void makeLowRepImpact(CampaignFleetAPI fleet, String reason)
void setFaction(String factionId, boolean includeCaptains)
List< SectorEntityToken > getEntitiesWithTag(String tag)
void addScript(EveryFrameScript script)
MemoryAPI getMemoryWithoutUpdate()
SectorEntityToken getCenter()
List< MarketAPI > getMarketsCopy()
Vector2f getLocationInHyperspace()
SectorEntityToken getPrimaryEntity()
void set(String key, Object value)