78 lines
2.3 KiB
C++
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;
|
|
}
|