full implementation!
bug: level generation will generate nullptrs
This commit is contained in:
76
src/cc3k.cc
Normal file
76
src/cc3k.cc
Normal file
@ -0,0 +1,76 @@
|
||||
#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<menu>(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<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);
|
||||
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);
|
||||
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;
|
||||
}
|
Reference in New Issue
Block a user