PGRData/Script/matrix/xui/xuiplayerinfo/XUiPanelSkillInfoOther.lua
2024-09-01 22:49:41 +02:00

249 lines
No EOL
8.3 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- V1.29 角色技能优化 该类不在使用 具体使用在 UiSkillDetailsOther
XUiPanelSkillInfoOther = XClass(nil, "XUiPanelSkillInfoOther")
local MAX_SUB_SKILL_GRID_COUNT = 6
local MAX_MAIN_SKILL_GRID_COUNT = 5
function XUiPanelSkillInfoOther:Ctor(ui, parent, rootUi, npcData,assignChapterRecords)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.Parent = parent
self.RootUi = rootUi
self.NpcData = npcData
self.AssignChapterRecords = assignChapterRecords
self:InitAutoScript()
self.SkillPoint.gameObject:SetActive(false)
self.SubSkillInfo.gameObject:SetActive(false)
self.GridSkillInfo.gameObject:SetActive(false)
self.GridSubSkill.gameObject:SetActive(false)
self.SkillInfoGo = {}
self.SkillInfoGrids = {}
table.insert(self.SkillInfoGo, self.GridSkillInfo)
self:InitSubSkillGrids()
end
function XUiPanelSkillInfoOther:InitAutoScript()
self:AutoInitUi()
XTool.InitUiObject(self)
self:AutoAddListener()
end
function XUiPanelSkillInfoOther:AutoInitUi()
self.SkillPoint = self.Transform:Find("SkillPoint")
self.SubSkillInfo = self.Transform:Find("PaneSkillInfo/SubSkillInfo")
self.GridSubSkill = self.Transform:Find("PaneSkillInfo/PanelSubSkillList/GridSubSkill")
self.GridSkillInfo = self.Transform:Find("PaneSkillInfo/PanelScroll/GridSkillInfo")
self.PanelSkillBig = self.Transform:Find("PaneSkillInfo/PanelSkillBig")
self.PanelSubSkillList = self.Transform:Find("PaneSkillInfo/PanelSubSkillList")
self.PanelScroll = self.Transform:Find("PaneSkillInfo/PanelScroll")
self.BtnHuadong = self.Transform:Find("PaneSkillInfo/BtnHuadong"):GetComponent("Button")
self.BtnHuadong1 = self.Transform:Find("PaneSkillInfo/BtnHuadong1"):GetComponent("Button")
self.ImgSkillPointIcon = self.Transform:Find("PaneSkillInfo/PanelSkillBig/ImgSkillPointIcon"):GetComponent("Image")
self.TxtSkillType = self.Transform:Find("PaneSkillInfo/PanelSkillBig/TxtSkillType"):GetComponent("Text")
self.TxtSkillName = self.Transform:Find("PaneSkillInfo/PanelSkillBig/TxtSkillName"):GetComponent("Text")
self.TxtSkillLevel = self.Transform:Find("PaneSkillInfo/PanelSkillBig/TxtSkillLevel"):GetComponent("Text")
end
function XUiPanelSkillInfoOther:InitSubSkillGrids()
self.SubSkillGrids = {}
for i = 1, MAX_SUB_SKILL_GRID_COUNT do
local item = CS.UnityEngine.Object.Instantiate(self.GridSubSkill) -- 复制一个item
local grid = XUiGridSubSkillOther.New(item, i, self.NpcData, self.AssignChapterRecords, function(subSkill, index)
self:UpdateSubSkillInfoPanel(subSkill, index)
end)
grid.GameObject:SetActive(false)
grid.Transform:SetParent(self.PanelSubSkillList, false)
table.insert(self.SubSkillGrids, grid)
end
end
function XUiPanelSkillInfoOther:RegisterClickEvent(uiNode, func)
if func == nil then
XLog.Error("XUiPanelSkillInfo:RegisterClickEvent函数参数错误参数func不能为空")
return
end
if type(func) ~= "function" then
XLog.Error("XUiPanelSkillInfo:RegisterClickEvent函数错误, 参数func需要是function类型, func的类型是" .. type(func))
end
local listener = function(...)
func(self, ...)
end
CsXUiHelper.RegisterClickEvent(uiNode, listener)
end
function XUiPanelSkillInfoOther:AutoAddListener()
self:RegisterClickEvent(self.BtnHuadong, self.OnBtnHuadongClick)
self:RegisterClickEvent(self.BtnHuadong1, self.OnBtnHuadong1Click)
end
function XUiPanelSkillInfoOther:OnBtnHuadongClick()
if self.Pos then
self:GotoSkill(self.Pos + 1)
end
end
function XUiPanelSkillInfoOther:OnBtnHuadong1Click()
if self.Pos then
self:GotoSkill(self.Pos - 1)
end
end
function XUiPanelSkillInfoOther:GotoSkill(index)
if self.Parent.SkillGrids[index] then
self.Parent.SkillGrids[index]:OnBtnIconBgClick()
end
self:UpdateArrowView()
end
function XUiPanelSkillInfoOther:UpdateArrowView()
self.BtnHuadong.gameObject:SetActive(not (self.Pos == MAX_MAIN_SKILL_GRID_COUNT))
self.BtnHuadong1.gameObject:SetActive(not (self.Pos == 1))
end
function XUiPanelSkillInfoOther:ShowPanel(characterId, skills, pos)
self.CharacterId = characterId or self.CharacterId
self.Skills = skills
self.Pos = pos
self.Skill = skills[pos]
self.IsShow = true
self.GameObject:SetActive(true)
for i, skill in pairs(skills) do
local grid = self.SkillInfoGrids[i]
if (grid == nil) then
local ui_item = self.SkillInfoGo[i]
if (ui_item == nil) then
ui_item = CS.UnityEngine.Object.Instantiate(self.GridSkillInfo, self.PanelScroll)
ui_item.transform:SetAsFirstSibling()
table.insert(self.SkillInfoGo, ui_item)
end
grid = XUiGridSkillInfo.New(ui_item, skill, function(skillId)
self.Parent:ShowLevelDetail(skillId)
end)
table.insert(self.SkillInfoGrids, grid)
else
grid:UpdateData(skill)
end
grid.GameObject:SetActive(true)
end
self:RefreshPanel( self.Skill)
self:RefreshData()
-- 默认点击
if self.SubSkillGrids[1] then
self.SubSkillGrids[1]:OnBtnSubSkillIconBgClick()
end
self:UpdateArrowView()
self.Parent.SkillInfoQiehuan:PlayTimelineAnimation()
end
function XUiPanelSkillInfoOther:RefreshData()
local characterId = self.CharacterId
if not characterId then return end
self.Skills = XCharacterConfigs.GetCharacterSkillsByCharacter(self.NpcData.Character)
local skill = self.Skills[self.Skill.config.Pos]
local grid = self.SkillInfoGrids[self.Pos]
for i = 1, #self.SkillInfoGrids do
self.SkillInfoGrids[i].GameObject:SetActive(self.Pos == i)
end
if (grid) then
grid:UpdateData(skill)
end
self.Parent:UpdatePanel(self.NpcData.Character)
self:RefreshPanel(skill)
self:RefreshBigSkill(skill)
end
function XUiPanelSkillInfoOther:RefreshBigSkill(skill)
self.RootUi:SetUiSprite(self.ImgSkillPointIcon, skill.Icon)
self.TxtSkillType.text = skill.TypeDes
self.TxtSkillName.text = skill.Name
local addLevel = 0
for _, skillId in pairs(skill.SkillIdList) do
local resonanceSkillLevelMap = XMagicSkillManager.GetResonanceSkillLevelMap(self.NpcData)
local resonanceSkillLevel = resonanceSkillLevelMap[skillId] or 0
addLevel = addLevel + resonanceSkillLevel + XDataCenter.FubenAssignManager.GetSkillLevelByCharacterData(self.NpcData.Character, skillId, self.AssignChapterRecords)
end
local totalLevel = skill.TotalLevel + addLevel
self.TxtSkillLevel.text = totalLevel
end
function XUiPanelSkillInfoOther:RefreshPanel( skill)
self:UpdateSubSkillList(skill.subSkills)
for i, sub_skill in ipairs(skill.subSkills) do
if (i == self.CurSubSkillIndex) then
self:UpdateSubSkillInfoPanel(sub_skill, self.CurSubSkillIndex)
break
end
end
end
function XUiPanelSkillInfoOther:UpdateSubSkillList(subSkillList)
for _, grid in pairs(self.SubSkillGrids) do
grid:Reset()
end
local count = #subSkillList
if count > MAX_SUB_SKILL_GRID_COUNT then
XLog.Warning("max subskill grid count is " .. MAX_SUB_SKILL_GRID_COUNT)
count = MAX_SUB_SKILL_GRID_COUNT
end
for i = 1, count do
local sub_skill = subSkillList[i]
local grid = self.SubSkillGrids[i]
grid:UpdateGrid(sub_skill)
grid.GameObject.name = sub_skill.SubSkillId
if i == 1 then
grid:SetSelect(true)
end
end
end
--技能格子点击
function XUiPanelSkillInfoOther:UpdateSubSkillInfoPanel(subSkill, index)
if not subSkill then return end
if self.CurSubSkillIndex then
self.SubSkillGrids[self.CurSubSkillIndex]:SetSelect(false)
end
local grid = self.SkillInfoGrids[self.Pos]
if grid then
grid:SetSubInfoByCharacterData(self.NpcData, index, subSkill.Level, subSkill.SubSkillId, self.AssignChapterRecords)
end
self.CurSubSkillIndex = index
self.SubSkillGrids[self.CurSubSkillIndex]:SetSelect(true)
self.CurSubSkill = subSkill
for _, tmpGrid in pairs(self.SubSkillGrids) do
tmpGrid:ResetSelect(subSkill.SubSkillId)
end
end
function XUiPanelSkillInfoOther:HidePanel()
self.IsShow = false
self.GameObject:SetActive(false)
self.CurSubSkillIndex = nil
self.CurSubSkill = nil
end