1package com.fs.starfarer.api.impl.campaign;
5import org.lwjgl.util.vector.Vector2f;
7import com.fs.starfarer.api.EveryFrameScript;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.Script;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.CustomCampaignEntityAPI;
12import com.fs.starfarer.api.campaign.FleetAssignment;
13import com.fs.starfarer.api.campaign.SectorEntityToken;
14import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
15import com.fs.starfarer.api.campaign.ai.FleetAssignmentDataAPI;
16import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
17import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
18import com.fs.starfarer.api.impl.campaign.ids.Tags;
19import com.fs.starfarer.api.util.IntervalUtil;
20import com.fs.starfarer.api.util.Misc;
27 protected IntervalUtil
tracker =
new IntervalUtil(0.05f, 0.15f);
29 protected CustomCampaignEntityAPI
pods;
42 if (
tracker.intervalElapsed()) {
48 return elapsed >= 3f || !
pods.isAlive() ||
pods.hasTag(Tags.NON_CLICKABLE);
57 List<CampaignFleetAPI> fleets =
pods.getContainingLocation().getFleets();
59 CampaignFleetAPI closest =
null;
60 float minDist = Float.MAX_VALUE;
62 for (CampaignFleetAPI fleet : fleets) {
65 float dist = Misc.getDistance(
pods, fleet);
72 if (closest !=
null && minDist < 500f) {
79 float dur =
pods.getCargo().getFuel() +
pods.getCargo().getSpaceUsed() +
pods.getCargo().getTotalPersonnel();
80 dur = dur / fleet.getCargo().getMaxCapacity();
86 protected void respond(
final CampaignFleetAPI fleet) {
92 if (dur > 1f) dur = 1f;
94 Misc.setFlagWithReason(fleet.getMemoryWithoutUpdate(),
97 Vector2f loc = Misc.getUnitVectorAtDegreeAngle(
98 Misc.getAngleInDegrees(
pods.getLocation(), fleet.getLocation()));
99 loc.scale(fleet.getRadius() +
pods.getRadius());
100 Vector2f.add(loc,
pods.getLocation(), loc);
101 final SectorEntityToken holdLoc =
pods.getContainingLocation().createToken(loc);
103 fleet.addAssignmentAtStart(FleetAssignment.HOLD, holdLoc, dur,
"investigating " +
pods.getName().toLowerCase(),
106 Misc.fadeAndExpire(
pods);
107 fleet.getCargo().addAll(
pods.getCargo());
108 pods.getCargo().clear();
111 FleetAssignmentDataAPI curr = fleet.getCurrentAssignment();
116 private boolean done =
false;
121 return done || !Misc.isBusy(fleet) ||
pods.hasTag(Tags.NON_CLICKABLE) || !
pods.isAlive();
123 public void advance(
float amount) {
124 Vector2f loc = Misc.getUnitVectorAtDegreeAngle(
125 Misc.getAngleInDegrees(
pods.getLocation(), fleet.getLocation()));
126 loc.scale(fleet.getRadius() +
pods.getRadius());
127 Vector2f.add(loc,
pods.getLocation(), loc);
128 holdLoc.setLocation(loc.x, loc.y);
130 if (!
pods.isAlive()) {
131 if (Misc.isBusy(fleet)) {
141 Misc.setFlagWithReason(fleet.getMemoryWithoutUpdate(),
143 for (FleetAssignmentDataAPI curr : fleet.getAI().getAssignmentsCopy()) {
145 fleet.getAI().removeAssignment(curr);
152 if (fleet.getAI() ==
null)
return false;
153 if (fleet.isPlayerFleet())
return false;
155 if (!fleet.getMemoryWithoutUpdate().getBoolean(MemFlags.MEMORY_KEY_PIRATE))
return false;
157 if (fleet.getBattle() !=
null)
return false;
158 if (fleet.getMemoryWithoutUpdate().getBoolean(MemFlags.FLEET_BUSY))
return false;
160 if (fleet.getAI() instanceof ModularFleetAIAPI) {
161 ModularFleetAIAPI ai = (ModularFleetAIAPI) fleet.getAI();
162 if (ai.getAssignmentModule().areAssignmentsFrozen())
return false;
163 if (ai.isFleeing() || ai.isMaintainingContact())
return false;
164 if (ai.isCurrentAssignment(FleetAssignment.INTERCEPT))
return false;
168 VisibilityLevel level =
pods.getVisibilityLevelTo(fleet);
169 if (level == VisibilityLevel.NONE)
return false;
171 if (fleet.getCurrentAssignment() !=
null &&
172 fleet.getCurrentAssignment().getAssignment() == FleetAssignment.GO_TO_LOCATION_AND_DESPAWN) {
177 if (dur < 0.05f)
return false;
static SectorAPI getSector()
static String PODS_BUSY_REASON
float getBaseDur(CampaignFleetAPI fleet)
void respond(final CampaignFleetAPI fleet)
boolean couldInvestigatePods(CampaignFleetAPI fleet)
void advance(float amount)
void unrespond(CampaignFleetAPI fleet)
CargoPodsResponse(CustomCampaignEntityAPI pods)
CustomCampaignEntityAPI pods
static String RESPONSE_ASSIGNMENT