54 lines
1.8 KiB
Lua
54 lines
1.8 KiB
Lua
--- @section Window
|
|
local _windows = {}
|
|
|
|
--- Registers a window table.
|
|
--- @within Window
|
|
--- @param id string The ID of the window (e.g., "splash", "menu").</br>
|
|
--- @param window_table table The actual window module table (e.g., SplashWindow).</br>
|
|
function Window.register(id, window_table)
|
|
_windows[id] = window_table
|
|
end
|
|
|
|
--- Retrieves a registered window table by its ID.
|
|
--- @within Window
|
|
--- @param id string The ID of the window.
|
|
--- @return result table The window module table or nil. </br>
|
|
--- Fields: </br>
|
|
--- * update (function) Called each frame to update window logic.<br/>
|
|
--- * draw (function) Called each frame to draw the window.<br/>
|
|
function Window.get(id)
|
|
return _windows[id]
|
|
end
|
|
|
|
--- Sets the currently active window.
|
|
--- @within Window
|
|
--- @param id string The ID of the window to activate.</br>
|
|
function Window.set_current(id)
|
|
Context.current_window = id
|
|
end
|
|
|
|
--- Gets the ID of the currently active window.
|
|
--- This function is used by the main game loop to update and draw the active window.
|
|
--- @within Window
|
|
--- @return string The ID of the active window.
|
|
function Window.get_current_id()
|
|
return Context.current_window
|
|
end
|
|
|
|
--- Gets the handler function for the currently active window.
|
|
-- This function is used by the main game loop to update and draw the active window.
|
|
--- @within Window
|
|
--- @return function A function that updates and draws the current window.
|
|
function Window.get_current_handler()
|
|
local window_table = Window.get(Context.current_window)
|
|
if window_table and window_table.update and window_table.draw then
|
|
return function()
|
|
window_table.update()
|
|
window_table.draw()
|
|
end
|
|
else
|
|
-- Fallback handler for unregistered or incomplete windows
|
|
return function() trace("Error: No handler for window: " .. tostring(Context.current_window)) end
|
|
end
|
|
end
|