Files
cc3k/src/cc3k.cc

78 lines
2.3 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)
return terminated;
if (tmp != -1) {
curr_menu = nullptr;
curr_game = std::make_unique<game>((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 = nullptr;
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;
}
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;
}