aboutsummaryrefslogtreecommitdiff
path: root/src/state_machine.lua
diff options
context:
space:
mode:
authoriamcheeseman <[email protected]>2026-03-13 20:07:31 -0400
committeriamcheeseman <[email protected]>2026-03-13 20:07:31 -0400
commitcc679988babf47d5752c609ee90444db22d2d1fe (patch)
tree46d1e8abd7ae56535afdf4910f9ba41ad65d40d9 /src/state_machine.lua
parente09caf3cf41ac3e3ea7ec252a21a7ac5b7fbb52c (diff)
Player can dash
Diffstat (limited to 'src/state_machine.lua')
-rw-r--r--src/state_machine.lua24
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