From e262e3fb9ac1bfeb82c443224851c999ab3d800d Mon Sep 17 00:00:00 2001 From: Sokomine Date: Sat, 8 May 2021 16:31:57 +0200 Subject: [PATCH] made yl_speak_up.get_sorted_options more flexible --- functions.lua | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/functions.lua b/functions.lua index 5e23b23..fb8d9b4 100644 --- a/functions.lua +++ b/functions.lua @@ -948,7 +948,7 @@ local function get_fs_edit_option_dialog(player, n_id, d_id, o_id) -- can the button "next" be shown? local button_next = "" -- sort all options by o_sort - local sorted_list = yl_speak_up.get_sorted_options(n_dialog.d_options) + local sorted_list = yl_speak_up.get_sorted_options(n_dialog.d_options, "o_sort") local o_found = o_id for i, o in ipairs(sorted_list) do if(o == o_id and sorted_list[ i-1 ]) then @@ -2030,17 +2030,20 @@ yl_speak_up.save_changes_and_switch_to_other_dialog = function(player, fields, t end + + -- helper function for sorting options/answers using options[o_id].o_sort -yl_speak_up.get_sorted_options = function(options) +-- (or dialogs by d_sort) +yl_speak_up.get_sorted_options = function(options, sort_by) local sorted_list = {} for k,v in pairs(options) do table.insert(sorted_list, k) end table.sort(sorted_list, function(a,b) - return tonumber(options[a].o_sort) - and tonumber(options[b].o_sort) - and tonumber(options[a].o_sort) < tonumber(options[b].o_sort) + return tonumber(options[a][sort_by]) + and tonumber(options[b][sort_by]) + and tonumber(options[a][sort_by]) < tonumber(options[b][sort_by]) end ) return sorted_list @@ -2117,7 +2120,7 @@ yl_speak_up.edit_mode_apply_changes = function(pname, fields) local o_id = fields.o_id -- which dialog to show instead of the deleted one? local next_o_id = o_id - local sorted_list = yl_speak_up.get_sorted_options(dialog.n_dialogs[d_id].d_options) + local sorted_list = yl_speak_up.get_sorted_options(dialog.n_dialogs[d_id].d_options, "o_sort") for i, o in ipairs(sorted_list) do if(o == o_id and sorted_list[ i+1 ]) then next_o_id = sorted_list[ i+1 ] @@ -2151,7 +2154,7 @@ yl_speak_up.edit_mode_apply_changes = function(pname, fields) "Dialog "..d_id..": Option "..tostring(o_id).." was set to -1 (do not list).") else -- get the old sorted list - local sorted_list = yl_speak_up.get_sorted_options(dialog.n_dialogs[d_id].d_options) + local sorted_list = yl_speak_up.get_sorted_options(dialog.n_dialogs[d_id].d_options, "o_sort") -- negative numbers are not shown local entries_shown_list = {} for i, o in ipairs(sorted_list) do @@ -2369,7 +2372,7 @@ minetest.register_on_player_receive_fields( -- the player wants to see the previous option/answer if(fields.edit_option_prev) then -- sort all options by o_sort - local sorted_list = yl_speak_up.get_sorted_options(n_dialog.d_options) + local sorted_list = yl_speak_up.get_sorted_options(n_dialog.d_options, "o_sort") local o_found = o_id for i, o in ipairs(sorted_list) do if(o == o_id and sorted_list[ i-1]) then @@ -2383,7 +2386,7 @@ minetest.register_on_player_receive_fields( -- the player wants to see the next option/answer elseif(fields.edit_option_next) then -- sort all options by o_sort - local sorted_list = yl_speak_up.get_sorted_options(n_dialog.d_options) + local sorted_list = yl_speak_up.get_sorted_options(n_dialog.d_options, "o_sort") local o_found = o_id for i, o in ipairs(sorted_list) do if(o == o_id and sorted_list[ i+1 ]) then