--- @section AudioTestWindow AudioTestWindow = { index_menu = 1, index_func = 1, list_func = {}, menuitems = {}, last_pressed = false } --- Generates menu items for audio test. --- @within AudioTestWindow --- @param list_func table List of audio functions.
--- @param index_func number Current index of selected function.
--- @return result table Generated menu items, an array of menu item tables or nil.
--- Fields:
--- * label (string) Display text for the menu item.
--- * decision (function) Called when the menu item is selected.
function AudioTestWindow.generate_menuitems(list_func, index_func) return { { label = "Play music/sound: " .. (list_func[index_func] or "?"), decision = function() local current_func = Audio[list_func[index_func]] if current_func then current_func() else trace("Invalid Audio function: " .. list_func[index_func]) end end }, { label = "Stop playing music", decision = function() Audio.music_stop() end }, { label = "Back", decision = function() AudioTestWindow.back() end }, } end --- Generates list of audio functions. --- @within AudioTestWindow --- @return result table A sorted list of audio function names. function AudioTestWindow.generate_listfunc() local result = {} for k, v in pairs(Audio) do if type(v) == "function" then result[#result + 1] = k end end table.sort(result) return result end --- Navigates back from audio test window. --- @within AudioTestWindow function AudioTestWindow.back() Audio.sfx_deselect() GameWindow.set_state("menu") end --- Initializes audio test window. --- @within AudioTestWindow function AudioTestWindow.init() AudioTestWindow.last_pressed = false AudioTestWindow.index_menu = 1 AudioTestWindow.index_func = 1 AudioTestWindow.list_func = AudioTestWindow.generate_listfunc() AudioTestWindow.menuitems = AudioTestWindow.generate_menuitems( AudioTestWindow.list_func, AudioTestWindow.index_func ) end --- Draws audio test window. --- @within AudioTestWindow function AudioTestWindow.draw() UI.draw_top_bar("Audio test") UI.draw_menu(AudioTestWindow.menuitems, AudioTestWindow.index_menu, 20, 50) end --- Updates audio test window logic. --- @within AudioTestWindow function AudioTestWindow.update() if Input.up() then AudioTestWindow.index_menu = Util.safeindex(AudioTestWindow.menuitems, AudioTestWindow.index_menu - 1) elseif Input.down() then AudioTestWindow.index_menu = Util.safeindex(AudioTestWindow.menuitems, AudioTestWindow.index_menu + 1) elseif Input.left() then AudioTestWindow.index_func = Util.safeindex( AudioTestWindow.list_func, AudioTestWindow.index_func - 1 ) AudioTestWindow.menuitems = AudioTestWindow.generate_menuitems( AudioTestWindow.list_func, AudioTestWindow.index_func ) elseif Input.right() then AudioTestWindow.index_func = Util.safeindex( AudioTestWindow.list_func, AudioTestWindow.index_func + 1 ) AudioTestWindow.menuitems = AudioTestWindow.generate_menuitems( AudioTestWindow.list_func, AudioTestWindow.index_func ) elseif Input.menu_confirm() then AudioTestWindow.menuitems[AudioTestWindow.index_menu].decision() elseif Input.menu_back() then AudioTestWindow.back() end end