From cc679988babf47d5752c609ee90444db22d2d1fe Mon Sep 17 00:00:00 2001 From: iamcheeseman Date: Fri, 13 Mar 2026 20:07:31 -0400 Subject: Player can dash --- src/state_machine.lua | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/state_machine.lua (limited to 'src/state_machine.lua') 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 -- cgit v1.3-2-g0d8e