9 public static enum AIFlags {
13 HARASS_MOVE_IN_COOLDOWN,
18 FACING_OVERRIDE_FOR_MOVE_AND_ESCORT_MANEUVERS,
25 MOVEMENT_DEST_WHILE_SIDETRACKED,
26 CARRIER_FIGHTER_TARGET,
27 MAINTAINING_STRIKE_RANGE,
34 DO_NOT_AUTOFIRE_NON_ESSENTIAL_GROUPS,
41 PHASE_BRAWLER_DUMPING_FLUX,
47 DO_NOT_BACK_OFF_EVEN_WHILE_VENTING,
51 STANDING_OFF_VS_SHIP_ON_MAP_BORDER,
54 OK_TO_CANCEL_SYSTEM_USE_TO_VENT,
56 MANEUVER_RANGE_FROM_TARGET,
58 SAFE_FROM_DANGER_TIME,
60 PREFER_LEFT_BROADSIDE,
61 PREFER_RIGHT_BROADSIDE,
63 AUTO_FIRING_AT_PHASE_SHIP,
64 AUTO_BEAM_FIRING_AT_PHASE_SHIP,
69 PHASE_ATTACK_RUN_FROM_BEHIND_DIST_CRITICAL,
70 PHASE_ATTACK_RUN_IN_GOOD_SPOT,
71 PHASE_ATTACK_RUN_TIMEOUT,
76 ESCORT_RANGE_MODIFIER,
83 IN_CRITICAL_DPS_DANGER,
96 WING_SHOULD_GET_SOME_DISTANCE,
108 SYSTEM_TARGET_COORDS,
114 HAS_POTENTIAL_MINE_TRIGGER_NEARBY,
116 TARGET_FOR_SHIP_SYSTEM,
127 private class FlagData {
130 float durationOverride = 0;
132 private FlagData(AIFlags flag) {
139 private Map<AIFlags, FlagData> flags =
new HashMap<AIFlags, FlagData>();
152 FlagData data = flags.get(flag);
156 flags.put(flag,
new FlagData(flag));
160 public void setFlag(AIFlags flag,
float duration) {
164 public void setFlag(AIFlags flag,
float duration, Object custom) {
178 FlagData data = flags.get(flag);
181 data.custom = custom;
183 data =
new FlagData(flag);
184 data.durationOverride = duration;
185 data.custom = custom;
186 flags.put(flag, data);
191 FlagData data = flags.get(flag);
206 List<AIFlags>
remove =
new ArrayList<AIFlags>();
207 for (AIFlags flag : flags.keySet()) {
208 FlagData data = flags.get(flag);
209 data.elapsed += amount;
211 if ((data.durationOverride <= 0 && data.elapsed >
FLAG_DURATION) ||
212 (data.durationOverride > 0 && data.elapsed > data.durationOverride)) {
216 for (AIFlags flag :
remove) {
231 return flags.containsKey(flag);