public void run() { int runMask = 0; EntityAI next = null; // Continue active AIs.resetActive(); next = AIs.nextActive(); while (next != null) { if ((next.RunMask & runMask) == 0 && next.continueRunning()) { next.run(); runMask |= next.RunMask; } else { next.reset(); AIs.flipActive(); } next = AIs.nextActive(); } // Start inactive AIs.resetInactive(); next = AIs.nextInactive(); while (next != null) { if ((next.RunMask & runMask) == 0 && next.shouldRun()) { next.init(); AIs.flipInactive(); runMask |= next.RunMask; } next = AIs.nextInactive(); } }