mirror of https://github.com/minetest-mods/i3.git
Skinsdb Tab update - detail info + combobox working
This commit is contained in:
parent
7b7ee41346
commit
1ad368e9ce
115
i3_mods_tabs.lua
115
i3_mods_tabs.lua
|
@ -1,3 +1,5 @@
|
|||
-- ****************************************************************************
|
||||
-- Funnctions and Variables from i3 init.lua
|
||||
local modpath = core.get_modpath "i3"
|
||||
|
||||
local maxn, sort, concat, copy, insert, remove, indexof =
|
||||
|
@ -25,27 +27,126 @@ local function fmt(elem, ...)
|
|||
return sprintf(fs_elements[elem], ...)
|
||||
end
|
||||
|
||||
local function add_subtitle(fs, name, y, ctn_len, font_size, sep, label)
|
||||
fs(fmt("style[%s;font=bold;font_size=%u]", name, font_size))
|
||||
fs("button", 0, y, ctn_len, 0.5, name, ESC(label))
|
||||
|
||||
if sep then
|
||||
fs("image", 0, y + 0.55, ctn_len, 0.035, PNG.bar)
|
||||
end
|
||||
end
|
||||
|
||||
-- ****************************************************************************
|
||||
-- Function to get detail info aout texture
|
||||
-- Forked from skinsdb mod
|
||||
local function get_skin_info_formspec(skin, xoffset, yoffset)
|
||||
local texture = skin:get_texture()
|
||||
local m_name = skin:get_meta_string("name")
|
||||
local m_author = skin:get_meta_string("author")
|
||||
local m_license = skin:get_meta_string("license")
|
||||
local m_format = skin:get_meta("format")
|
||||
-- overview page
|
||||
local raw_size = m_format == "1.8" and "2,2" or "2,1"
|
||||
|
||||
--local lxoffs = 0.8 + xoffset
|
||||
local cxoffs = 2 + xoffset
|
||||
local rxoffs = 2 + xoffset
|
||||
|
||||
local formspec = "" -- = "image["..lxoffs..","..0.6 + yoffset..";1,2;"..minetest.formspec_escape(skin:get_preview()).."]"
|
||||
if texture then
|
||||
formspec = formspec.."label["..rxoffs..","..2 + yoffset..";"..S("Raw texture")..":]"
|
||||
.."image["..1 + rxoffs..","..2.5 + yoffset..";"..raw_size..";"..texture.."]"
|
||||
end
|
||||
if m_name ~= "" then
|
||||
formspec = formspec.."label["..cxoffs..","..0.5 + yoffset..";"..S("Name")..": "..minetest.formspec_escape(m_name).."]"
|
||||
end
|
||||
if m_author ~= "" then
|
||||
formspec = formspec.."label["..cxoffs..","..1 + yoffset..";"..S("Author")..": "..minetest.formspec_escape(m_author).."]"
|
||||
end
|
||||
if m_license ~= "" then
|
||||
formspec = formspec.."label["..cxoffs..","..1.5 + yoffset..";"..S("License")..": "..minetest.formspec_escape(m_license).."]"
|
||||
end
|
||||
return formspec
|
||||
end
|
||||
|
||||
-- ****************************************************************************
|
||||
-- i3 Tab definition
|
||||
|
||||
i3.new_tab {
|
||||
name = "Skins",
|
||||
description = "Skins",
|
||||
image = "i3_skin.png",
|
||||
|
||||
|
||||
formspec = function(player, data, fs)
|
||||
--fs("label[3,1;Test 1]")
|
||||
local name = player:get_player_name()
|
||||
local _skins = skins.get_skinlist_for_player(name)
|
||||
local sks = {}
|
||||
|
||||
local ctn_len, ctn_hgt = 5.7, 6.3
|
||||
|
||||
local yextra = 1
|
||||
local yoffset = 0
|
||||
local xpos = 5
|
||||
|
||||
local _skins = skins.get_skinlist_for_player(name)
|
||||
local skin_name = skins.get_player_skin(player).name
|
||||
local sks, id = {}, 1
|
||||
|
||||
local props = player:get_properties()
|
||||
|
||||
for i, skin in ipairs(_skins) do
|
||||
if skin.name == skin_name then
|
||||
id = i
|
||||
end
|
||||
|
||||
for _, skin in ipairs(_skins) do
|
||||
sks[#sks + 1] = skin.name
|
||||
end
|
||||
|
||||
sks = concat(sks, ","):gsub(";", "")
|
||||
|
||||
fs("label", 1, yextra + 0.85, fmt("%s:", ES"Select a skin"))
|
||||
fs(fmt("dropdown[1,%f;4,0.6;skins;%s;%u;true]", yextra + 1.1, sks, data.skin_id or 1))
|
||||
--core.log("skin: ", dump(skins.get_player_skin(player).name))
|
||||
add_subtitle(fs, "player_name", 0, ctn_len + 4.5, 22, true, ESC(name))
|
||||
|
||||
if props.mesh ~= "" then
|
||||
local anim = player:get_local_animation()
|
||||
local armor_skin = __3darmor or __skinsdb
|
||||
local t = {}
|
||||
|
||||
for _, v in ipairs(props.textures) do
|
||||
t[#t + 1] = ESC(v):gsub(",", "!")
|
||||
end
|
||||
|
||||
local textures = concat(t, ","):gsub("!", ",")
|
||||
local skinxoffset = 1.3
|
||||
|
||||
--fs("style[player_model;bgcolor=black]")
|
||||
fs("model", skinxoffset, 0.2, armor_skin and 4 or 3.4, ctn_hgt,
|
||||
"player_model", props.mesh, textures, "0,-150", "false", "false",
|
||||
fmt("%u,%u%s", anim.x, anim.y, data.fs_version >= 5 and ";30" or ""))
|
||||
else
|
||||
local size = 2.5
|
||||
fs("image", 0.7, 0.2, size, size * props.visual_size.y, props.textures[1])
|
||||
end
|
||||
|
||||
fs("label", xpos, yextra, fmt("%s:", ES"Select a skin"))
|
||||
fs(fmt("dropdown[%f,%f;4,0.6;skins;%s;%u;true]", xpos, yextra + 0.2, sks, id))
|
||||
|
||||
local skin = skins.get_player_skin(player)
|
||||
local formspec = get_skin_info_formspec(skin, 3, 2)
|
||||
fs(formspec)
|
||||
|
||||
--core.log("fs skins: ",dump(formspec))
|
||||
end,
|
||||
|
||||
fields = function(player, data, fields)
|
||||
local name = player:get_player_name()
|
||||
local sb_inv = fields.scrbar_inv
|
||||
|
||||
if fields.skins then
|
||||
local id = tonumber(fields.skins)
|
||||
local _skins = skins.get_skinlist_for_player(name)
|
||||
skins.set_player_skin(player, _skins[id])
|
||||
end
|
||||
return i3.set_fs(player)
|
||||
end,
|
||||
}
|
||||
|
||||
-- ****************************************************************************
|
||||
|
|
Loading…
Reference in New Issue