Initial commit (version 0.1-test)
This commit is contained in:
280
mods/sounds/tests.lua
Normal file
280
mods/sounds/tests.lua
Normal file
@@ -0,0 +1,280 @@
|
||||
|
||||
--- Sounds Tests
|
||||
--
|
||||
-- Enabled with [sounds.enable_tests](settings.html#sounds.enable_tests).
|
||||
--
|
||||
-- @topic tests
|
||||
|
||||
|
||||
local S = core.get_translator(sounds.modname)
|
||||
|
||||
local player_cache = {}
|
||||
local groups_list = {}
|
||||
local s_handle
|
||||
|
||||
local fs_w = 16
|
||||
local fs_h = 12
|
||||
|
||||
local get_tests_fs = function(pname)
|
||||
local p_cache = player_cache[pname] or {}
|
||||
|
||||
local fs = "formspec_version[2]"
|
||||
.. "size[" .. fs_w .. "," .. fs_h .. "]"
|
||||
.. "label[0.25,0.5;" .. S("Sounds Tests") .. "]"
|
||||
.. "button_exit[" .. fs_w-0.75 .. ",0.25;0.5,0.5;btn_close;X]"
|
||||
.. "label[0.25,1.75;Last played:]"
|
||||
.. "textlist[3.25,1.5;" .. fs_w-5.5 .. ",1.5;played_status;"
|
||||
.. S("Name: @1", (p_cache.name or ""))
|
||||
.. "," .. S("Cached: @1", (p_cache.cached or ""))
|
||||
.. "," .. S("Played: @1", (p_cache.played or ""))
|
||||
.. "]"
|
||||
.. "label[0.25,3.5;" .. S("Manual play:") .. "]"
|
||||
.. "field[3.25,3.25;" .. fs_w-5.5 .. ",0.5;input_name;;" .. (p_cache.manual_play or "") .. "]"
|
||||
.. "field_close_on_enter[input_name;false]"
|
||||
.. "button[" .. fs_w-1.75 .. ",3.25;1.5,0.5;btn_play_man;" .. S("Play") .. "]"
|
||||
.. "label[0.25,4.25;" .. S("Group play:") .. "]"
|
||||
.. "textlist[3.25,4;" .. fs_w-(5.5*2) .. "," .. fs_h-4.25 .. ";groups;"
|
||||
|
||||
if #groups_list == 0 then -- cache groups
|
||||
for k in pairs(sounds) do
|
||||
if type(sounds[k]) == "SoundGroup" then
|
||||
table.insert(groups_list, k)
|
||||
end
|
||||
end
|
||||
|
||||
for nk in pairs(sounds.node) do
|
||||
if type(sounds.node[nk]) == "SoundGroup" then
|
||||
table.insert(groups_list, "node." .. nk)
|
||||
end
|
||||
for nnk in pairs(sounds.node[nk]) do
|
||||
if type(sounds.node[nk][nnk]) == "SoundGroup" then
|
||||
table.insert(groups_list, "node." .. nk .. "." .. nnk)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(groups_list)
|
||||
end
|
||||
|
||||
local g = ""
|
||||
local g_added = 0
|
||||
for _, k in ipairs(groups_list) do
|
||||
if g_added > 0 then
|
||||
g = g .. ","
|
||||
end
|
||||
g = g .. k
|
||||
g_added = g_added + 1
|
||||
end
|
||||
|
||||
fs = fs .. g .. "]"
|
||||
.. "textlist[8.75,4;" .. fs_w-(5.5*2) .. "," .. fs_h-4.25 .. ";gsounds;"
|
||||
|
||||
if p_cache.selected_group then
|
||||
local group_name = groups_list[p_cache.selected_group]
|
||||
local s_group
|
||||
if group_name then
|
||||
if string.find(group_name, ".") then
|
||||
s_group = sounds
|
||||
for _, subgroup in ipairs(group_name:split(".")) do
|
||||
s_group = s_group[subgroup]
|
||||
end
|
||||
else
|
||||
s_group = sounds[group_name]
|
||||
end
|
||||
end
|
||||
|
||||
s_group = s_group or {}
|
||||
|
||||
local s = ""
|
||||
local s_added = 0
|
||||
for _, s_name in ipairs(s_group) do
|
||||
local r_count = sounds.cache[s_name] or sounds.cache["sounds_" .. s_name]
|
||||
if s_added > 0 then
|
||||
s = s .. ","
|
||||
end
|
||||
s = s .. s_name
|
||||
if type(r_count) == "number" then
|
||||
s = s .. " (" .. r_count .. " sounds)"
|
||||
end
|
||||
|
||||
s_added = s_added + 1
|
||||
end
|
||||
|
||||
fs = fs .. s
|
||||
end
|
||||
|
||||
fs = fs .. "]"
|
||||
.. "button[" .. fs_w-1.75 .. ",4;1.5,0.5;btn_play_grp;" .. S("Play") .. "]"
|
||||
.. "button[" .. fs_w-1.75 .. ",4.75;1.5,0.5;btn_rand;" .. S("Random") .. "]"
|
||||
.. "button[" .. fs_w-1.75 .. ",5.5;1.5,0.5;btn_stop;" .. S("Stop") .. "]"
|
||||
.. "checkbox[" .. fs_w-1.75 .. ",6.5;chk_loop;" .. S("Loop") .. ";"
|
||||
.. tostring(p_cache.loop or "false") .. "]"
|
||||
|
||||
return fs
|
||||
end
|
||||
|
||||
--- Displays sounds tests formspec.
|
||||
--
|
||||
-- @local
|
||||
-- @tparam string pname Player name to whom formspec is shown.
|
||||
local show_tests = function(pname)
|
||||
core.show_formspec(pname, "sounds_tests", get_tests_fs(pname))
|
||||
end
|
||||
|
||||
--- Displays sounds tests formspec.
|
||||
--
|
||||
-- @chatcmd sounds_tests
|
||||
core.register_chatcommand("sounds_tests", {
|
||||
description = S("Displays sounds tests formspec."),
|
||||
func = function(pname, param)
|
||||
show_tests(pname)
|
||||
return true
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname == "sounds_tests" then
|
||||
local pname = player:get_player_name()
|
||||
player_cache[pname] = player_cache[pname] or {}
|
||||
local p_cache = player_cache[pname]
|
||||
|
||||
if fields.chk_loop ~= nil then
|
||||
p_cache.loop = fields.chk_loop == "true"
|
||||
end
|
||||
|
||||
if fields.quit then
|
||||
if s_handle then
|
||||
sounds:stop(s_handle)
|
||||
s_handle = nil
|
||||
end
|
||||
|
||||
player_cache[pname] = nil
|
||||
elseif fields.btn_stop then
|
||||
if s_handle then
|
||||
sounds:stop(s_handle)
|
||||
s_handle = nil
|
||||
end
|
||||
elseif fields.btn_play_man then
|
||||
if s_handle then
|
||||
sounds:stop(s_handle)
|
||||
s_handle = nil
|
||||
end
|
||||
|
||||
local s_name = tostring(fields.input_name):trim()
|
||||
if s_name ~= "" then
|
||||
p_cache.name = s_name
|
||||
p_cache.cached = S("no")
|
||||
if sounds.cache[s_name] then
|
||||
p_cache.cached = S("yes")
|
||||
end
|
||||
|
||||
s_handle = sounds:play(s_name, {to_player=pname, loop=p_cache.loop})
|
||||
|
||||
p_cache.played = S("no")
|
||||
if s_handle then
|
||||
p_cache.played = S("yes")
|
||||
end
|
||||
|
||||
p_cache.manual_play = s_name
|
||||
show_tests(pname)
|
||||
end
|
||||
elseif fields.groups then
|
||||
local selected_group = tostring(fields.groups):gsub("^CHG:", "")
|
||||
p_cache.selected_group = tonumber(selected_group)
|
||||
show_tests(pname)
|
||||
elseif fields.gsounds then
|
||||
local selected_sound = tostring(fields.gsounds):gsub("^CHG:", "")
|
||||
p_cache.selected_sound = tonumber(selected_sound)
|
||||
elseif fields.btn_play_grp then
|
||||
if s_handle then
|
||||
sounds:stop(s_handle)
|
||||
s_handle = nil
|
||||
end
|
||||
|
||||
if p_cache then
|
||||
local selected_group = p_cache.selected_group
|
||||
if selected_group then
|
||||
local group_name = groups_list[selected_group]
|
||||
local sound_group
|
||||
if group_name then
|
||||
if string.find(group_name, ".") then
|
||||
sound_group = sounds
|
||||
for _, subgroup in ipairs(group_name:split(".")) do
|
||||
sound_group = sound_group[subgroup]
|
||||
end
|
||||
else
|
||||
sound_group = sounds[sound_group]
|
||||
end
|
||||
end
|
||||
|
||||
if type(sound_group) == "SoundGroup" then
|
||||
local s_idx = p_cache.selected_sound or 1
|
||||
local s_count = sound_group:count()
|
||||
if s_idx > s_count then
|
||||
s_idx = s_count
|
||||
end
|
||||
p_cache.selected_sound = s_idx
|
||||
|
||||
local s_name
|
||||
s_handle, s_name = sound_group(s_idx, {to_player=pname, loop=p_cache.loop})
|
||||
p_cache.name = s_name
|
||||
|
||||
p_cache.cached = S("no")
|
||||
if sounds.cache[s_name] then
|
||||
p_cache.cached = S("yes")
|
||||
end
|
||||
p_cache.played = S("no")
|
||||
if s_handle then
|
||||
p_cache.played = S("yes")
|
||||
end
|
||||
|
||||
show_tests(pname)
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif fields.btn_rand then
|
||||
if s_handle then
|
||||
sounds:stop(s_handle)
|
||||
s_handle = nil
|
||||
end
|
||||
|
||||
if p_cache then
|
||||
local selected_group = p_cache.selected_group
|
||||
if selected_group then
|
||||
local group_name = groups_list[selected_group]
|
||||
local sound_group
|
||||
if group_name then
|
||||
if string.find(group_name, ".") then
|
||||
sound_group = sounds
|
||||
for _, subgroup in ipairs(group_name:split(".")) do
|
||||
sound_group = sound_group[subgroup]
|
||||
end
|
||||
else
|
||||
sound_group = sounds[sound_group]
|
||||
end
|
||||
end
|
||||
|
||||
if type(sound_group) == "SoundGroup" then
|
||||
local s_name
|
||||
s_handle, s_name = sound_group({to_player=pname, loop=p_cache.loop})
|
||||
p_cache.name = s_name
|
||||
|
||||
p_cache.cached = S("no")
|
||||
if sounds.cache[s_name] then
|
||||
p_cache.cached = S("yes")
|
||||
end
|
||||
p_cache.played = S("no")
|
||||
if s_handle then
|
||||
p_cache.played = S("yes")
|
||||
end
|
||||
|
||||
show_tests(pname)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user