GameEngine is now a state machine so I can push its design further and keep it solid.
This commit is contained in:
parent
1c89afaee2
commit
9e6c05eccd
5 changed files with 56 additions and 56 deletions
|
@ -4,6 +4,7 @@
|
|||
#include <fmt/core.h>
|
||||
#include <fmt/color.h>
|
||||
#include "game_engine.hpp"
|
||||
#include <cassert>
|
||||
|
||||
const auto ERROR = fmt::emphasis::bold | fg(fmt::color::red);
|
||||
|
||||
|
@ -23,18 +24,6 @@ int GameEngine::determine_damage(string &type) {
|
|||
}
|
||||
}
|
||||
|
||||
void GameEngine::start_round() {
|
||||
hits_taken = 0;
|
||||
}
|
||||
|
||||
void GameEngine::end_round() {
|
||||
++rounds;
|
||||
if(hits_taken == 0) {
|
||||
++streak;
|
||||
heal();
|
||||
}
|
||||
}
|
||||
|
||||
void GameEngine::reset() {
|
||||
rounds = 0;
|
||||
streak = 0;
|
||||
|
@ -46,8 +35,6 @@ bool GameEngine::hit(string &type) {
|
|||
int damage = determine_damage(type);
|
||||
hit_points -= damage;
|
||||
++hits_taken;
|
||||
streak = 0;
|
||||
|
||||
return is_dead();
|
||||
}
|
||||
|
||||
|
@ -62,20 +49,52 @@ bool GameEngine::is_dead() {
|
|||
|
||||
void GameEngine::start(GameEvent ev) {
|
||||
state(GameState::IDLE);
|
||||
idle(ev);
|
||||
}
|
||||
|
||||
void GameEngine::idle(GameEvent ev) {
|
||||
state(GameState::IDLE);
|
||||
if(ev == GameEvent::BUILD_START) {
|
||||
hits_taken = 0;
|
||||
state(GameState::IN_ROUND);
|
||||
} else {
|
||||
state(GameState::IDLE);
|
||||
}
|
||||
}
|
||||
|
||||
void GameEngine::in_round(GameEvent ev) {
|
||||
state(GameState::IN_ROUND);
|
||||
if(ev == GameEvent::HIT) {
|
||||
string er_type = "error";
|
||||
hit(er_type); // FIXME: bring back error type
|
||||
if(is_dead()) {
|
||||
state(GameState::DEAD);
|
||||
} else {
|
||||
state(GameState::IN_ROUND);
|
||||
}
|
||||
} else if(ev == GameEvent::BUILD_SUCCESS) {
|
||||
state(GameState::SUCCESS);
|
||||
} else if(ev == GameEvent::BUILD_FAILED) {
|
||||
state(GameState::FAILURE);
|
||||
} else {
|
||||
state(GameState::IN_ROUND);
|
||||
}
|
||||
}
|
||||
|
||||
void GameEngine::dead(GameEvent ev) {
|
||||
state(GameState::DEAD);
|
||||
reset();
|
||||
state(GameState::IDLE);
|
||||
}
|
||||
|
||||
void GameEngine::alive(GameEvent ev) {
|
||||
state(GameState::ALIVE);
|
||||
void GameEngine::success(GameEvent ev) {
|
||||
assert(ev == GameEvent::BUILD_DONE && "success state expected BUILD_DONE");
|
||||
++rounds;
|
||||
++streak;
|
||||
heal();
|
||||
state(GameState::IDLE);
|
||||
}
|
||||
|
||||
void GameEngine::failure(GameEvent ev) {
|
||||
assert(ev == GameEvent::BUILD_DONE && "failure state expected BUILD_DONE");
|
||||
++rounds;
|
||||
streak = 0;
|
||||
state(GameState::IDLE);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue