lazarr/mods/lzr_gamestate/init.lua

48 lines
1.3 KiB
Lua
Raw Normal View History

2021-12-28 14:43:01 -08:00
lzr_gamestate = {}
-- List of game states
2022-01-08 18:53:55 -08:00
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
2021-12-28 14:43:01 -08:00
-- Always start at the MENU state
2022-01-08 18:53:55 -08:00
local current_state = lzr_gamestate.MENU
2021-12-28 14:43:01 -08:00
2022-01-08 18:53:55 -08:00
-- 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
2022-01-08 19:20:00 -08:00
minetest.log("action", "[lzr_gamestate] Game state changed to "..tostring(current_state))
2022-01-08 18:53:55 -08:00
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