Files
SL1900 d51057c7f3 Update - 1.5.0.78
EN: 1.5.0.78
CN: 1.5.0.80
JP: 1.5.0.82
KR: 1.5.0.85
2026-01-13 14:00:00 +09:00

260 lines
9.0 KiB
Lua

local BaseCtrl = require("Game.UI.CommonTipsEx.CommonTipsBaseCtrl")
local EquipmentTipsCtrl = class("EquipmentTipsCtrl", BaseCtrl)
EquipmentTipsCtrl._mapNodeConfig = {
btnCloseTips = {
sComponentName = "UIButton",
callback = "OnBtnClick_ClosePanel"
},
btnCloseWordTip = {
sComponentName = "Button",
callback = "OnBtnClick_CloseWord"
},
imgWordTipBg = {},
TMPWordDesc = {sComponentName = "TMP_Text"},
TMPWordTipsTitle = {sComponentName = "TMP_Text"},
imgTipsBg = {
sComponentName = "RectTransform"
},
rtContent = {
sComponentName = "RectTransform"
},
rtContentCanvasGroup = {
sNodeName = "rtContent",
sComponentName = "CanvasGroup"
},
TipsContent = {
sComponentName = "RectTransform"
},
safeAreaRoot = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "RectTransform"
},
srDesc = {
sComponentName = "RectTransform"
},
ScrollView = {sComponentName = "ScrollRect"},
Content = {
sComponentName = "RectTransform"
},
txtTipName = {sComponentName = "TMP_Text"},
goStar = {
sCtrlName = "Game.UI.TemplateEx.TemplateStarCtrl"
},
txtTipLevel = {sComponentName = "TMP_Text"},
txtTipLevelCn = {sComponentName = "TMP_Text"},
btnLock = {
sComponentName = "UIButton",
callback = "OnBtnClick_Lock"
},
imgLock = {},
imgUnlock = {},
imgEquipType = {sComponentName = "Image"},
txtEquipmentType = {sComponentName = "TMP_Text"},
txtEquipped = {sComponentName = "TMP_Text"},
goBaseProperty = {},
goRandomProperty = {nCount = 3},
txtTipBaseAttr = {
sComponentName = "TMP_Text",
sLanguageId = "Equipment_Base_Attr_Title"
},
rtBaseAttr = {
sComponentName = "RectTransform"
},
txtTipRandomAttr = {
sComponentName = "TMP_Text",
sLanguageId = "Equipment_Random_Attr_Title"
},
rtRandomAttr = {
sComponentName = "RectTransform"
},
txtTipDesc = {
sComponentName = "TMP_Text",
sLanguageId = "Equipment_Desc_Title"
},
btnShortcutClose = {
sComponentName = "NaviButton",
callback = "OnBtnClick_ClosePanel"
}
}
EquipmentTipsCtrl._mapEventConfig = {}
EquipmentTipsCtrl.minTipHeight = 87
EquipmentTipsCtrl.maxTipHeight = 587.6
local titleHeight = 285.87
local random_attr_normal = 1
local random_attr_match = 2
local random_attr_lock = 3
function EquipmentTipsCtrl:Refresh(nId, mapEquip, nCharId)
local nChar, equipmentData
if nId ~= nil and nId ~= 0 then
self.nEquipmentId = nId
equipmentData = PlayerData.Equipment:GetEquipmentById(nId)
nChar = PlayerData.Char:GetCharByEquipment(nId)
elseif mapEquip ~= nil then
equipmentData = mapEquip
self.nEquipmentId = 0
nChar = nCharId
end
if nil ~= equipmentData then
NovaAPI.SetTMPText(self._mapNode.txtTipName, equipmentData:GetName())
self._mapNode.goStar:SetStar(equipmentData:GetStar(), equipmentData:GetStar())
NovaAPI.SetTMPText(self._mapNode.txtTipLevel, equipmentData:GetLevel())
self:ChangeLock(equipmentData:GetLock())
self:SetPngSprite(self._mapNode.imgEquipType, equipmentData:GetTypeIcon())
NovaAPI.SetTMPText(self._mapNode.txtEquipmentType, equipmentData:GetTypeDesc())
self._mapNode.txtEquipped.gameObject:SetActive(nil ~= nChar and nChar ~= 0)
if nil ~= nChar and nChar ~= 0 then
local charCfg = ConfigTable.GetData_Character(nChar)
NovaAPI.SetTMPText(self._mapNode.txtEquipped, charCfg.Name .. ConfigTable.GetUIText("Equipment_Equipped"))
end
self._mapNode.goBaseProperty.gameObject:SetActive(false)
for _, v in ipairs(self._mapNode.goRandomProperty) do
v.gameObject:SetActive(false)
end
delChildren(self._mapNode.rtBaseAttr.gameObject)
local tbBaseAttr = equipmentData:GetBaseAttr()
if next(tbBaseAttr) ~= nil then
for _, mapAttachAttr in pairs(AllEnum.AttachAttr) do
local mapAttr = tbBaseAttr[mapAttachAttr.sKey]
if 0 < mapAttr.Value then
local goItemObj = instantiate(self._mapNode.goBaseProperty, self._mapNode.rtBaseAttr)
goItemObj:SetActive(true)
local ctrlItem = self:BindCtrlByNode(goItemObj, "Game.UI.TemplateEx.TemplatePropertyCtrl")
ctrlItem:SetItemProperty(mapAttr.Key, mapAttr.Value, nil, true)
end
end
end
delChildren(self._mapNode.rtRandomAttr.gameObject)
local tbCharTag = {}
if nChar ~= 0 then
local mapCharDescCfg = ConfigTable.GetData("CharacterDes", nChar)
for _, v in ipairs(mapCharDescCfg.Tag) do
tbCharTag[v] = v
end
end
local nMatchAddition = PlayerData.Equipment:GetEquipmentMatchAddition()
local tbRandomAttr = equipmentData:GetRandomAttr()
local tbTag = equipmentData:GetTag()
local nLevel = equipmentData:GetLevel()
for k, v in ipairs(tbRandomAttr) do
local nIndex = 0
if nLevel < v.UnlockLv then
nIndex = random_attr_lock
elseif tbCharTag[tbTag[k]] ~= nil then
nIndex = random_attr_match
else
nIndex = random_attr_normal
end
local goItemObj = instantiate(self._mapNode.goRandomProperty[nIndex], self._mapNode.rtRandomAttr)
goItemObj:SetActive(true)
local ctrlItem = self:BindCtrlByNode(goItemObj, "Game.UI.TemplateEx.TemplateRandomPropertyCtrl")
if nLevel < v.UnlockLv then
ctrlItem:SetAttrLock(tbTag[k], v.UnlockLv)
else
local nValue = v.Value
if nIndex == random_attr_match then
nValue = nValue * (1 + nMatchAddition)
end
ctrlItem:SetProperty(tbTag[k], v.AttrId, nValue)
end
end
end
end
function EquipmentTipsCtrl:ChangeLock(bLock)
self.bLock = bLock
self._mapNode.imgLock.gameObject:SetActive(bLock)
self._mapNode.imgUnlock.gameObject:SetActive(not bLock)
end
function EquipmentTipsCtrl:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.rtTarget = tbParam[1]
self.mapData = tbParam[2]
end
end
function EquipmentTipsCtrl:OnEnable()
self:EnableGamepadUI(self._mapNode.btnShortcutClose)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.rtContentCanvasGroup, 0)
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
self._mapNode.imgWordTipBg:SetActive(false)
self.sortingOrder = NovaAPI.GetCanvasSortingOrder(self.gameObject:GetComponent("Canvas"))
local btnComp = self.rtTarget:GetComponent("Button")
if btnComp ~= nil then
btnComp.interactable = false
end
NovaAPI.SetComponentEnableByName(self.rtTarget.gameObject, "TopGridCanvas", true)
NovaAPI.SetTopGridCanvasSorting(self.rtTarget.gameObject, self.sortingOrder)
local bHideLock = self.mapData.bHideLock
self._mapNode.btnLock.gameObject:SetActive(not bHideLock)
self:Refresh(self.mapData.nId, self.mapData.equipmentData, self.mapData.nCharId)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
local nContentHeight = self._mapNode.Content.sizeDelta.y
print(nContentHeight)
if nContentHeight > self.maxTipHeight then
nContentHeight = self.maxTipHeight
NovaAPI.SetScrollRectVertical(self._mapNode.ScrollView, true)
end
if nContentHeight < self.minTipHeight then
nContentHeight = self.minTipHeight
NovaAPI.SetScrollRectVertical(self._mapNode.ScrollView, false)
end
self._mapNode.srDesc.sizeDelta = Vector2(self._mapNode.srDesc.sizeDelta.x, nContentHeight)
self._mapNode.imgTipsBg.sizeDelta = Vector2(self._mapNode.imgTipsBg.sizeDelta.x, nContentHeight + titleHeight)
self:SetTipsPosition(self.rtTarget, self._mapNode.rtContent, self._mapNode.safeAreaRoot)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.rtContentCanvasGroup, 1)
end
cs_coroutine.start(wait)
end
function EquipmentTipsCtrl:OnDisable()
self:DisableGamepadUI()
end
function EquipmentTipsCtrl:OnBtnClick_Close()
end
function EquipmentTipsCtrl:OnBtnClick_Lock()
local callback = function(bLock)
EventManager.Hit(EventId.EquipmentChangeLockState, self.nEquipmentId)
local equipmentData = PlayerData.Equipment:GetEquipmentById(self.nEquipmentId)
if bLock then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
bPositive = true,
sContent = orderedFormat(ConfigTable.GetUIText("Equipment_Lock_Suc"), equipmentData:GetName())
})
else
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
bPositive = true,
sContent = orderedFormat(ConfigTable.GetUIText("Equipment_Unlock_Suc"), equipmentData.sName)
})
end
self:ChangeLock(bLock)
end
PlayerData.Equipment:SendEquipmentLockUnlockReq(self.nEquipmentId, not self.bLock, callback)
end
function EquipmentTipsCtrl:OnBtnClick_CloseWordTips()
self._mapNode.btn_CloseWordTips.gameObject:SetActive(false)
self._mapNode.go_WordTip:SetActive(false)
if self.funcCloseTips ~= nil and self.mapParent ~= nil then
self.funcCloseTips(self.mapParent)
end
end
function EquipmentTipsCtrl:OnLinkClick_Word(link, sWordId)
UTILS.ClickWordLink(link, sWordId)
end
function EquipmentTipsCtrl:OnBtnClick_ClosePanel(btn)
if self.rtTarget and not self.rtTarget:IsNull() then
local btnComp = self.rtTarget:GetComponent("Button")
if btnComp ~= nil then
btnComp.interactable = true
end
NovaAPI.SetComponentEnableByName(self.rtTarget.gameObject, "TopGridCanvas", false)
end
EventManager.Hit(EventId.ClosePanel, PanelId.EquipmentTips)
end
function EquipmentTipsCtrl:OnBtnClick_CloseWord(btn)
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
self._mapNode.imgWordTipBg:SetActive(false)
end
return EquipmentTipsCtrl