#include "cc3k.h" #include "constants.h" CC3K::CC3K(const feature enabled_features, input *in, display *out, RNG *rng): enabled_features{enabled_features}, in{in}, out{out}, rng{rng} { curr_menu = std::make_unique(enabled_features); out->clear(); curr_menu->print(out); out->render(); gresult.status = game_status::main_menu; } game_status CC3K::run() { switch (gresult.status) { case main_menu: { auto tmp = curr_menu->run(in); if (tmp == -2) return terminated; if (tmp != -1) { curr_menu = nullptr; curr_game = std::make_unique((race)tmp, enabled_features, in, out, rng); out->clear(); curr_game->print(); out->render(); gresult.status = in_game; return in_game; } out->clear(); curr_menu->print(out); out->render(); return main_menu; } case in_game: { gresult = curr_game->run(); if (gresult.status == restart) { curr_game = nullptr; curr_menu = std::make_unique(enabled_features); out->clear(); curr_menu->print(out); out->render(); return main_menu; } else if (gresult.status == in_game) { out->clear(); curr_game->print(); out->render(); return in_game; } out->clear(); gresult.print(out); out->render(); return gresult.status; } case dead: case won: case escaped: gresult.run(in); return terminated; default: break; } return terminated; }