1package com.fs.starfarer.api.impl.campaign.fleets.misc;
3import java.util.ArrayList;
4import java.util.LinkedHashMap;
7import java.util.Random;
9import org.apache.log4j.Logger;
11import com.fs.starfarer.api.Global;
12import com.fs.starfarer.api.campaign.BattleAPI;
13import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
14import com.fs.starfarer.api.campaign.CampaignFleetAPI;
15import com.fs.starfarer.api.campaign.SectorEntityToken;
16import com.fs.starfarer.api.campaign.econ.MarketAPI;
17import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
18import com.fs.starfarer.api.impl.campaign.fleets.BaseRouteFleetManager;
19import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
20import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.OptionalFleetData;
21import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
22import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
23import com.fs.starfarer.api.util.IntervalUtil;
24import com.fs.starfarer.api.util.TimeoutTracker;
25import com.fs.starfarer.api.util.WeightedRandomPicker;
29 public static List<MiscFleetCreatorPlugin>
CREATORS =
new ArrayList<MiscFleetCreatorPlugin>();
35 public static class MiscRouteData {
36 public String creatorId;
37 public boolean smuggling =
false;
38 public MarketAPI from;
39 public SectorEntityToken to;
41 public String factionId;
43 public MiscRouteData(String creatorId) {
44 this.creatorId = creatorId;
59 public static final String
SOURCE_ID =
"misc_fleet_";
64 protected Map<String, TimeoutTracker<String>>
recentlySent =
new LinkedHashMap<String, TimeoutTracker<String>>();
65 protected Random
random =
new Random();
66 transient protected LinkedHashMap
data =
new LinkedHashMap();
73 interval =
new IntervalUtil(min, max);
78 recentlySent =
new LinkedHashMap<String, TimeoutTracker<String>>();
81 data =
new LinkedHashMap();
92 public TimeoutTracker<String>
getTimeout(String creatorId) {
93 TimeoutTracker<String> result =
recentlySent.get(creatorId);
95 result =
new TimeoutTracker<String>();
105 super.advance(amount);
108 for (TimeoutTracker<String> curr :
recentlySent.values()) {
120 int maxBasedOnMarkets = numMarkets * 1;
127 WeightedRandomPicker<MiscFleetCreatorPlugin> picker =
new WeightedRandomPicker<MiscFleetCreatorPlugin>(
random);
131 if (route.getCustom() instanceof MiscRouteData) {
132 MiscRouteData
data = (MiscRouteData) route.getCustom();
133 if (curr.getId().equals(
data.creatorId)) {
138 if (count >= curr.getMaxFleetsForThisCreator()) {
142 picker.add(curr, curr.getFrequency());
146 if (creator ==
null)
return;
150 if (params !=
null) {
152 MarketAPI from = params.from;
153 SectorEntityToken to = params.to;
154 log.info(
"Created misc [" + creator.
getId() +
"] " + from.getName() +
" to " + to.getName());
157 Long seed =
random.nextLong();
160 OptionalFleetData extra =
new OptionalFleetData(from);
161 extra.factionId = params.factionId;
164 route.setCustom(params);
166 float orbitDays = params.size * (0.75f +
random.nextFloat() * 0.5f);
168 if (orbitDays < 1f) orbitDays = 1f;
169 if (orbitDays > 3f) orbitDays = 3f;
171 route.addSegment(
new RouteSegment(
ROUTE_SRC_LOAD, orbitDays, from.getPrimaryEntity()));
172 route.addSegment(
new RouteSegment(
ROUTE_TRAVEL_DST, from.getPrimaryEntity(), to));
174 route.addSegment(
new RouteSegment(
ROUTE_DST_LOAD, orbitDays * 0.5f, to));
175 route.addSegment(
new RouteSegment(
ROUTE_TRAVEL_SRC, to, from.getPrimaryEntity()));
176 route.addSegment(
new RouteSegment(
ROUTE_SRC_UNLOAD, orbitDays, from.getPrimaryEntity()));
180 float timeout = min + (max - min) *
random.nextFloat();
193 if (curr.getId().equals(
id)) {
203 if (route.getSeed() !=
null) {
204 random =
new Random(route.getSeed());
207 MiscRouteData
data = (MiscRouteData) route.getCustom();
213 fleet.addEventListener(
this);
223 if (route ==
null || !(route.getCustom() instanceof MiscRouteData))
return;
226 if (!battle.isPlayerInvolved())
return;
228 MiscRouteData
data = (MiscRouteData) route.getCustom();
238 if (route ==
null || !(route.getCustom() instanceof MiscRouteData))
return;
240 MiscRouteData
data = (MiscRouteData) route.getCustom();
static SettingsAPI getSettings()
static Logger getLogger(Class c)
static SectorAPI getSector()
RouteData addRoute(String source, MarketAPI market, Long seed, OptionalFleetData extra, RouteFleetSpawner spawner)
List< RouteData > getRoutesForSource(String source)
static RouteManager getInstance()
RouteData getRoute(String source, CampaignFleetAPI fleet)
static final Integer ROUTE_SRC_LOAD
static List< MiscFleetCreatorPlugin > CREATORS
static final Integer ROUTE_TRAVEL_SRC
static final Integer ROUTE_DST_UNLOAD
TimeoutTracker< String > getTimeout(String creatorId)
static final Integer ROUTE_DST_LOAD
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
void addRouteFleetIfPossible()
static MiscFleetCreatorPlugin getCreator(String id)
boolean shouldRepeat(RouteData route)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
void reportAboutToBeDespawnedByRouteManager(RouteData route)
Map< String, TimeoutTracker< String > > recentlySent
void advance(float amount)
transient LinkedHashMap data
static final String SOURCE_ID
static final Integer ROUTE_TRAVEL_DST
static final Integer ROUTE_RESUPPLY_BACK_WS
String getRouteSourceId()
static final Integer ROUTE_TRAVEL_BACK_WS
CampaignFleetAPI spawnFleet(RouteData route)
boolean shouldCancelRouteAfterDelayCheck(RouteData route)
static final Integer ROUTE_SRC_UNLOAD
float getFloatFromArray(String key, int index)
void reportFleetDespawnedToListener(MiscFleetRouteManager manager, CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
CampaignFleetAPI createFleet(MiscFleetRouteManager manager, RouteData route, Random random)
void reportBattleOccurred(MiscFleetRouteManager manager, CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
MiscRouteData createRouteParams(MiscFleetRouteManager manager, Random random)