1package com.fs.starfarer.api.impl.campaign.fleets;
3import java.util.ArrayList;
5import java.util.Random;
7import org.apache.log4j.Logger;
8import org.lwjgl.util.vector.Vector2f;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.campaign.BattleAPI;
12import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
13import com.fs.starfarer.api.campaign.CampaignFleetAPI;
14import com.fs.starfarer.api.campaign.SectorEntityToken;
15import com.fs.starfarer.api.campaign.econ.MarketAPI;
16import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
17import com.fs.starfarer.api.impl.campaign.fleets.PilgrimageFleetAssignmentAI.PilgrimageRouteData;
18import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.OptionalFleetData;
19import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
20import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
21import com.fs.starfarer.api.impl.campaign.ids.Conditions;
22import com.fs.starfarer.api.impl.campaign.ids.Factions;
23import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
24import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
25import com.fs.starfarer.api.impl.campaign.ids.Tags;
26import com.fs.starfarer.api.impl.campaign.missions.DelayedFleetEncounter;
27import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
28import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
29import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
30import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
31import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
32import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn;
33import com.fs.starfarer.api.impl.campaign.shared.SharedData;
34import com.fs.starfarer.api.util.Misc;
35import com.fs.starfarer.api.util.TimeoutTracker;
36import com.fs.starfarer.api.util.WeightedRandomPicker;
56 public static final String
SOURCE_ID =
"pilgrimage";
61 protected List<SectorEntityToken>
shrines =
null;
81 super.advance(amount);
97 int maxBasedOnMarkets = numMarkets * 1;
109 if (from !=
null && to !=
null) {
111 PilgrimageRouteData data =
createData(from, to);
112 if (data ==
null)
return;
114 log.info(
"Added shrine pilgrimage fleet route from " + from.
getName() +
" to " + to.
getName());
119 OptionalFleetData extra =
new OptionalFleetData(from);
132 extra.factionId = factionId;
135 route.setCustom(data);
137 float orbitDays = data.size * (0.75f + (float) Math.random() * 0.5f);
139 if (orbitDays < 1f) orbitDays = 1f;
140 if (orbitDays > 3f) orbitDays = 3f;
145 route.addSegment(
new RouteSegment(
ROUTE_DST_LOAD, orbitDays * 0.5f, to));
162 if (market.isHidden())
continue;
163 if (!market.hasSpaceport())
continue;
171 float mult = 1f - Math.min(0.99f, distLY / 10f);
173 String fid = market.getFactionId();
180 markets.
add(market, market.getSize() * mult);
186 return markets.
pick();
190 if (from ==
null)
return null;
195 if (!shrine.isAlive())
continue;
207 picker.
add(shrine, mult);
210 return picker.
pick();
215 PilgrimageRouteData data =
new PilgrimageRouteData();
224 data.smuggling =
true;
235 sizeBasis = from.
getSize() * 0.5f;
237 data.size = sizeBasis / 40f;
248 Random random =
new Random();
249 if (route.getSeed() !=
null) {
250 random =
new Random(route.getSeed());
254 if (fleet ==
null)
return null;;
265 PilgrimageRouteData data = (PilgrimageRouteData) route.getCustom();
291 if (route ==
null || !(route.getCustom() instanceof PilgrimageRouteData))
return;
293 if (route.isExpired())
return;
298 PilgrimageRouteData data = (PilgrimageRouteData) route.getCustom();
static SettingsAPI getSettings()
static Logger getLogger(Class c)
static SectorAPI getSector()
static final Integer ROUTE_RESUPPLY_BACK_WS
static final Integer ROUTE_DST_UNLOAD
static final Integer ROUTE_SRC_UNLOAD
void advance(float amount)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
CampaignFleetAPI spawnFleet(RouteData route)
TimeoutTracker< String > recentlySentPilgrims
void reportAboutToBeDespawnedByRouteManager(RouteData route)
static final Integer ROUTE_TRAVEL_BACK_WS
PilgrimageFleetRouteManager()
SectorEntityToken pickDestShrine(MarketAPI from)
MarketAPI pickSourceMarket()
boolean shouldCancelRouteAfterDelayCheck(RouteData route)
static final Integer ROUTE_TRAVEL_DST
static final String SOURCE_ID
void addRouteFleetIfPossible()
static final Integer ROUTE_DST_LOAD
static final Integer ROUTE_TRAVEL_SRC
static CampaignFleetAPI createPilgrimRouteFleet(RouteData route, Random random)
static PilgrimageRouteData createData(MarketAPI from, SectorEntityToken to)
static final Integer ROUTE_SRC_LOAD
String getRouteSourceId()
boolean shouldRepeat(RouteData route)
List< SectorEntityToken > shrines
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
RouteData addRoute(String source, MarketAPI market, Long seed, OptionalFleetData extra, RouteFleetSpawner spawner)
static RouteManager getInstance()
RouteData getRoute(String source, CampaignFleetAPI fleet)
static final String DECIVILIZED
static final String LUDDIC_PATH
static final String LUDDIC_CHURCH
static final String INDEPENDENT
static final String PATROL_MEDIUM
static final String SHRINE_PILGRIMS
static final String SHRINE_PILGRIM_FLEET
static final String MEMORY_KEY_SOURCE_MARKET
void triggerCreateFleet(FleetSize size, FleetQuality quality, String factionId, String type, SectorEntityToken roughlyWhere)
void triggerSetStandardAggroInterceptFlags()
void setLocationCoreOnly(boolean allowInsidePopulatedSystems, String requireLargestMarketNotHostileToFaction)
CampaignFleetAPI createFleet()
void triggerSetFleetComposition(float freighterMult, float tankerMult, float transportMult, float linerMult, float utilityMult)
void autoAdjustFleetTypeName()
void triggerSetTraderFleet()
void triggerSetFleetSizeFraction(float fractionOfMax)
void triggerSetFleetOfficers(OfficerNum num, OfficerQuality quality)
void triggerSetFleetGenericHailPermanent(String commsTrigger)
void triggerFleetSetNoFactionInName()
void triggerCreateFleet(FleetSize size, FleetQuality quality, String factionId, String type, StarSystemAPI roughlyWhere)
void triggerSetFleetMemoryValue(final String key, final Object value)
Set< String > getMarketsWithoutTradeFleetSpawn()
static SharedData getData()
static long genRandomSeed()
static float getDistanceToPlayerLY(Vector2f locInHyper)
float getFloat(String key)
List< CampaignFleetAPI > getNonPlayerSideSnapshot()
boolean isPlayerInvolved()
float convertToDays(float realSeconds)
boolean isHostileTo(FactionAPI other)
void addEventListener(FleetEventListener listener)
List< SectorEntityToken > getEntitiesWithTag(String tag)
CampaignClockAPI getClock()
void removeScriptsOfClass(Class c)
void addScript(EveryFrameScript script)
List< MarketAPI > getMarketsCopy()
boolean isPlanetConditionMarketOnly()
Vector2f getLocationInHyperspace()
boolean hasCondition(String id)
SectorEntityToken getPrimaryEntity()