diff options
Diffstat (limited to 'src/state_machine.lua')
| -rw-r--r-- | src/state_machine.lua | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/state_machine.lua b/src/state_machine.lua new file mode 100644 index 0000000..7aac1bc --- /dev/null +++ b/src/state_machine.lua @@ -0,0 +1,24 @@ +register_comp("State_Machine", function(ent, default, states) + assert(states[default], "Entity does not have state '" .. default .. "'.") + + ent.states = states + ent.state = default + + for _, state in pairs(states) do + state.data = {} + try(state.init, state.data) + end +end) + +function state_update_sys(ent, dt) + try(ent.states[ent.state].update, ent, ent.states[ent.state].data, dt) +end + +function set_state(ent, to) + assert(has_comp(ent, "State_Machine"), "Entity must have a state machine.") + assert(ent.states[to], "Entity does not have state '" .. to .. "'.") + + try(ent.states[ent.state].exit, ent, ent.states[ent.state].data, to) + ent.state = to + try(ent.states[ent.state].enter, ent, ent.states[ent.state].data) +end |
