You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
657 B
38 lines
657 B
5 days ago
|
#include "entity.hpp"
|
||
|
|
||
|
void Entity::move(Point loc) {
|
||
|
location = loc;
|
||
|
}
|
||
|
|
||
|
void Entity::event(EntityEvent ev) {
|
||
|
switch(_state) {
|
||
|
FSM_STATE(EntityState, START, ev);
|
||
|
FSM_STATE(EntityState, HUNTING, ev);
|
||
|
FSM_STATE(EntityState, DEAD, ev);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entity::START(EntityEvent ev) {
|
||
|
state(EntityState::HUNTING);
|
||
|
}
|
||
|
|
||
|
void Entity::HUNTING(EntityEvent ev) {
|
||
|
switch(ev) {
|
||
|
case EntityEvent::HIT:
|
||
|
hp -= damage;
|
||
|
break;
|
||
|
default:
|
||
|
state(EntityState::HUNTING);
|
||
|
}
|
||
|
|
||
|
if(hp <= 0) {
|
||
|
state(EntityState::DEAD);
|
||
|
} else {
|
||
|
state(EntityState::HUNTING);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entity::DEAD(EntityEvent ev) {
|
||
|
state(EntityState::DEAD);
|
||
|
}
|