28 if (!interval.intervalElapsed())
return;
30 MemoryAPI mem =
fleet.getMemoryWithoutUpdate();
31 if (
ability.isActiveOrInProgress()) {
32 mem.set(FleetAIFlags.HAS_SPEED_BONUS,
true, 0.2f);
33 mem.set(FleetAIFlags.HAS_HIGHER_DETECTABILITY,
true, 0.2f);
36 boolean smuggler = mem.getBoolean(MemFlags.MEMORY_KEY_SMUGGLER);
43 if (
fleet.getAI() instanceof ModularFleetAIAPI) {
44 ModularFleetAIAPI ai = (ModularFleetAIAPI)
fleet.getAI();
45 if (ai.getTacticalModule().isMaintainingContact()) {
51 if (mem.getBoolean(FleetAIFlags.HAS_LOWER_DETECTABILITY) && !
ability.isActive()) {
67 CampaignFleetAPI pursueTarget = mem.getFleet(FleetAIFlags.PURSUIT_TARGET);
68 CampaignFleetAPI fleeingFrom = mem.getFleet(FleetAIFlags.NEAREST_FLEEING_FROM);
72 float burn = Misc.getBurnLevelForSpeed(
fleet.getVelocity().length());
82 float activationTime =
ability.getSpec().getActivationDays() *
Global.
getSector().getClock().getSecondsPerDay();
83 if (fleeingFrom !=
null) {
84 float dist = Misc.getDistance(
fleet.getLocation(), fleeingFrom.getLocation());
85 float speed = Math.max(1f, fleeingFrom.getTravelSpeed());
86 float time = dist / speed;
88 if (time >= activationTime + 5f) {
92 if (burn <= 3 && time < 5f) {
99 if (pursueTarget !=
null) {
104 float toTarget = Misc.getAngleInDegrees(
fleet.getLocation(), pursueTarget.getLocation());
105 float velDir = Misc.getAngleInDegrees(
fleet.getVelocity());
106 float diff = Misc.getAngleDiff(toTarget, velDir);
115 if (
fleet.getAI() !=
null &&
fleet.getAI().getCurrentAssignment() !=
null) {
116 FleetAssignment curr =
fleet.getAI().getCurrentAssignmentType();
117 SectorEntityToken target =
fleet.getAI().getCurrentAssignment().getTarget();
118 boolean inSameLocation = target !=
null && target.getContainingLocation() ==
fleet.getContainingLocation();
119 float distToTarget = 100000f;
120 if (inSameLocation) {
121 distToTarget = Misc.getDistance(target.getLocation(),
fleet.getLocation());
123 boolean close = distToTarget < 2000;
126 (curr == FleetAssignment.ORBIT_PASSIVE ||
127 curr == FleetAssignment.ORBIT_AGGRESSIVE ||
128 curr == FleetAssignment.DELIVER_CREW ||
129 curr == FleetAssignment.DELIVER_FUEL ||
130 curr == FleetAssignment.DELIVER_MARINES ||
131 curr == FleetAssignment.DELIVER_PERSONNEL ||
132 curr == FleetAssignment.DELIVER_RESOURCES ||
133 curr == FleetAssignment.DELIVER_SUPPLIES ||
134 curr == FleetAssignment.RESUPPLY ||
135 curr == FleetAssignment.GO_TO_LOCATION ||
136 curr == FleetAssignment.GO_TO_LOCATION_AND_DESPAWN)
141 if (inSameLocation && (
142 curr == FleetAssignment.RAID_SYSTEM ||
143 curr == FleetAssignment.PATROL_SYSTEM)) {
150 Vector2f travelDest = mem.getVector2f(FleetAIFlags.TRAVEL_DEST);
151 if (travelDest !=
null) {
152 float dist = Misc.getDistance(
fleet.getLocation(), travelDest);
153 float speed = Math.max(1f,
fleet.getTravelSpeed());
154 float time = dist / speed;
156 if (time > activationTime * 2f) {