94 lines
3.0 KiB
C++
94 lines
3.0 KiB
C++
#include "cc3k.h"
|
|
|
|
#include "constants.h"
|
|
|
|
CC3K::CC3K(const feature enabled_features,
|
|
input *in, output *out, RNG *rng):
|
|
enabled_features{enabled_features},
|
|
in{in}, out{out}, rng{rng} {
|
|
curr_menu = std::make_unique<menu>(enabled_features);
|
|
out->clear();
|
|
curr_menu->print(out, rng->get_init_seed());
|
|
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) {
|
|
gresult.status = TERMINATED;
|
|
return TERMINATED;
|
|
}
|
|
|
|
if (tmp != -1) {
|
|
curr_menu.reset();
|
|
curr_game =
|
|
std::make_unique<game>(static_cast<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, rng->get_init_seed());
|
|
out->render();
|
|
return MAIN_MENU;
|
|
}
|
|
|
|
case IN_GAME: {
|
|
gresult = curr_game->run();
|
|
|
|
if (gresult.status == RESTART) {
|
|
curr_game.reset();
|
|
curr_menu = std::make_unique<menu>(enabled_features);
|
|
out->clear();
|
|
curr_menu->print(out, rng->get_init_seed());
|
|
out->render();
|
|
gresult.status = MAIN_MENU;
|
|
return MAIN_MENU;
|
|
} else if (gresult.status == IN_GAME) {
|
|
out->clear();
|
|
curr_game->print();
|
|
out->render();
|
|
return IN_GAME;
|
|
} else if (gresult.status == TERMINATED) {
|
|
return TERMINATED;
|
|
}
|
|
|
|
out->clear();
|
|
gresult.print(out);
|
|
out->render();
|
|
return gresult.status;
|
|
}
|
|
|
|
case DEAD:
|
|
case WON:
|
|
case ESCAPED:
|
|
curr_game.reset();
|
|
gresult.run(in);
|
|
|
|
if (gresult.status == RESTART) {
|
|
curr_menu = std::make_unique<menu>(enabled_features);
|
|
out->clear();
|
|
curr_menu->print(out, rng->get_init_seed());
|
|
out->render();
|
|
gresult.status = MAIN_MENU;
|
|
return MAIN_MENU;
|
|
}
|
|
|
|
return TERMINATED;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return TERMINATED;
|
|
}
|