1package com.fs.starfarer.api.impl.campaign.intel.raid;
3import java.util.ArrayList;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.SectorEntityToken;
9import com.fs.starfarer.api.impl.campaign.DebugFlags;
10import com.fs.starfarer.api.impl.campaign.fleets.RouteLocationCalculator;
11import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
12import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
13import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
14import com.fs.starfarer.api.impl.campaign.intel.raid.RaidIntel.RaidStage;
15import com.fs.starfarer.api.impl.campaign.intel.raid.RaidIntel.RaidStageStatus;
16import com.fs.starfarer.api.ui.TooltipMakerAPI;
17import com.fs.starfarer.api.util.IntervalUtil;
18import com.fs.starfarer.api.util.Misc;
22 public static final String
STRAGGLER =
"raid_straggler";
27 protected RaidStageStatus
status = RaidStageStatus.ONGOING;
54 for (RouteData route : routes) {
60 CampaignFleetAPI fleet = route.getActiveFleet();
62 fleet.clearAssignments();
64 route.getSegments().clear();
65 route.setCurrent(
null);
70 List<RouteData> result =
new ArrayList<RouteData>();
71 for (RouteData route : routes) {
72 if (!
STRAGGLER.equals(route.getCustom())) {
80 for (RouteData route : stragglers) {
81 SectorEntityToken from =
Global.
getSector().getHyperspace().createToken(route.getInterpolatedHyperLocation());
86 float travelDays = RouteLocationCalculator.getTravelDays(from, route.getMarket().getPrimaryEntity());
91 float orbitDays = 1f + 1f * (float) Math.random();
92 route.addSegment(
new RouteSegment(travelDays, from, route.getMarket().getPrimaryEntity()));
93 route.addSegment(
new RouteSegment(orbitDays, route.getMarket().getPrimaryEntity()));
100 float days = Misc.getDays(amount);
120 protected boolean enoughMadeIt(List<RouteData> routes, List<RouteData> stragglers) {
122 for (RouteData route : routes) {
123 if (stragglers.contains(route))
continue;
124 CampaignFleetAPI fleet = route.getActiveFleet();
128 float mult = Misc.getSpawnFPMult(fleet);
129 madeItFP += fleet.getFleetPoints() / mult;
131 madeItFP += route.getExtra().fp;
143 List<RouteData> stragglers =
new ArrayList<RouteData>();
149 status = RaidStageStatus.FAILURE;
150 if (giveReturnOrders) {
162 float maxRange = 2000f;
163 if (!requireNearTarget) {
164 maxRange = 10000000f;
166 List<RouteData> stragglers =
getStragglers(routes, dest, maxRange);
171 status = RaidStageStatus.SUCCESS;
177 status = RaidStageStatus.SUCCESS;
178 if (giveReturnOrders) {
182 status = RaidStageStatus.FAILURE;
183 if (giveReturnOrders) {
195 public List<RouteData>
getStragglers(List<RouteData> routes, SectorEntityToken dest,
float maxRange) {
196 List<RouteData> stragglers =
new ArrayList<RouteData>();
198 for (RouteData route : routes) {
199 CampaignFleetAPI fleet = route.getActiveFleet();
201 if (fleet.getContainingLocation() == dest.getContainingLocation()) {
202 float dist = Misc.getDistance(fleet, dest);
203 if (dist > maxRange) {
204 stragglers.add(route);
207 stragglers.add(route);
209 }
else if (!route.isExpired()) {
210 boolean waiting =
false;
215 stragglers.add(route);
static SectorAPI getSector()
static boolean RAID_DEBUG
static boolean FAST_RAIDS
static final String WAIT_STAGE
static final String STRAGGLER
void giveReturnOrdersToStragglers(List< RouteData > stragglers)
RaidStageStatus getStatus()
void updateStatusBasedOnReaching(SectorEntityToken dest, boolean giveReturnOrders, boolean requireNearTarget)
boolean enoughMadeIt(List< RouteData > routes, List< RouteData > stragglers)
List< RouteData > getStragglers(List< RouteData > routes, SectorEntityToken dest, float maxRange)
void resetRoute(RouteData route)
List< RouteData > getRoutes()
IntervalUtil statusInterval
void updateStatusBasedOnReaching(SectorEntityToken dest, boolean giveReturnOrders)
void advance(float amount)
void abortIfNeededBasedOnFP(boolean giveReturnOrders)
void setAbortFP(float abortFP)
void showStageInfo(TooltipMakerAPI info)
BaseRaidStage(RaidIntel raid)
String getRouteSourceId()