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,
50 STANDING_OFF_VS_SHIP_ON_MAP_BORDER,
53 OK_TO_CANCEL_SYSTEM_USE_TO_VENT,
55 MANEUVER_RANGE_FROM_TARGET,
57 SAFE_FROM_DANGER_TIME,
59 PREFER_LEFT_BROADSIDE,
60 PREFER_RIGHT_BROADSIDE,
62 AUTO_FIRING_AT_PHASE_SHIP,
63 AUTO_BEAM_FIRING_AT_PHASE_SHIP,
68 PHASE_ATTACK_RUN_FROM_BEHIND_DIST_CRITICAL,
69 PHASE_ATTACK_RUN_IN_GOOD_SPOT,
70 PHASE_ATTACK_RUN_TIMEOUT,
78 IN_CRITICAL_DPS_DANGER,
91 WING_SHOULD_GET_SOME_DISTANCE,
103 SYSTEM_TARGET_COORDS,
109 HAS_POTENTIAL_MINE_TRIGGER_NEARBY,
111 TARGET_FOR_SHIP_SYSTEM,
116 private class FlagData {
119 float durationOverride = 0;
121 private FlagData(AIFlags flag) {
128 private Map<AIFlags, FlagData> flags =
new HashMap<AIFlags, FlagData>();
141 FlagData data = flags.get(flag);
145 flags.put(flag,
new FlagData(flag));
149 public void setFlag(AIFlags flag,
float duration) {
153 public void setFlag(AIFlags flag,
float duration, Object custom) {
167 FlagData data = flags.get(flag);
170 data.custom = custom;
172 data =
new FlagData(flag);
173 data.durationOverride = duration;
174 data.custom = custom;
175 flags.put(flag, data);
180 FlagData data = flags.get(flag);
195 List<AIFlags>
remove =
new ArrayList<AIFlags>();
196 for (AIFlags flag : flags.keySet()) {
197 FlagData data = flags.get(flag);
198 data.elapsed += amount;
200 if ((data.durationOverride <= 0 && data.elapsed >
FLAG_DURATION) ||
201 (data.durationOverride > 0 && data.elapsed > data.durationOverride)) {
205 for (AIFlags flag :
remove) {
220 return flags.containsKey(flag);