c1_lua/lua/app/ui/equip/equip_resonate_ui.lua
2025-10-26 18:10:13 +08:00

204 lines
7.4 KiB
Lua
Executable File

local EquipResonateUI = class("EquipResonateUI", BaseUI)
function EquipResonateUI:onClose()
end
function EquipResonateUI:isFullScreen()
return false
end
function EquipResonateUI:ctor(params)
params = params or {}
self.page = params.page or GConst.EquipConst.RESONATE_PAGE.LV_UP
self.slotId = params and params.slotId
end
function EquipResonateUI:getPrefabPath()
return "assets/prefabs/ui/equip/equip_resonate_ui.prefab"
end
function EquipResonateUI:onLoadRootComplete()
local uiMap = self.root:genAllChildren()
uiMap["equip_resonate_ui.mask"]:addClickListener(function()
self:closeUI()
end)
uiMap["equip_resonate_ui.bg.close_btn"]:addClickListener(function()
self:closeUI()
end)
if not self.equipCells then
self.equipCells = {}
for i = 1, 6 do
local cell = uiMap["equip_resonate_ui.bg.equip_list.equip_cell_" .. i]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.EQUIP_CELL)
cell:addClickListener(function()
local uid = DataManager.EquipData:getPartEquipUid(self.slotId, self.part)
if uid ~= 0 then
self.part = i
self:onRefresh()
end
end)
table.insert(self.equipCells, cell)
end
end
self.lvTx = uiMap["equip_resonate_ui.bg.page_info.lv_tx"]
self.tipsTx = uiMap["equip_resonate_ui.bg.page_info.tips_tx"]
-- self.attrNameTx = uiMap["equip_resonate_ui.bg.page_info.attr_bg.attr_name_tx"]
-- self.attrCurrValueTx = uiMap["equip_resonate_ui.bg.page_info.attr_bg.layout.attr_curr_value_tx"]
-- self.arrowImg = uiMap["equip_resonate_ui.bg.page_info.attr_bg.layout.arrow_img"]
-- self.attrNextValueTx = uiMap["equip_resonate_ui.bg.page_info.attr_bg.layout.attr_next_value_tx"]
-- self.layout = uiMap["equip_resonate_ui.bg.page_info.attr_bg.layout"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT)
uiMap["equip_resonate_ui.bg.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_4))
uiMap["equip_resonate_ui.bg.desc_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_DESC_6))
self.btnTxs = {I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_1), I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_2), I18N:getGlobalText(I18N.GlobalConst.EQUIP_HERO_3)}
self.pageBtns = {}
self.pageBtnTxs = {}
for i = 1, 3 do
self.pageBtns[i] = uiMap["equip_resonate_ui.bg.page_btn_" .. i]
self.pageBtnTxs[i] = uiMap["equip_resonate_ui.bg.page_btn_" .. i .. ".text"]
self.pageBtns[i]:addClickListener(function()
if self.page == i then
return
end
self.page = i
self:onRefresh()
end)
end
self.attrBgs = {}
self.attrNameTxs = {}
self.attrLayouts = {}
self.attrCurrValueTxs = {}
self.attrArrowImgs = {}
self.attrNextValueTxs = {}
for i = 1, 2 do
self.attrBgs[i] = uiMap["equip_resonate_ui.bg.page_info.attr_bg_" .. i]
self.attrNameTxs[i] = uiMap["equip_resonate_ui.bg.page_info.attr_bg_" .. i .. ".attr_name_tx"]
self.attrLayouts[i] = uiMap["equip_resonate_ui.bg.page_info.attr_bg_" .. i .. ".layout"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT)
self.attrCurrValueTxs[i] = uiMap["equip_resonate_ui.bg.page_info.attr_bg_" .. i .. ".layout.attr_curr_value_tx"]
self.attrArrowImgs[i] = uiMap["equip_resonate_ui.bg.page_info.attr_bg_" .. i .. ".layout.arrow_img"]
self.attrNextValueTxs[i] = uiMap["equip_resonate_ui.bg.page_info.attr_bg_" .. i .. ".layout.attr_next_value_tx"]
end
self:bind(DataManager.EquipData, "isDirty", function()
self:onRefresh()
end)
end
function EquipResonateUI:onRefresh()
self:refreshEquipCell()
self:refreshPageBtn()
self:refreshPage()
end
function EquipResonateUI:refreshEquipCell()
for part = 1, 6 do
local eid = DataManager.EquipData:getPartEquipUid(self.slotId, part)
if eid and eid > 0 then
local equipEntity = DataManager.EquipData:getEquipByUid(eid)
self.equipCells[part]:refresh(equipEntity, self.slotId)
else
self.equipCells[part]:refreshEmpty(part)
end
end
end
function EquipResonateUI:refreshPageBtn()
for i = 1, 3 do
if self.page == i then
self.pageBtns[i]:setSprite(GConst.ATLAS_PATH.COMMON, "common_menu_1")
self.pageBtnTxs[i]:setText(self.btnTxs[i])
else
self.pageBtns[i]:setSprite(GConst.ATLAS_PATH.COMMON, "common_menu_2")
self.pageBtnTxs[i]:setText(self.btnTxs[i])
end
end
end
function EquipResonateUI:refreshPage()
if self.page == GConst.EquipConst.RESONATE_PAGE.LV_UP then
self:refreshPageLv()
elseif self.page == GConst.EquipConst.RESONATE_PAGE.QLT then
self:refreshPageQlt()
elseif self.page == GConst.EquipConst.RESONATE_PAGE.REFINE then
self:refreshPageRefine()
end
end
function EquipResonateUI:refreshPageLv()
local lv, nextLv, attrs, attrNexts = DataManager.EquipData:getResonateLevel(self.page, self.slotId)
self:refreshUI(lv, nextLv, attrs, attrNexts, DataManager.EquipData:getResonateMaxLevel(1))
end
function EquipResonateUI:refreshPageQlt()
local lv, nextLv, attrs, attrNexts = DataManager.EquipData:getResonateLevel(self.page, self.slotId, self.part)
self:refreshUI(lv, nextLv, attrs, attrNexts, DataManager.EquipData:getResonateMaxLevel(2))
end
function EquipResonateUI:refreshPageRefine()
local lv, nextLv, attrs, attrNexts = DataManager.EquipData:getResonateLevel(self.page, self.slotId)
self:refreshUI(lv, nextLv, attrs, attrNexts, DataManager.EquipData:getResonateMaxLevel(3))
end
function EquipResonateUI:refreshUI(lv, nextLv, attrs, attrNexts, maxLevel)
self.lvTx:setText(I18N:getGlobalText(I18N.GlobalConst.LV_POINT) .. lv)
local typeList = {}
for k, v in pairs(attrNexts or {}) do
table.insert(typeList, {typeName = k, id = GFunc.getAttrIdByName(k)})
end
if #typeList <= 0 then
for k, v in pairs(attrs or {}) do
table.insert(typeList, {typeName = k, id = GFunc.getAttrIdByName(k)})
end
end
table.sort(typeList, function (a, b)
return a.id < b.id
end)
for i = 1, 2 do
if typeList[i] and typeList[i].typeName then
local typeName = typeList[i].typeName
self.attrBgs[i]:setActive(true)
self.attrNameTxs[i]:setText(GFunc.getAttrNameByType(typeName))
self.attrCurrValueTxs[i]:setText(GFunc.getFinalAttrValue(typeName, attrs[typeName] or 0))
local meshProCompNow = self.attrCurrValueTxs[i]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
local nowTipsNowX = meshProCompNow.preferredWidth
self.attrCurrValueTxs[i]:setSizeDeltaX(nowTipsNowX)
if maxLevel ~= nil and lv >= maxLevel then
self.attrArrowImgs[i]:setActive(false)
self.attrNextValueTxs[i]:setActive(false)
self.tipsTx:setText(I18N:getGlobalText(I18N.GlobalConst.COLLECTION_DESC_2))
else
if nextLv == nil then
self.tipsTx:setText(I18N:getGlobalText(I18N.GlobalConst.COLLECTION_DESC_2))
else
if self.page == GConst.EquipConst.RESONATE_PAGE.QLT then
self.tipsTx:setText(I18N:getGlobalText("EQUIP_HERO_M_" .. self.page, I18N:getGlobalText("EQUIP_QLT_DESC_" .. nextLv[1], nextLv[2])))
else
self.tipsTx:setText(I18N:getGlobalText("EQUIP_HERO_M_" .. self.page, nextLv[1]))
end
end
self.attrNextValueTxs[i]:setText(GFunc.getFinalAttrValue(typeName, attrNexts[typeName] or 0))
self.attrArrowImgs[i]:setActive(true)
self.attrNextValueTxs[i]:setActive(true)
local meshProCompNext = self.attrNextValueTxs[i]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
local nowTipsNextX = meshProCompNext.preferredWidth
self.attrNextValueTxs[i]:setSizeDeltaX(nowTipsNextX)
end
self.attrLayouts[i]:RefreshLayout()
else
self.attrBgs[i]:setActive(false)
end
end
if #typeList < 2 then
self.attrBgs[1]:setAnchoredPositionY(-4)
else
self.attrBgs[1]:setAnchoredPositionY(26)
end
end
return EquipResonateUI