public void work() {
        Iterator<ISystem> sysIter = systems.iterator();
        updateTimer();
        long now = now();

        Collection<IEntity> entities = entitiesByID.values();

        for (IEntity each : entities) {
            if (each.hasChanged()) {
                updateInfoPacks(each);
                each.setChanged(false);
            }
        }

        while (sysIter.hasNext()) {
            ISystem system = sysIter.next();
            if (system.isRunning() && now - system.getLast() > system.getWait()) {
                system.setLast(now);
                system.work(now);
            }
        }
    }