void check_turn_ready() { if (current_turn && !check_gameover(0)) { if (recv_all_actions(current_turn)) { if ((queued_screen == GAME_SCREEN_WORLD && !door_dir) || screen == GAME_SCREEN_WORLD) { if (server) { do_ai(); /* computer players select their actions */ send_ai_actions(); server_prepare_actions(); } do_actions(); current_turn++; } } } }
void Engine::main_loop() { setup_curses(); map->update_visibility_from(player->get_pos()); render(); main_loop_done = false; while(!main_loop_done) { switch (state) { case NEUTRAL: if (detect_player_and_mob_turns()) break; if (detect_modal_messages()) break; tick(); break; case PLAYER_TURN: render(); if(handle_keypress(getch())) { state = NEUTRAL; player->turn_taken(); } map->update_visibility_from(player->get_pos()); break; case MOB_TURN: do_ai(); state = NEUTRAL; break; case VIEW_INVENTORY: render(); render_inv(); doupdate(); getch(); state = NEUTRAL; break; case WIELD: do_wield(); state = NEUTRAL; player->turn_taken(); break; case FIRE: if (fire_weapon()) { player->turn_taken(); } state = NEUTRAL; break; case MODAL_MSG: render(); render_modal_messages(); doupdate(); while(getch() != ' ') {} state = NEUTRAL; break; } if (player->is_dead()) { game_over_lost(); } } teardown_curses(); }