Game engine now handles damage types but Ineed to refine the state machines so some of them can take additional data.
This commit is contained in:
parent
9e6c05eccd
commit
4b2ed2951e
3 changed files with 35 additions and 17 deletions
|
@ -91,7 +91,7 @@ void Builder::building(BuildEvent ev) {
|
||||||
|
|
||||||
if(m.match) {
|
if(m.match) {
|
||||||
gui.output(format("HIT WITH {} @ {}:{}:{} {}", m.type, m.file_name, m.lnumber, m.col, m.message));
|
gui.output(format("HIT WITH {} @ {}:{}:{} {}", m.type, m.file_name, m.lnumber, m.col, m.message));
|
||||||
game.event(GameEvent::HIT);
|
game.event(GameEvent::HIT, m.type);
|
||||||
}
|
}
|
||||||
state(READING);
|
state(READING);
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,21 +61,24 @@ void GameEngine::idle(GameEvent ev) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameEngine::in_round(GameEvent ev) {
|
void GameEngine::in_round(GameEvent ev, string &hit_type) {
|
||||||
if(ev == GameEvent::HIT) {
|
switch(ev) {
|
||||||
string er_type = "error";
|
case GameEvent::HIT:
|
||||||
hit(er_type); // FIXME: bring back error type
|
hit(hit_type); // FIXME: bring back error type
|
||||||
if(is_dead()) {
|
if(is_dead()) {
|
||||||
state(GameState::DEAD);
|
state(GameState::DEAD);
|
||||||
} else {
|
} else {
|
||||||
|
state(GameState::IN_ROUND);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GameEvent::BUILD_SUCCESS:
|
||||||
|
state(GameState::SUCCESS);
|
||||||
|
break;
|
||||||
|
case GameEvent::BUILD_FAILED:
|
||||||
|
state(GameState::FAILURE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
state(GameState::IN_ROUND);
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include "fsm.hpp"
|
#include "fsm.hpp"
|
||||||
|
#include <fmt/core.h>
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
@ -41,21 +42,35 @@ class GameEngine : DeadSimpleFSM<GameState, GameEvent> {
|
||||||
int determine_damage(string &type);
|
int determine_damage(string &type);
|
||||||
bool is_dead();
|
bool is_dead();
|
||||||
|
|
||||||
|
void event(GameEvent ev, string &hit_type) {
|
||||||
|
switch(_state) {
|
||||||
|
case GameState::IN_ROUND:
|
||||||
|
in_round(ev, hit_type);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
event(ev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void event(GameEvent ev) {
|
void event(GameEvent ev) {
|
||||||
switch(_state) {
|
switch(_state) {
|
||||||
FSM_STATE(GameState::START, start, ev);
|
FSM_STATE(GameState::START, start, ev);
|
||||||
FSM_STATE(GameState::IDLE, idle, ev);
|
FSM_STATE(GameState::IDLE, idle, ev);
|
||||||
FSM_STATE(GameState::IN_ROUND, in_round, ev);
|
|
||||||
FSM_STATE(GameState::DEAD, dead, ev);
|
FSM_STATE(GameState::DEAD, dead, ev);
|
||||||
FSM_STATE(GameState::SUCCESS, success, ev);
|
FSM_STATE(GameState::SUCCESS, success, ev);
|
||||||
FSM_STATE(GameState::FAILURE, failure, ev);
|
FSM_STATE(GameState::FAILURE, failure, ev);
|
||||||
|
case GameState::IN_ROUND: {
|
||||||
|
string hit_type = "";
|
||||||
|
in_round(ev, hit_type);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FSM to replace the others
|
// FSM to replace the others
|
||||||
void start(GameEvent ev);
|
void start(GameEvent ev);
|
||||||
void idle(GameEvent ev);
|
void idle(GameEvent ev);
|
||||||
void in_round(GameEvent ev);
|
void in_round(GameEvent ev, string &hit_type);
|
||||||
void dead(GameEvent ev);
|
void dead(GameEvent ev);
|
||||||
void success(GameEvent ev);
|
void success(GameEvent ev);
|
||||||
void failure(GameEvent ev);
|
void failure(GameEvent ev);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue