148 lines
3.8 KiB
Lua
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
|
|
|