Add achievements display mode switching
This commit is contained in:
parent
f990ed5289
commit
b02c2f5ed5
@ -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 |
BIN
mods/rp_achievements/textures/ui_icon_achievements_mode_list.png
Normal file
BIN
mods/rp_achievements/textures/ui_icon_achievements_mode_list.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 100 B |
Loading…
x
Reference in New Issue
Block a user