205 lines
5.9 KiB
Plaintext
205 lines
5.9 KiB
Plaintext
local clr_icon_1 = GetARGB(255, 255, 255, 255)
|
|
local clr_icon_2 = GetARGB(100, 255, 255, 255)
|
|
local ico_size, rw, rh, _le = 0.7,1,1,50
|
|
local ico_width
|
|
|
|
function utils_xml.set_icon(sec, hidden, XML_temp, XML_box, XML_box_small)
|
|
-- Edited by Sota
|
|
-- ico_width = ico_width or (is_widescreen() and 0.8 or 1)
|
|
ico_width = ico_width or utils_xml.screen_ratio()
|
|
|
|
if not (XML_temp and XML_box) then
|
|
callstack()
|
|
printe("!ERROR utils_xml.set_icon | XML_box or XML_temp doesn't exist")
|
|
return
|
|
end
|
|
|
|
if not (sec and ini_sys:section_exist(sec)) then
|
|
XML_box:Show(false)
|
|
|
|
callstack()
|
|
printe("!ERROR utils_xml.set_icon | section [%s] doesn't exist in system ini", sec)
|
|
return
|
|
end
|
|
|
|
-- Icon
|
|
local ico = utils_xml.get_item_axis(sec)
|
|
XML_box:InitTexture( utils_xml.get_icons_texture(sec) )
|
|
XML_box:SetTextureRect(Frect():set(ico.x1, ico.y1, ico.x2, ico.y2))
|
|
XML_box:SetTextureColor( hidden and clr_icon_2 or clr_icon_1 )
|
|
XML_box:SetStretchTexture(true)
|
|
XML_box:Show(true)
|
|
|
|
local pos = XML_temp:GetWndPos()
|
|
local _w = XML_temp:GetWidth()
|
|
local _h = XML_temp:GetHeight()
|
|
|
|
local ratio = ico.w/ico.h
|
|
local h, w
|
|
ico.w = ico.w * ico_size * ico_width
|
|
ico.h = ico.h * ico_size
|
|
|
|
for i=1,2 do
|
|
local w_t, h_t = 0, 0
|
|
local resize = false
|
|
if (ico.w > _w) then -- if icon width is bigger than frame width
|
|
-- Edited by Sota
|
|
-- w_t = ico.w - _w
|
|
w_t = (ico.w - _w) / ico_width -- remove width scaling for correct comparison with height
|
|
resize = true
|
|
end
|
|
if (ico.h > _h) then -- if icon height is bigger than frame height
|
|
h_t = ico.h - _h
|
|
resize = true
|
|
end
|
|
|
|
if resize then -- resize is required
|
|
if (w_t >= h_t) then -- if icon width is the big number (or square), use it as a base for resizing
|
|
w = _w
|
|
-- Edited by Sota
|
|
-- h = w / ratio
|
|
h = w / ratio / ico_width -- remove width scaling (no need for height)
|
|
elseif (w_t < h_t) then -- if icon width is the big number, use it as a base for resizing
|
|
h = _h
|
|
-- Edited by Sota
|
|
-- w = h * ratio
|
|
w = h * ratio * ico_width -- add width scaling because we get width from height
|
|
end
|
|
else -- no resize
|
|
w = ico.w
|
|
h = ico.h
|
|
end
|
|
end
|
|
|
|
local offset_x = (_w - w)/2
|
|
local offset_y = (_h - h)/2
|
|
XML_box:SetWndSize(vector2():set(w , h))
|
|
XML_box:SetWndPos(vector2():set(pos.x + offset_x , pos.y + offset_y))
|
|
|
|
local ico_layer = ini_sys:r_string_ex(sec,"1icon_layer")
|
|
if XML_box_small and ico_layer then
|
|
local ico_layer_x = ini_sys:r_float_ex(sec,"1icon_layer_x")
|
|
local ico_layer_y = ini_sys:r_float_ex(sec,"1icon_layer_y")
|
|
local ico_layer_scale = ini_sys:r_float_ex(sec,"1icon_layer_scale")
|
|
if (ico_layer_x == 0) and (ico_layer_y == 0) and (ico_layer_scale == 1) then
|
|
utils_xml.set_icon(ico_layer, hidden, XML_temp, XML_box_small)
|
|
end
|
|
end
|
|
end
|
|
|
|
local upgr_chk = {
|
|
["weapon"] = {
|
|
{ x = 1724 , y = 802 , w = 167 , h = 159 }
|
|
},
|
|
["outfit"] = {
|
|
{ x = 716 , y = 824 , w = 198 , h = 129 },
|
|
{ x = 814 , y = 579 , w = 159 , h = 137 },
|
|
{ x = 90 , y = 818 , w = 185 , h = 140 }
|
|
},
|
|
}
|
|
|
|
function utils_xml.set_upgr_icon(obj, sec, XML_box, XML_temp)
|
|
-- Edited by Sota
|
|
-- ico_width = ico_width or (utils_xml.is_widescreen() and 0.8 or 1)
|
|
ico_width = ico_width or utils_xml.screen_ratio()
|
|
|
|
local upgr_x = ini_sys:r_float_ex(sec,"upgr_icon_x")
|
|
local upgr_y = ini_sys:r_float_ex(sec,"upgr_icon_y")
|
|
local upgr_w = ini_sys:r_float_ex(sec,"upgr_icon_width")
|
|
local upgr_h = ini_sys:r_float_ex(sec,"upgr_icon_height")
|
|
if not (upgr_x and upgr_y and upgr_w and upgr_h) then
|
|
utils_xml.set_icon(sec, nil, XML_temp, XML_box)
|
|
return
|
|
end
|
|
|
|
-- Get upgrade dds
|
|
local upgr_path = ini_sys:r_string_ex(sec,"upgr_icon_path")
|
|
upgr_path = upgr_path or IsWeapon(obj) and "ui\\ui_actor_weapons" or "ui\\ui_actor_armor"
|
|
|
|
-- Decide if it should use normal icon instead
|
|
local use_ico = false
|
|
local t = {}
|
|
if IsWeapon(obj) then
|
|
for i=1,#upgr_chk["weapon"] do
|
|
t = upgr_chk["weapon"][i]
|
|
if (t.x == upgr_x) and (t.y == upgr_y) and (t.w == upgr_w) and (t.h == upgr_h) then
|
|
use_ico = true
|
|
break
|
|
end
|
|
end
|
|
elseif IsOutfit(obj) then
|
|
for i=1,#upgr_chk["outfit"] do
|
|
t = upgr_chk["outfit"][i]
|
|
if (t.x == upgr_x) and (t.y == upgr_y) and (t.w == upgr_w) and (t.h == upgr_h) then
|
|
use_ico = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
if use_ico then
|
|
utils_xml.set_icon(sec, nil, XML_temp, XML_box)
|
|
return
|
|
end
|
|
|
|
|
|
local ico = {}
|
|
ico.x1 = upgr_x
|
|
ico.y1 = upgr_y
|
|
ico.x2 = upgr_x + upgr_w
|
|
ico.y2 = upgr_y + upgr_h
|
|
ico.w = upgr_w
|
|
ico.h = upgr_h
|
|
|
|
|
|
XML_box:InitTexture(upgr_path)
|
|
XML_box:SetTextureRect(Frect():set(ico.x1, ico.y1, ico.x2, ico.y2))
|
|
XML_box:SetStretchTexture(true)
|
|
XML_box:Show(true)
|
|
|
|
local pos = XML_temp:GetWndPos()
|
|
local _w = XML_temp:GetWidth()
|
|
local _h = XML_temp:GetHeight()
|
|
|
|
local ratio = ico.w/ico.h
|
|
local h, w
|
|
ico.w = ico.w * ico_size * ico_width
|
|
ico.h = ico.h * ico_size
|
|
|
|
for i=1,2 do
|
|
local w_t, h_t = 0, 0
|
|
local resize = false
|
|
if (ico.w > _w) then -- if icon width is bigger than frame width
|
|
-- Edited by Sota
|
|
-- w_t = ico.w - _w
|
|
w_t = (ico.w - _w) / ico_width -- remove width scaling for correct comparison with height
|
|
resize = true
|
|
end
|
|
if (ico.h > _h) then -- if icon height is bigger than frame height
|
|
h_t = ico.h - _h
|
|
resize = true
|
|
end
|
|
|
|
if resize then -- resize is required
|
|
if (w_t >= h_t) then -- if icon width is the big number (or square), use it as a base for resizing
|
|
w = _w
|
|
-- Edited by Sota
|
|
-- h = w / ratio
|
|
h = w / ratio / ico_width -- remove width scaling (no need for height)
|
|
elseif (w_t < h_t) then -- if icon width is the big number, use it as a base for resizing
|
|
h = _h
|
|
-- Edited by Sota
|
|
-- w = h * ratio
|
|
w = h * ratio * ico_width -- add width scaling because we get width from height
|
|
end
|
|
else -- no resize
|
|
w = ico.w
|
|
h = ico.h
|
|
end
|
|
end
|
|
|
|
local offset_x = (_w - w)/2
|
|
local offset_y = (_h - h)/2
|
|
XML_box:SetWndSize(vector2():set(w , h))
|
|
XML_box:SetWndPos(vector2():set(pos.x + offset_x , pos.y + offset_y))
|
|
end
|