48 lines
1.3 KiB
Lua
48 lines
1.3 KiB
Lua
lzr_gamestate = {}
|
|
|
|
-- List of game states
|
|
lzr_gamestate.MENU = 1 -- When in the main menu
|
|
lzr_gamestate.LEVEL = 2 -- When playing a level
|
|
lzr_gamestate.LEVEL_COMPLETE = 3 -- When a level was won and waiting for the next level
|
|
lzr_gamestate.EDITOR = 4 -- TODO: When making a level in the level editor
|
|
|
|
-- Always start at the MENU state
|
|
local current_state = lzr_gamestate.MENU
|
|
|
|
-- Registered callbacks
|
|
lzr_gamestate.registered_on_enter_states = {}
|
|
lzr_gamestate.registered_on_exit_states = {}
|
|
|
|
------------
|
|
-- API calls
|
|
------------
|
|
|
|
lzr_gamestate.set_state = function(new_state)
|
|
local state_changed = current_state ~= new_state
|
|
local old_state = current_state
|
|
|
|
if state_changed then
|
|
for _, callback in pairs(lzr_gamestate.registered_on_enter_states) do
|
|
callback(new_state)
|
|
end
|
|
for _, callback in pairs(lzr_gamestate.registered_on_exit_states) do
|
|
callback(old_state)
|
|
end
|
|
end
|
|
|
|
current_state = new_state
|
|
minetest.log("action", "[lzr_gamestate] Game state changed to "..tostring(current_state))
|
|
end
|
|
|
|
lzr_gamestate.get_state = function()
|
|
return current_state
|
|
end
|
|
|
|
lzr_gamestate.register_on_enter_state = function(callback)
|
|
table.insert(lzr_gamestate.registered_on_enter_states, callback)
|
|
end
|
|
|
|
lzr_gamestate.register_on_exit_state = function(callback)
|
|
table.insert(lzr_gamestate.registered_on_exit_states, callback)
|
|
end
|