1package com.fs.starfarer.api.impl.campaign.intel.raid;
4import java.util.ArrayList;
7import com.fs.starfarer.api.campaign.SectorEntityToken;
8import com.fs.starfarer.api.campaign.FactionAPI.ShipPickMode;
9import com.fs.starfarer.api.campaign.econ.MarketAPI;
10import com.fs.starfarer.api.impl.campaign.DebugFlags;
11import com.fs.starfarer.api.impl.campaign.fleets.RouteLocationCalculator;
12import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
13import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.OptionalFleetData;
14import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
15import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
16import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
17import com.fs.starfarer.api.impl.campaign.ids.Stats;
18import com.fs.starfarer.api.impl.campaign.intel.inspection.HIAssembleStage;
19import com.fs.starfarer.api.impl.campaign.intel.punitive.PEAssembleStage;
20import com.fs.starfarer.api.impl.campaign.intel.raid.RaidIntel.RaidStageStatus;
21import com.fs.starfarer.api.ui.TooltipMakerAPI;
22import com.fs.starfarer.api.util.IntervalUtil;
23import com.fs.starfarer.api.util.Misc;
24import com.fs.starfarer.api.util.WeightedRandomPicker;
31 protected List<MarketAPI>
sources =
new ArrayList<MarketAPI>();
32 protected IntervalUtil
interval =
new IntervalUtil(0.1f, 0.2f);
72 minDays -= Misc.getDays(amount);
73 super.advance(amount);
108 ShipPickMode mode = Misc.getShipPickMode(source);
109 float base = source.getFaction().getApproximateMaxFPPerFleet(mode);
111 float numShipsMult = source.getStats().getDynamic().getMod(Stats.COMBAT_FLEET_SIZE_MULT).computeEffective(0f);
112 if (numShipsMult < 1f) numShipsMult = 1f;
113 mult = 1f / numShipsMult;
114 if (limitToSpawnFP) {
115 return Math.min(
spawnFP, base * mult);
127 return FleetTypes.PATROL_LARGE;
130 WeightedRandomPicker<String> picker =
new WeightedRandomPicker<String>();
131 if (!FleetTypes.PATROL_SMALL.equals(
prevType)) {
132 picker.add(FleetTypes.PATROL_SMALL);
135 picker.add(FleetTypes.PATROL_MEDIUM);
138 picker.add(FleetTypes.PATROL_LARGE);
145 protected float getFP(String type) {
153 if (FleetTypes.PATROL_SMALL.equals(type)) {
155 }
else if (FleetTypes.PATROL_MEDIUM.equals(type)) {
157 }
else if (FleetTypes.PATROL_LARGE.equals(type)) {
160 base *= (1f + ((float) Math.random() - 0.5f) * 0.5f);
174 float days = Misc.getDays(amount);
177 if (!
interval.intervalElapsed())
return;
180 status = RaidStageStatus.FAILURE;
185 if (!market.isInEconomy() || !market.getPrimaryEntity().isAlive()) {
194 OptionalFleetData extra =
new OptionalFleetData(market);
197 RouteData route = RouteManager.getInstance().addRoute(sid, market, Misc.genRandomSeed(), extra,
intel,
null);
200 float fp =
getFP(extra.fleetType);
204 extra.strength = Misc.getAdjustedStrength(fp, market);
207 float prepDays = 3f + 3f * (float) Math.random();
208 float travelDays = RouteLocationCalculator.getTravelDays(market.getPrimaryEntity(),
gatheringPoint);
217 route.addSegment(
new RouteSegment(prepDays, market.getPrimaryEntity(),
PREP_STAGE));
218 route.addSegment(
new RouteSegment(travelDays, market.getPrimaryEntity(),
gatheringPoint));
230 Color h = Misc.getHighlightColor();
231 Color g = Misc.getGrayColor();
232 Color tc = Misc.getTextColor();
236 if (
status == RaidStageStatus.FAILURE) {
237 info.addPara(
"The raiding forces have failed to successfully assemble at the rendezvous point. The raid is now over.", opad);
238 }
else if (curr == index) {
240 info.addPara(
"The raid is currently assembling in the " +
gatheringPoint.getContainingLocation().getNameWithLowercaseType() +
".", opad);
242 info.addPara(
"The raid is currently assembling at an unknown location.", opad);
static boolean PUNITIVE_EXPEDITION_DEBUG
static boolean RAID_DEBUG
static boolean HEGEMONY_INSPECTION_DEBUG
static boolean FAST_RAIDS
AssembleStage(RaidIntel raid, SectorEntityToken gatheringPoint)
void showStageInfo(TooltipMakerAPI info)
void setSpawnFP(float spawnFP)
void addSource(MarketAPI source)
static final String PREP_STAGE
List< MarketAPI > sources
void addRoutesAsNeeded(float amount)
float getLargeSize(boolean limitToSpawnFP)
static final String WAIT_STAGE
List< MarketAPI > getSources()
void advance(float amount)
SectorEntityToken gatheringPoint
void updateStatusBasedOnReaching(SectorEntityToken dest, boolean giveReturnOrders)
void abortIfNeededBasedOnFP(boolean giveReturnOrders)
String getRouteSourceId()
int getStageIndex(RaidStage stage)