local XUiExhibition = XLuaUiManager.Register(XLuaUi, "UiExhibition") local XUiGridCharacterIcon = require("XUi/XUiExhibition/XUiGridCharacterIcon") local XUiGridCharacterName = require("XUi/XUiExhibition/XUiGridCharacterName") local XUiGridGroupIcon = require("XUi/XUiExhibition/XUiGridGroupIcon") local XUiGridGroupName = require("XUi/XUiExhibition/XUiGridGroupName") local XUiPanelCollection = require("XUi/XUiExhibition/XUiPanelCollection") local ShowComponents = { CharacterIcon = { Name = "CharacterIcon", PrefabName = "ExhibitionCharacterIcon", LuaScript = XUiGridCharacterIcon }, CharacterName = { Name = "CharacterName", PrefabName = "ExhibitionCharacterName", LuaScript = XUiGridCharacterName }, GroupIcon = { Name = "GroupIcon", PrefabName = "ExhibitionGroupIcon", LuaScript = XUiGridGroupIcon }, GroupName = { Name = "GroupName", PrefabName = "ExhibitionGroupName", LuaScript = XUiGridGroupName } } local CharacterPortList = {} -- 角色显示编号 local GroupPortList = {} -- 阵营显示编号 function XUiExhibition:OnAwake() self:AddBtnListener() self:InitTabGroup() self:InitShowComponentList() end function XUiExhibition:OnStart(isSelf, showType) self.IsSelf = isSelf --是否浏览自身的收藏 self.ShowType = showType or XDataCenter.ExhibitionManager.ExhibitionType.STRUCT self.CharacterIconGridList = {} self.CharacterNameGridList = {} self.GroupIconGridList = {} self.GroupNameGridList = {} local behaviour = self.Transform.gameObject:AddComponent(typeof(CS.XLuaBehaviour)) if self.Update then behaviour.LuaUpdate = function() self:Update() end end self.CurCharacterId = nil self.CurIndex = nil self.Focusing = false self.ShowDetailMinScale = CS.XGame.ClientConfig:GetFloat("ExhibitionShowDetailMinScale") self.DetailFadeTime = CS.XGame.ClientConfig:GetFloat("ExhibitionDetailFadeTime") self.DetailZoomTime = CS.XGame.ClientConfig:GetFloat("ExhibitionDetailZoomTime") self.CollectionInfoPanel = XUiPanelCollection.New(self.PanelCollection, self) self.PanelTab:SelectIndex(self.ShowType) end function XUiExhibition:OnEnable() self:RefreshExhibitionInfo() self:CheckTabRedDot() end function XUiExhibition:OnDestroy() end function XUiExhibition:InitTabGroup() local tabGroup = { self.BtnTab1, self.BtnTab2, self.BtnTab3, } self.PanelTab:Init(tabGroup, function(tabIndex) self:OnClickTabCallBack(tabIndex) end) end function XUiExhibition:InitShowComponentList() local cPortNum = self.PanelCharacterIcon.transform.childCount for i = 0, cPortNum - 1 do local name = tonumber(self.PanelCharacterIcon.transform:GetChild(i).name) table.insert(CharacterPortList, name) end local gPortNum = self.PanelGroupIcon.transform.childCount for i = 0, gPortNum - 1 do local name = tonumber(self.PanelGroupIcon.transform:GetChild(i).name) table.insert(GroupPortList, name) end end function XUiExhibition:OnClickTabCallBack(tabIndex) self.ShowType = tabIndex self:RefreshExhibitionInfo() end function XUiExhibition:AddBtnListener() self.BtnHelp.CallBack = function() self:OnBtnHelpClick() end self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick) self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick) self:RegisterClickEvent(self.BtnOpenCollection, self.OnBtnOpenCollectionClick) self:RegisterClickEvent(self.BtnCloseCollection, self.OnBtnCloseCollectionClick) end function XUiExhibition:RefreshExhibitionInfo() self.ShowName = false local exhibitionPortConfig = XExhibitionConfigs.GetExhibitionPortConfigByType(self.ShowType) local exhibitionGroupConfig = XExhibitionConfigs.GetExhibitionGroupConfigByType(self.ShowType) self:RefreshGroupLine() for _, port in pairs(CharacterPortList) do local config = exhibitionPortConfig[port] local iconGrid = self:UpdateGridComponent(port, ShowComponents.CharacterIcon, config) if not iconGrid then return end local nameGrid = self:UpdateGridComponent(port, ShowComponents.CharacterName, config) if not nameGrid then return end nameGrid:ResetPosition(iconGrid.Transform.position) end for _, port in pairs(GroupPortList) do local config = exhibitionGroupConfig[port] local iconGrid = self:UpdateGridComponent(port, ShowComponents.GroupIcon, config) if not iconGrid then return end local nameGrid = self:UpdateGridComponent(port, ShowComponents.GroupName, config) if not nameGrid then return end nameGrid:ResetPosition(iconGrid.Transform.position) end self:RefreshCollectionInfo() end function XUiExhibition:RefreshGroupLine() local inVisibleTable = XExhibitionConfigs.GetExhibitionInVisbleGroupTable(self.ShowType) for groupId, visible in pairs(inVisibleTable) do local lineGroup = self.LineRoot.transform:Find(string.format("LineGroup%02d", groupId)) if lineGroup then lineGroup.gameObject:SetActiveEx(visible) end end end function XUiExhibition:UpdateGridComponent(portId, showComponentsType, exhibitionConfig) local gridComponent local name = showComponentsType.Name local gridParent = self["Panel" .. name]:Find(portId) if not gridParent then XLog.Error("XUiExhibition:UpdateGridComponent error: UI节点数量与配置不对应,请检查UI路径Panel" .. name .. "下是否存在id为: " .. portId .. "的节点") return end local gridList = self[name .. "GridList"] local visible = XExhibitionConfigs.GetIsExhibitionInVisbleGroup(self.ShowType, exhibitionConfig and exhibitionConfig.GroupId or 0) gridParent.gameObject:SetActiveEx(visible) if gridList[portId] ~= nil then gridComponent = gridList[portId] gridComponent:Refresh(exhibitionConfig or nil) else local gridGo = gridParent.childCount > 0 and gridParent:GetChild(0) or CS.UnityEngine.Object.Instantiate(self.Obj:GetPrefab(showComponentsType.PrefabName)) gridGo.transform:SetParent(gridParent, false) if gridGo == nil or not gridGo:Exist() then return end if showComponentsType == ShowComponents.CharacterIcon or showComponentsType == ShowComponents.CharacterName then gridComponent = showComponentsType.LuaScript.New(self, portId, gridGo, exhibitionConfig) else gridComponent = showComponentsType.LuaScript.New(gridGo, exhibitionConfig) end gridList[portId] = gridComponent end return gridComponent end function XUiExhibition:Update() if self.Focusing then return end local curScale = self.PanelCharacter.localScale.x if curScale > self.ShowDetailMinScale and not self.ShowName then self.ShowName = true self:ShowNameLayer() elseif curScale < self.ShowDetailMinScale and self.ShowName then self.ShowName = false self:HideNameLayer() end end function XUiExhibition:ShowNameLayer() self.LayerNameCanvasGroup:DOFade(1, self.DetailFadeTime) end function XUiExhibition:HideNameLayer() self.LayerNameCanvasGroup:DOFade(0, self.DetailFadeTime) end function XUiExhibition:StartFocus(index, characterId) -- self.Focusing = true -- self.CurIndex = index -- self.CurGridCanvasGroup = self.CharacterIconGridList[index].GameObject:AddComponent(typeof(CS.UnityEngine.CanvasGroup)) -- self.CurGridCanvasGroup.ignoreParentGroups = true -- self:PlayAnimation("AnimPanelTaskHide") -- local offset = CS.UnityEngine.Vector3(self.IconPosition.position.x, 0, 0) -- self.DragArea:StartFocus(self.CharacterIconGridList[index].Transform.position, 1.0, self.DetailZoomTime, offset, true) self:ShowExhibitionInfo(characterId) end function XUiExhibition:EndFocus() self:PlayAnimation("AnimPanelTaskShow", function() CS.UnityEngine.GameObject.Destroy(self.CurGridCanvasGroup) end) self.DragArea:EndFocus(function() self.Focusing = false end) end function XUiExhibition:ShowExhibitionInfo(characterId) self.CurCharacterId = characterId XLuaUiManager.Open("UiExhibitionInfo", characterId, self.ShowType) end function XUiExhibition:OnBtnOpenCollectionClick() self.CollectionInfoPanel:Show(self.ShowType) self:PlayAnimation("AnimPanelCollectionEnable") end function XUiExhibition:OnBtnCloseCollectionClick() self:PlayAnimation("AnimPanelCollectionDisable", function() self.CollectionInfoPanel:Hide() end) end function XUiExhibition:OnBtnHelpClick() XUiManager.UiFubenDialogTip("", CS.XTextManager.GetText("ExhibitionExplain") or "") end -- function XUiExhibition:HandleCharacterGrowUp() -- self.CharacterIconGridList[self.CurIndex]:CharacterGrowUp() -- self:RefreshCollectionInfo() -- end function XUiExhibition:RefreshCollectionInfo() local collectionRate = XDataCenter.ExhibitionManager.GetCollectionRate(true, self.ShowType) self.TxtCollectionRate.text = math.floor(collectionRate * 100) self.ImgRate.fillAmount = collectionRate if self.ShowType then self.TxtCenterRate.text = CS.XTextManager.GetText("ExhibitionCollectionLable" .. self.ShowType) else self.TxtCenterRate.text = CS.XTextManager.GetText("ExhibitionCollectionDefaultLable") end local totleCollectionRate = XDataCenter.ExhibitionManager.GetCollectionRate(true) self.TxtTotalCollectRate.text = string.format("%d%s", math.floor(totleCollectionRate * 100), "%") end function XUiExhibition:OnBtnBackClick() self:Close() end function XUiExhibition:OnBtnMainUiClick() XLuaUiManager.RunMain() end function XUiExhibition:OnGetEvents() return { XEventId.EVENT_CHARACTER_EXHIBITION_AUTOSELECT } end function XUiExhibition:OnNotify(evt, ...) local args = { ... } if evt == XEventId.EVENT_CHARACTER_EXHIBITION_AUTOSELECT then if not args[1] then return end local selectGrid = nil for _, v in pairs(self.CharacterIconGridList or {}) do if v.CharacterId == args[1] then selectGrid = v break end end if not selectGrid then return end selectGrid:BtnSelectClick() end end --============ --检查每个页签蓝点 --============ function XUiExhibition:CheckTabRedDot() local manager = XDataCenter.ExhibitionManager local allTypes = manager.ExhibitionType for _, showType in pairs(allTypes or {}) do local tab = self["BtnTab" .. showType] if tab then local exhibitionPortConfig = XExhibitionConfigs.GetExhibitionPortConfigByType(showType) for _, config in pairs(exhibitionPortConfig or {}) do if manager.CheckNewRewardByCharacterId(config.CharacterId) then tab:ShowReddot(true) goto nextTab end end tab:ShowReddot(false) end :: nextTab :: end end