1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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
|