Files
Endfield-Data/LuaScripts/UI/Widgets/CharSkillNode.lua
2025-12-02 20:37:18 +07:00

148 lines
3.8 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
CharSkillNode = HL.Class('CharSkillNode', UIWidgetBase)
CharSkillNode.m_skillCells = HL.Field(HL.Forward("UIListCache"))
CharSkillNode.m_isSkillSelectable = HL.Field(HL.Boolean) << false
CharSkillNode.m_showMode = HL.Field(HL.Number) << 1
CharSkillNode._OnFirstTimeInit = HL.Override() << function(self)
self.m_skillCells = UIUtils.genCellCache(self.view.buttonSkill)
end
CharSkillNode.InitCharSkillNode = HL.Method() << function(self)
self:_FirstTimeInit()
end
CharSkillNode.RefreshSkills = HL.Method(HL.Number, HL.String, HL.Opt(HL.Number, HL.Table)) << function(self, instId, templateId, teamIndex, selectCache)
local skillDataDict = CharInfoUtils.getPlayerCharCurSkills(instId, templateId, teamIndex)
local skills = {}
for _, skillDatas in pairs(skillDataDict) do
for _, skillData in pairs(skillDatas) do
skillData.showChange = skillData.bundleData.skillType == Const.SkillTypeEnum.NormalSkill
skillData.showInUse = skillData.bundleData.skillType == Const.SkillTypeEnum.NormalSkill
if selectCache and selectCache[instId] then
skillData.inUse = skillData.skillId == selectCache[instId]
end
table.insert(skills, {
skillType = skillData.bundleData.skillType,
breakStage = skillData.bundleData.breakStage,
skillData = skillData,
charId = templateId,
charInstId = instId,
unlock = skillData.unlock,
})
end
end
skills = lume.sort(skills, function(a, b)
if a.skillType:ToInt() ~= b.skillType:ToInt() then
return a.skillType:ToInt() < b.skillType:ToInt()
end
return a.breakStage < b.breakStage
end)
local extraSkill = #skills > Const.CHAR_SKILL_NUM
self.m_skillCells:Refresh(#skills, function(cell, luaIndex)
local info = skills[luaIndex]
info.transform = cell.gameObject.transform
info.skillData.showInUse = extraSkill and info.skillData.showInUse
info.skillData.showChange = extraSkill and info.skillData.showChange
cell:InitCharInfoSkillButton(info.skillData, function()
self:OnSkillClick(info, luaIndex)
end)
cell.gameObject:SetActive(true)
end)
self.view.mainSkillBg.gameObject:SetActive(extraSkill)
end
CharSkillNode.SetShowMode = HL.Method(HL.Number) << function(self, mode)
self.m_showMode = mode
if mode == UIConst.CHAR_SKILL_MODE.ShowSkillTypeName then
self.view.skillType.gameObject:SetActive(true)
else
self.view.skillType.gameObject:SetActive(false)
end
end
CharSkillNode.RefreshSkillSelect = HL.Method(HL.Opt(HL.Number)) << function(self, selectIndex)
local count = self.m_skillCells:GetCount()
if self.m_showMode == UIConst.CHAR_SKILL_MODE.ShowSkillTypeName then
if selectIndex and count == Const.CHAR_SKILL_NUM + 1 and selectIndex >= Const.CHAR_SKILL_NUM then
selectIndex = selectIndex - 1
end
for i = 1, Const.CHAR_SKILL_NUM do
local imageSelect = self.view[string.format("imageSelect%d", i)]
imageSelect.gameObject:SetActive(selectIndex == i)
end
else
for i = 1, count do
local cell = self.m_skillCells:GetItem(i)
cell:SetSelect(selectIndex == i)
end
end
end
CharSkillNode.OnSkillClick = HL.Method(HL.Table, HL.Number) << function(self, skillInfo, index)
self:_ShowSkillTips(skillInfo)
self:RefreshSkillSelect(index)
end
CharSkillNode._ShowSkillTips = HL.Method(HL.Table) << function(self, skillInfo)
Notify(MessageConst.SHOW_CHAR_SKILL_TIP, {skillInfo, true})
end
HL.Commit(CharSkillNode)
return CharSkillNode