summaryrefslogtreecommitdiff
path: root/unified_inventory_page.lua
blob: 99a21c1c16956db92838faf1c3723d9f8cead4bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
local S
if minetest.get_modpath("intllib") then
	S = intllib.Getter()
else
	S = function(s) return s end
end

local dropdown_values = {}
local skins_reftab = {}
local skins_reftab_byskin = {}

unified_inventory.register_page("skins", {
	get_formspec = function(player)
		local name = player:get_player_name()
		local skin = skins.get_player_skin(player)
		local formspec = ("background[0.06,0.99;7.92,7.52;ui_misc_form.png]"
			.."image[0,.75;1,2;"..skins.preview[skin].."]"
			.."label[6,.5;"..S("Raw texture")..":]"
			.."image[6,1;2,1;"..skins.textures[skin].."]")

		local meta = skins.meta[skin]
		if meta then
			if meta.name ~= "" then
				formspec = formspec.."label[2,.5;"..S("Name")..": "..minetest.formspec_escape(meta.name).."]"
			end
			if meta.author ~= "" then
				formspec = formspec.."label[2,1;"..S("Author")..": "..minetest.formspec_escape(meta.author).."]"
			end
			if meta.license ~= "" then
				formspec = formspec.."label[2,1.5;"..S("License")..": "..minetest.formspec_escape(meta.license).."]"
			end
			if meta.description ~= "" then --what's that??
				formspec = formspec.."label[2,2;"..S("Description")..": "..minetest.formspec_escape(meta.description).."]"
			end
		end
		local page = 1
		if skins_reftab_byskin[skin] then
			page = skins_reftab_byskin[skin].page
		end
		formspec = formspec .. "button[.75,3;6.5,.5;skins_page$"..page..";"..S("Change").."]"
		return {formspec=formspec}
	end,
})

unified_inventory.register_button("skins", {
	type = "image",
	image = "skins_button.png",
})

-- Create all of the skin-picker pages.
local total_pages = 1
for i, skin in ipairs(skins.list) do
	local page = math.floor((i-1) / 16)+1
	local index_p = (i-1)%16+1

	skins_reftab[i] = { index = i, page = page, index_p = index_p, skin = skin }
	skins_reftab_byskin[skin] = skins_reftab[i]
	total_pages = page
end

for page=1, total_pages do
	local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]"
	for i = (page-1)*16+1, page*16 do
		if not skins_reftab[i] then
			break
		end
		local index_p = skins_reftab[i].index_p
		local x = (index_p-1) % 8
		local y
		if index_p > 8 then
			y = 1.8
		else
			y = -0.1
		end
		formspec = (formspec.."image_button["..x..","..y..";1,2;"..
			skins.preview[skins_reftab[i].skin]..";skins_set$"..i..";]"..
			"tooltip[skins_set$"..i..";"..minetest.formspec_escape(skins.meta[skins_reftab[i].skin].name).."]")
	end
	local page_prev = page - 1
	local page_next = page + 1
	if page_prev < 1 then
		page_prev = total_pages
	end
	if page_next > total_pages then
		page_next = 1
	end
	local page_list = ""
	dropdown_values = {}
	for pg=1, total_pages do
		local pagename = S("Page").." "..pg.."/"..total_pages
		dropdown_values[pagename] = pg
		if pg > 1 then page_list = page_list.."," end
		page_list = page_list..pagename
	end
	formspec = (formspec
		.."button[0,3.8;1,.5;skins_page$"..page_prev..";<<]"
		.."dropdown[1,3.68;6.5,.5;skins_selpg;"..page_list..";"..page.."]"
		.."button[7,3.8;1,.5;skins_page$"..page_next..";>>]")
	unified_inventory.register_page("skins_page$"..(page), {
		get_formspec = function(player)
			return {formspec=formspec}
		end
	})
end


-- click button handlers
minetest.register_on_player_receive_fields(function(player, formname, fields)
	if fields.skins then
		unified_inventory.set_inventory_formspec(player, "craft")
		return
	end
	for field, _ in pairs(fields) do
		local current = string.split(field, "$", 2)
		if current[1] == "skins_set" then
			skins.set_player_skin(player, skins_reftab[tonumber(current[2])].skin)
			unified_inventory.set_inventory_formspec(player, "skins")
			return
		elseif current[1] == "skins_page" then
			unified_inventory.set_inventory_formspec(player, "skins_page$"..current[2])
			return
		end
	end
	if fields.skins_selpg then
		local page = dropdown_values[fields.skins_selpg]
		unified_inventory.set_inventory_formspec(player, "skins_page$"..(page))
		return
	end
end)