aboutsummaryrefslogtreecommitdiff
path: root/src/state_machine.lua
blob: 76eaf9b23ca7150768a3acd0f6a8dbfcfebd3d2f (plain)
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