1package com.fs.starfarer.api.impl.campaign.intel.group;
4import java.util.ArrayList;
5import java.util.Collections;
6import java.util.Comparator;
9import org.lwjgl.util.vector.Vector2f;
11import com.fs.starfarer.api.Global;
12import com.fs.starfarer.api.campaign.CampaignFleetAPI;
13import com.fs.starfarer.api.campaign.JumpPointAPI;
14import com.fs.starfarer.api.campaign.SectorEntityToken;
15import com.fs.starfarer.api.campaign.StarSystemAPI;
16import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.ActionType;
17import com.fs.starfarer.api.campaign.econ.MarketAPI;
18import com.fs.starfarer.api.impl.campaign.MilitaryResponseScript;
19import com.fs.starfarer.api.impl.campaign.MilitaryResponseScript.MilitaryResponseParams;
20import com.fs.starfarer.api.impl.campaign.command.WarSimScript;
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.impl.campaign.ids.Factions;
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.intel.group.GenericRaidFGI.GenericPayloadAction;
27import com.fs.starfarer.api.util.IntervalUtil;
28import com.fs.starfarer.api.util.Misc;
32 public static class FGBlockadeParams {
33 public StarSystemAPI where;
34 public MarketAPI specificMarket =
null;
35 public boolean doNotGetSidetracked =
true;
37 public float accessibilityPenalty = 0.6f;
39 public String patrolText =
null;
40 public String targetFaction = Factions.PLAYER;
44 protected IntervalUtil
interval =
new IntervalUtil(0.1f, 0.3f);
47 protected List<SectorEntityToken>
blockadePoints =
new ArrayList<SectorEntityToken>();
52 protected List<MilitaryResponseScript>
scripts =
new ArrayList<MilitaryResponseScript>();
72 final Vector2f center =
new Vector2f();
74 Collections.sort(
blockadePoints,
new Comparator<SectorEntityToken>() {
75 public int compare(SectorEntityToken o1, SectorEntityToken o2) {
76 float d1 = Misc.getDistance(center, o1.getLocation());
77 float d2 = Misc.getDistance(center, o2.getLocation());
78 return (
int) Math.signum(d1 - d2);
87 float d0 = Misc.getDistance(center,
blockadePoints.get(0).getLocation());
88 float d1 = Misc.getDistance(center,
blockadePoints.get(1).getLocation());
98 for (SectorEntityToken objective :
params.where.getEntitiesWithTag(Tags.OBJECTIVE)) {
99 WarSimScript.setNoFightingForObjective(objective,
intel.
getFaction(), 1000f);
107 RouteSegment segment =
new RouteSegment(
getDurDays(),
params.where.getCenter());
108 route.addSegment(segment);
113 super.notifyFleetsSpawnedMidSegment(segment);
118 super.notifySegmentFinished(segment);
127 for (CampaignFleetAPI fleet : fleets) {
128 Misc.setFlagWithReason(fleet.getMemoryWithoutUpdate(), MemFlags.FLEET_BUSY, fleet.getId(),
true, -1f);
138 for (SectorEntityToken objective :
params.where.getEntitiesWithTag(Tags.OBJECTIVE)) {
139 WarSimScript.removeNoFightingTimeoutForObjective(objective,
intel.
getFaction());
148 super.directFleets(amount);
152 if (fleets.isEmpty()) {
170 if (!
interval.intervalElapsed())
return;
208 fleet.getMemoryWithoutUpdate().unset(MemFlags.FLEET_BUSY);
213 float rf = fNonPrimary;
214 if (target ==
primary) rf = fPrimary;
215 MilitaryResponseParams aggroParams =
new MilitaryResponseParams(ActionType.HOSTILE,
216 "blockade_" + target.getId(),
221 aggroParams.travelText =
null;
222 aggroParams.actionText =
params.patrolText;
225 params.where.addScript(script);
static SectorAPI getSector()
boolean isActionFinished()
List< MilitaryResponseScript > scripts
void directFleets(float amount)
List< SectorEntityToken > blockadePoints
FGBlockadeAction(FGBlockadeParams params, float duration)
void setActionFinished(boolean finished)
float getSuccessFraction()
List< SectorEntityToken > getBlockadePoints()
SectorEntityToken getPrimary()
void notifyFleetsSpawnedMidSegment(RouteSegment segment)
void notifySegmentFinished(RouteSegment segment)
FGBlockadeParams getParams()
Color getSystemNameHighlightColor()
void orderFleetMovements()
void addRouteSegment(RouteData route)
SectorEntityToken primary
List< CampaignFleetAPI > getFleets()