---------------羁绊节点--------------- local XUiNodeElement = XClass(nil, "XUiNodeElement") local MAX_PHASE_COUNT = 4 --可显示的最大阶级 function XUiNodeElement:Ctor(ui) self.Gameobject = ui.gameObject self.Transform = ui.transform XTool.InitUiObject(self) self:Init() self.Gameobject:SetActiveEx(true) end function XUiNodeElement:Init() self.TextNoneList = {} self.TextUpList = {} for i = 1, MAX_PHASE_COUNT do local panelPhase = self["PanelPhase" .. i] if panelPhase then self.TextNoneList[i] = XUiHelper.TryGetComponent(panelPhase, "TextNone", "Text") self.TextUpList[i] = XUiHelper.TryGetComponent(panelPhase, "TextUp", "Text") end end end --combo: XTheatreCombo function XUiNodeElement:Refresh(combo) self.Combo = combo --羁绊总星级 local curStarLevel = combo:GetTotalRank() self.TextStar.text = curStarLevel --图标 self.ImgIcon:SetRawImage(combo:GetIconPath()) --名字 self.TxtName.text = combo:GetName() --名字和背景颜色 local color = combo:GetQualityColor() if color then self.TxtName.color = color self.ImgTextBg.color = color self.ImgIconBg.color = color end --羁绊层数 local phase = combo:GetPhaseNum() local isShowTextUp = false --只显示当前最高等级的 for i = phase, 1, -1 do if not isShowTextUp and curStarLevel >= combo:GetConditionLevel(i) then isShowTextUp = true self:SetPhaseData(i, true) else self:SetPhaseData(i, false) end self:SetPanelPhaseActive(i, true) end for i = phase + 1, MAX_PHASE_COUNT do self:SetPanelPhaseActive(i, false) end end function XUiNodeElement:SetEffectActive(isActive) if isActive then self.Effect.gameObject:SetActiveEx(false) end self.Effect.gameObject:SetActiveEx(isActive) end function XUiNodeElement:SetPhaseData(index, isShowTextUp) local level = self.Combo:GetConditionLevel(index) local textNone = self.TextNoneList[index] local textUp = self.TextUpList[index] if textNone then textNone.text = level textNone.gameObject:SetActiveEx(not isShowTextUp) end if textUp then textUp.text = level textUp.gameObject:SetActiveEx(isShowTextUp) end end function XUiNodeElement:SetPanelPhaseActive(i, isActive) if self["PanelPhase" .. i] then self["PanelPhase" .. i].gameObject:SetActiveEx(isActive) end end ---------------羁绊格子--------------- local XUiFettersGrid = XClass(nil, "XUiFettersGrid") function XUiFettersGrid:Ctor(ui, btnFetters) self.Gameobject = ui.gameObject self.Transform = ui.transform self.BtnFetters = btnFetters and btnFetters:GetComponent("XUiButton") XTool.InitUiObject(self) if self.BtnFetters then XUiHelper.RegisterClickEvent(self, self.BtnFetters, self.OnBtnFettersClick) end XUiHelper.RegisterClickEvent(self, self.Button, self.OnBtnFettersClick) self.ElementNode = XUiNodeElement.New(self.NodeElement) self.NodeTeam.gameObject:SetActiveEx(false) self.ImgKuang = XUiHelper.TryGetComponent(self.Transform, "NodeElement/ImgKuang") self.ImgKuang2 = XUiHelper.TryGetComponent(self.Transform, "NodeElement/ImgKuang2") if self.ImgKuang then self.ImgKuang.gameObject:SetActiveEx(false) end if self.ImgKuang2 then self.ImgKuang2.gameObject:SetActiveEx(false) end self:SetComboLevel(0) --当前显示的羁绊等级 end --combo: XTheatreCombo function XUiFettersGrid:Refresh(combo, isShowBtnFetters, isShowEffect) self.Combo = combo if not combo then self:SetComboLevel(0) self.Gameobject:SetActiveEx(false) self:SetBtnFettersActive(isShowBtnFetters) return end self:SetComboLevel(combo:GetTotalRank()) self.ElementNode:Refresh(combo) self:SetEffectActive(isShowEffect) self:SetBtnFettersActive(false) self.Gameobject:SetActiveEx(true) local isDecay = combo:GetComboIsHaveDecay() and combo:GetDisplayReferenceListIsHaveDecay() --腐化外框 if self.ImgKuang then self.ImgKuang.gameObject:SetActiveEx(isDecay) end --满级外框 if self.ImgKuang2 then self.ImgKuang2.gameObject:SetActiveEx(isDecay and self:GetComboLevel() >= combo:GetConditionLevel(combo:GetPhaseNum())) end end function XUiFettersGrid:SetBtnFettersActive(isActive) if self.BtnFetters then self.BtnFetters.gameObject:SetActiveEx(isActive) end end --打开羁绊预览界面 function XUiFettersGrid:OnBtnFettersClick() XLuaUiManager.Open("UiBiancaTheatreComboTips", self.Combo) end function XUiFettersGrid:SetEffectActive(isShowEffect) self.ElementNode:SetEffectActive(isShowEffect) end function XUiFettersGrid:GetCombo() return self.Combo end function XUiFettersGrid:SetComboLevel(level) self.ComboLevel = level end function XUiFettersGrid:GetComboLevel() return self.ComboLevel end ---------------肉鸽2.0 羁绊通用展示面板------------- local XUiBiancaTheatrePanelFetters = XClass(nil, "XUiBiancaTheatrePanelFetters") local CSXResourceManagerLoad = CS.XResourceManager.Load local FETTERS_COUNT = 5 --羁绊挂点的最大数量 local SHOW_COMBO_MAX_COUNT = 4 --可显示的羁绊最大数量 local BTN_FETTERS_DEFAULT_INDEX = 3 --显示更多羁绊按钮的默认节点位置下标 function XUiBiancaTheatrePanelFetters:Ctor(ui) self.Gameobject = ui.gameObject self.Transform = ui.transform XTool.InitUiObject(self) self.ResourcePool = {} self:Init() self:RegisterClickEvent() self.ComboList = XDataCenter.BiancaTheatreManager.GetComboList() end function XUiBiancaTheatrePanelFetters:Delete() for _, resource in pairs(self.ResourcePool) do resource:Release() end self.ResourcePool = {} end function XUiBiancaTheatrePanelFetters:Init() self.GridFettersNone = XUiHelper.TryGetComponent(self.Transform, "GridFettersNone") self.BtnOpen = XUiHelper.TryGetComponent(self.Transform, "GridFettersNone/BtnPutAway", "XUiButton") self.GridFetters = XUiHelper.TryGetComponent(self.Transform, "GridFetters") self.BtnClose = XUiHelper.TryGetComponent(self.Transform, "GridFetters/BtnPutAway", "XUiButton") self:InitFetters() end function XUiBiancaTheatrePanelFetters:InitFetters() self.FettersGridList = {} local gridFettersNode = self:ResourceManagerLoad(XBiancaTheatreConfigs.GetClientConfig("GridFettersAsset")) local btnFetters = self:ResourceManagerLoad(XBiancaTheatreConfigs.GetClientConfig("BtnFettersAsset")) local panelFetters for i = 1, FETTERS_COUNT do panelFetters = XUiHelper.TryGetComponent(self.GridFetters.transform, "PanelFetters/PanelFetters" .. i) if panelFetters and gridFettersNode then local gridFetter = XUiHelper.Instantiate(gridFettersNode.Asset, panelFetters) local btnFetter = XUiHelper.Instantiate(btnFetters.Asset, panelFetters) table.insert(self.FettersGridList, XUiFettersGrid.New(gridFetter, btnFetter)) end end self:SetGridFettersActive(true) end function XUiBiancaTheatrePanelFetters:RegisterClickEvent() XUiHelper.RegisterClickEvent(self, self.BtnOpen, function() self:SetGridFettersActive(true) end) XUiHelper.RegisterClickEvent(self, self.BtnClose, function() self:SetGridFettersActive(false) end) end --isCheckShowEffect:是否检查特效的显示 function XUiBiancaTheatrePanelFetters:Refresh(isCheckShowEffect) local activeComboList = self.ComboList:GetActiveComboList(nil, XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager():GetCurrentRoles()) local fettersGrid table.sort(activeComboList, function(a, b) local pA = a:GetPhaseLevel() local pB = b:GetPhaseLevel() if pA ~= pB then return pA > pB end local rA = a:GetTotalRank() local rB = b:GetTotalRank() return rA > rB end) local isShowEffect local isNotComboList = XTool.IsTableEmpty(activeComboList) for i, combo in ipairs(activeComboList) do if i > SHOW_COMBO_MAX_COUNT then break end fettersGrid = self.FettersGridList[i] if fettersGrid then local curCombo = fettersGrid:GetCombo() isShowEffect = (isCheckShowEffect) and (not curCombo or curCombo:GetComboId() ~= combo:GetComboId() or fettersGrid:GetComboLevel() ~= combo:GetTotalRank()) fettersGrid:Refresh(combo, false, isShowEffect) end end --“更多羁绊”按钮 local btnFettersIndex = isNotComboList and BTN_FETTERS_DEFAULT_INDEX or math.min(#activeComboList + 1, FETTERS_COUNT) fettersGrid = self.FettersGridList[btnFettersIndex] if fettersGrid then fettersGrid:Refresh(nil, true) end --隐藏多余的格子 local startIndex = isNotComboList and 0 or btnFettersIndex for i = startIndex + 1, FETTERS_COUNT do if not (isNotComboList and i == btnFettersIndex) then fettersGrid = self.FettersGridList[i] if fettersGrid then fettersGrid:Refresh() end end end end function XUiBiancaTheatrePanelFetters:SetGridFettersActive(isActive) if self.GridFetters then self.GridFetters.gameObject:SetActiveEx(isActive) end if self.GridFettersNone then self.GridFettersNone.gameObject:SetActiveEx(not isActive) end --隐藏所有羁绊格子的特效 if not isActive then for _, fetterGrid in ipairs(self.FettersGridList) do fetterGrid:SetEffectActive(false) end end end function XUiBiancaTheatrePanelFetters:ResourceManagerLoad(path) local resource = self.ResourcePool[path] if resource then return resource end resource = CSXResourceManagerLoad(path) if resource == nil or not resource.Asset then XLog.Error(string.format("XUiBiancaTheatrePanelFetters:ResourceManagerLoad加载资源失败,路径:%s", path)) return end self.ResourcePool[path] = resource return resource end return XUiBiancaTheatrePanelFetters