--- @section Window local _windows = {} --- Registers a window table. --- @within Window --- @param id string The ID of the window (e.g., "splash", "menu").
--- @param window_table table The actual window module table (e.g., SplashWindow).
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.
--- Fields:
--- * update (function) Called each frame to update window logic.
--- * draw (function) Called each frame to draw the window.
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.
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