Add achievements display mode switching

This commit is contained in:
Wuzzy 2024-04-11 23:36:40 +02:00
parent f990ed5289
commit b02c2f5ed5
3 changed files with 49 additions and 7 deletions

View File

@ -21,6 +21,10 @@ local HUD_TIMER = 5.0
-- Side length of the square icon in HUD message (in pixels) -- Side length of the square icon in HUD message (in pixels)
local HUD_ICON_SIZE = 64 local HUD_ICON_SIZE = 64
-- Current display mode
local MODE_LIST = 1 -- text list
local MODE_SYMBOLS = 2 -- symbols
local S = minetest.get_translator("rp_achievements") local S = minetest.get_translator("rp_achievements")
local NS = function(s) return s end local NS = function(s) return s end
@ -41,6 +45,8 @@ local legacy_achievements_file = minetest.get_worldpath() .. "/achievements.dat"
local legacy_achievements_states = {} local legacy_achievements_states = {}
local usermode = {} -- current display modes, per-player
local function load_legacy_achievements() local function load_legacy_achievements()
local f = io.open(legacy_achievements_file, "r") local f = io.open(legacy_achievements_file, "r")
@ -837,6 +843,7 @@ local function on_leaveplayer(player)
selected_row[name] = nil selected_row[name] = nil
huds[name] = nil huds[name] = nil
hud_queues[name] = nil hud_queues[name] = nil
usermode[name] = nil
end end
-- Add callback functions -- Add callback functions
@ -903,6 +910,17 @@ function achievements.get_formspec(name)
local amt_gotten = 0 local amt_gotten = 0
local amt_progress = 0 local amt_progress = 0
if not usermode[name] then
usermode[name] = MODE_LIST
end
local form = rp_formspec.get_page("rp_achievements:achievements")
-- Achievement list
form = form .. "container["..rp_formspec.default.start_point.x..","..rp_formspec.default.start_point.y.."]"
if usermode[name] == MODE_LIST then
for _, aname in ipairs(achievements.registered_achievements_list) do for _, aname in ipairs(achievements.registered_achievements_list) do
local def = achievements.registered_achievements[aname] local def = achievements.registered_achievements[aname]
@ -933,18 +951,16 @@ function achievements.get_formspec(name)
achievement_list = achievement_list .. minetest.formspec_escape(def.description) achievement_list = achievement_list .. minetest.formspec_escape(def.description)
end end
local form = rp_formspec.get_page("rp_achievements:achievements")
-- Achievement list
form = form .. "container["..rp_formspec.default.start_point.x..","..rp_formspec.default.start_point.y.."]"
-- Text list -- Text list
--form = form .. "table[0,3.0;9.75,6.2;achievement_list;" .. achievement_list form = form .. "table[0,3.0;9.75,6.2;achievement_list;" .. achievement_list
-- .. ";" .. row .. "]" .. ";" .. row .. "]"
else
-- Icon-based list -- Icon-based list
form = form .. "scrollbaroptions[min=0;max=200;thumbsize=50]" form = form .. "scrollbaroptions[min=0;max=200;thumbsize=50]"
form = form .. "scrollbar[9.5,3.0;0.3,6.2;vertical;achievement_list_scroller;0]" form = form .. "scrollbar[9.5,3.0;0.275,6.2;vertical;achievement_list_scroller;0]"
form = form .. "scroll_container[0,3.0;9.4,6.2;achievement_list_scroller;vertical;0.1]" form = form .. "scroll_container[0,3.0;9.4,6.2;achievement_list_scroller;vertical;0.1]"
local iconx = 0 local iconx = 0
local icony = 0 local icony = 0
@ -999,6 +1015,8 @@ function achievements.get_formspec(name)
form = form .. "scroll_container_end[]" form = form .. "scroll_container_end[]"
end
local aname = achievements.registered_achievements_list[row] local aname = achievements.registered_achievements_list[row]
local def = achievements.registered_achievements[aname] local def = achievements.registered_achievements[aname]
@ -1081,6 +1099,18 @@ function achievements.get_formspec(name)
form = form .. "container_end[]" form = form .. "container_end[]"
form = form .. "container_end[]" form = form .. "container_end[]"
-- Display mode button
local mode_icon, mode_tip
if usermode[name] == MODE_LIST then
mode_icon = "ui_icon_achievements_mode_icons.png"
mode_tip = S("Show symbols")
else
mode_icon = "ui_icon_achievements_mode_list.png"
mode_tip = S("Show list")
end
form = form .. rp_formspec.tab(rp_formspec.default.size.x, 0.5, "toggle_display_mode", mode_icon, mode_tip, "right")
return form return form
end end
@ -1123,6 +1153,18 @@ local function receive_fields(player, form_name, fields)
end end
rp_formspec.refresh_invpage(player, "rp_achievements:achievements") rp_formspec.refresh_invpage(player, "rp_achievements:achievements")
end end
if fields.toggle_display_mode then
if not usermode[name] then
usermode[name] = MODE_LIST
end
if usermode[name] == MODE_LIST then
usermode[name] = MODE_SYMBOLS
else
usermode[name] = MODE_LIST
end
rp_formspec.refresh_invpage(player, "rp_achievements:achievements")
end
end end
minetest.register_on_player_receive_fields(receive_fields) minetest.register_on_player_receive_fields(receive_fields)

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 B