command_result AI::onupdate_register(color_ostream & out) { command_result res = CR_OK; if (res == CR_OK) res = pop.onupdate_register(out); if (res == CR_OK) res = plan.onupdate_register(out); if (res == CR_OK) res = stocks.onupdate_register(out); if (res == CR_OK) res = camera.onupdate_register(out); if (res == CR_OK) { status_onupdate = events.onupdate_register("df-ai status", 3 * 28 * 1200, 3 * 28 * 1200, [this](color_ostream & out) { debug(out, status()); }); time_paused = 0; pause_onupdate = events.onupdate_register_once("df-ai unpause", [this](color_ostream &) -> bool { if (!*pause_state && world->status.popups.empty()) { Gui::getViewCoords(last_good_x, last_good_y, last_good_z); time_paused = 0; return false; } time_paused++; if (time_paused == enabler->fps * 10) { timeout_sameview(10, [this](color_ostream &) { unpause(); }); time_paused = -enabler->fps; } return false; }); tag_enemies_onupdate = events.onupdate_register("df-ai tag_enemies", 1200, 1200, [this](color_ostream & out) { tag_enemies(out); }); events.onstatechange_register_once("world unload watcher", [this](color_ostream & out, state_change_event st) -> bool { if (st == SC_WORLD_UNLOADED) { debug(out, "world unloaded, disabling self"); onupdate_unregister(out); return true; } statechanged(out, st); return false; }); } return res; }
command_result AI::onupdate_register(color_ostream & out) { command_result res = CR_OK; if (res == CR_OK) res = pop->onupdate_register(out); if (res == CR_OK) res = plan->onupdate_register(out); if (res == CR_OK) res = stocks->onupdate_register(out); if (res == CR_OK) res = camera->onupdate_register(out); if (res == CR_OK) res = embark->onupdate_register(out); if (res == CR_OK) { status_onupdate = events.onupdate_register("df-ai status", 3*28*1200, 3*28*1200, [this](color_ostream & out) { debug(out, status()); }); last_unpause = std::time(nullptr); pause_onupdate = events.onupdate_register_once("df-ai unpause", [this](color_ostream & out) -> bool { if (std::time(nullptr) < last_unpause + 11) return false; if (*pause_state) { timeout_sameview(10, [](color_ostream & out) { AI::unpause(); }); last_unpause = std::time(nullptr); } return false; }); events.onstatechange_register_once([this](color_ostream & out, state_change_event st) -> bool { if (st == SC_WORLD_UNLOADED) { debug(out, "world unloaded, disabling self"); onupdate_unregister(out); return true; } statechanged(out, st); return false; }); } return res; }