25 if (!interval.intervalElapsed())
return;
28 MemoryAPI mem =
fleet.getMemoryWithoutUpdate();
31 if (
ability.isActiveOrInProgress()) {
32 mem.set(FleetAIFlags.HAS_SPEED_PENALTY,
true, 0.2f);
33 mem.set(FleetAIFlags.HAS_LOWER_DETECTABILITY,
true, 0.2f);
36 CampaignFleetAPI pursueTarget = mem.getFleet(FleetAIFlags.PURSUIT_TARGET);
37 CampaignFleetAPI fleeingFrom = mem.getFleet(FleetAIFlags.NEAREST_FLEEING_FROM);
38 Vector2f travelDest = mem.getVector2f(FleetAIFlags.TRAVEL_DEST);
39 boolean wantsTransponderOn = mem.getBoolean(FleetAIFlags.WANTS_TRANSPONDER_ON);
46 if (fleeingFrom !=
null) {
47 float dist = Misc.getDistance(
fleet.getLocation(), fleeingFrom.getLocation()) -
fleet.getRadius() - fleeingFrom.getRadius();
49 float detRange = fleeingFrom.getMaxSensorRangeToDetect(
fleet);
50 float ourSpeed =
fleet.getFleetData().getBurnLevel();
51 float theirSpeed = fleeingFrom.getFleetData().getBurnLevel();
53 if (!
ability.isActiveOrInProgress()) {
55 dist > detRange && dist < detRange + 300f) {
62 if (dist < detRange || ourSpeed > theirSpeed) {
71 if (
fleet.isTransponderOn()) {
82 if (pursueTarget !=
null) {
83 float closingSpeed = Misc.getClosingSpeed(
fleet.getLocation(), pursueTarget.getLocation(),
84 fleet.getVelocity(),pursueTarget.getVelocity());
85 if (closingSpeed <= 1 &&
ability.isActiveOrInProgress()) {
92 boolean smuggler = mem.getBoolean(MemFlags.MEMORY_KEY_SMUGGLER);
93 boolean pirate = mem.getBoolean(MemFlags.MEMORY_KEY_PIRATE);
97 boolean nearestMarketHostile =
false;
98 MarketAPI nearestMarket = Misc.findNearestLocalMarket(
fleet, 2000,
new MarketFilter() {
99 public boolean acceptMarket(MarketAPI market) {
103 if (nearestMarket !=
null && nearestMarket.getFaction().isHostileTo(
fleet.getFaction())) {
104 nearestMarketHostile =
true;
107 if ((smuggler || pirate || nearestMarketHostile) && !
ability.isActiveOrInProgress() && travelDest !=
null) {
108 float dist = Misc.getDistance(
fleet.getLocation(), travelDest);