local XUiDrawOptional = XLuaUiManager.Register(XLuaUi, "UiDrawOptional") local CombinationGrid = require("XUi/XUiDraw/XUiPanelCombination") local XGridDrawTarget = require("XUi/XUiDraw/TargetActivity/XGridDrawTarget") local CSTextManagerGetText = CS.XTextManager.GetText local Select= CS.UiButtonState.Select local Normal = CS.UiButtonState.Normal local DEFAULT_UP_IMG = CS.XGame.ClientConfig:GetString("DrawDefaultUpImg") ---@class XUiDrawOptional:XLuaUi function XUiDrawOptional:OnAwake() self.PanelRole.gameObject:SetActiveEx(false) self.PanelWeapon.gameObject:SetActiveEx(false) self.BtnTab.gameObject:SetActiveEx(false) self.GridRole.gameObject:SetActiveEx(false) self.GridWeapon.gameObject:SetActiveEx(false) self.RoleContent = self.GridRole.transform.parent:GetComponent("RectTransform") self.WeaponContent = self.GridWeapon.transform.parent:GetComponent("RectTransform") ---@type XUiPanelCombination[] self.GridRoleList = {} self.GridWeaponList = {} self.AllRecomCharIdList = {} -- 所有推荐的角色 self.CharRecommendDic = {} -- 角色对应推荐武器和辅助机 end function XUiDrawOptional:OnStart(parentUi, optionalCb, allTimeOverCb, notSelectCb, isTargetActivity) self.ParentUi = parentUi self.OptionalCb = optionalCb self.AllTimeOverCb = allTimeOverCb self.NotSelectCb = notSelectCb self.CurSuitId = 0 self:AutoAddListener() self._IsTargetActivity = isTargetActivity if isTargetActivity then self:InitDrawActivityTarget(self.ParentUi.GroupId) else self:SetData(self.ParentUi.GroupId) end end function XUiDrawOptional:OnEnable() self:AddEventListener() end function XUiDrawOptional:OnDisable() self:RemoveEventListener() end function XUiDrawOptional:SetActiveEx(bool) self.GameObject:SetActiveEx(bool) end --region Ui - SelectGroup function XUiDrawOptional:SetData(groupId) self.GroupInfo = XDataCenter.DrawManager.GetDrawGroupInfoByGroupId(groupId) self.AllInfoList = XDataCenter.DrawManager.GetDrawInfoListByGroupId(groupId) -- 所有商品 self.GoodsType = self:GetGoodType(self.AllInfoList) self.LastSelectDrawId = self:IsHaveSwitchLimit() and self.GroupInfo.UseDrawId or self.ParentUi.DrawInfo.Id self.CurSelectDrawId = self.LastSelectDrawId -- 刷新界面 if self.GoodsType == XArrangeConfigs.Types.Character then self:RefreshCharacterPanel() elseif self.GoodsType == XArrangeConfigs.Types.Weapon then self:RefreshWeaponPanel() elseif self.GoodsType == XArrangeConfigs.Types.Partner then self:RefreshPartnerPanel() end -- 不一定有筛选栏,刷新显示所有物品 self:RefreshGoodList(self.AllInfoList) -- 刷新当前选中 self:SelectCombination(self.CurSelectDrawId) end function XUiDrawOptional:OnClickTabBtn(tabIndex) if self.TabIndex == tabIndex then return end self.TabIndex = tabIndex if tabIndex == 1 then self:RefreshGoodList(self.AllInfoList) else local groupRuleCfg = XDrawConfigs.GetDrawGroupRuleById(self.GroupInfo.Id) local filterElementList = groupRuleCfg.CharFilterElementList or {} local elementCfgId = filterElementList[tabIndex - 1] self:OnClickElementTab(elementCfgId) end self:PlayAnimation("QieHuan") end -- 选中能量页签 function XUiDrawOptional:OnClickElementTab(elementCfgId) local infoList = {} for i, info in ipairs(self.AllInfoList) do local drawId = info.Id local combination = XDataCenter.DrawManager.GetDrawCombination(drawId) if combination.GoodsId and #combination.GoodsId > 0 then local charId = combination.GoodsId[1] local charCfg = XCharacterConfigs.GetCharacterTemplate(charId) if charCfg.Element == elementCfgId then table.insert(infoList, info) end end end self:RefreshGoodList(infoList) end -- 刷新物品列表 function XUiDrawOptional:RefreshGoodList(infoList) self.InfoList = infoList -- 筛选后的商品列表 self.RoleContent.anchoredPosition = CS.UnityEngine.Vector2(0, 0) self.WeaponContent.anchoredPosition = CS.UnityEngine.Vector2(0, 0) for _, gridRole in ipairs(self.GridRoleList) do gridRole.GameObject:SetActiveEx(false) end for _, gridWeapon in ipairs(self.GridWeaponList) do gridWeapon.GameObject:SetActiveEx(false) end for i, info in ipairs(infoList) do ---@type XUiPanelCombination local combinationGrid = nil if self.GoodsType == XArrangeConfigs.Types.Character then if i <= #self.GridRoleList then combinationGrid = self.GridRoleList[i] else local go = CS.UnityEngine.Object.Instantiate(self.GridRole, self.GridRole.transform.parent) go.gameObject:SetActiveEx(true) combinationGrid = CombinationGrid.New(go, self) table.insert(self.GridRoleList, combinationGrid) end elseif self.GoodsType == XArrangeConfigs.Types.Weapon or self.GoodsType == XArrangeConfigs.Types.Partner then if i <= #self.GridWeaponList then combinationGrid = self.GridWeaponList[i] else local go = CS.UnityEngine.Object.Instantiate(self.GridWeapon, self.GridWeapon.transform.parent) go.gameObject:SetActiveEx(true) combinationGrid = CombinationGrid.New(go, self) table.insert(self.GridWeaponList, combinationGrid) end end local isSelect = self.CurSelectDrawId == info.Id combinationGrid:SetData(i, infoList[i].Id, self.GoodsType, isSelect) combinationGrid.GameObject:SetActiveEx(true) end end function XUiDrawOptional:SelectCombination(drawId) local isShow = drawId ~= 0 self.PanelSelectedChar.gameObject:SetActiveEx(isShow) self.PanelSelectedWeapon.gameObject:SetActiveEx(isShow) self.BtnRoleComfirm.gameObject:SetActiveEx(isShow) self.BtnWeaponComfirm.gameObject:SetActiveEx(isShow) if not isShow then return end -- 刷新选中 local gridList = self.GoodsType == XArrangeConfigs.Types.Character and self.GridRoleList or self.GridWeaponList for i, info in ipairs(self.InfoList) do local isSelect = info.Id == drawId gridList[i]:SetSelectState(isSelect) end self.CurSelectDrawId = drawId -- 刷新右下角当前选中的信息 local combination = XDataCenter.DrawManager.GetDrawCombination(drawId) if self.GoodsType == XArrangeConfigs.Types.Character then if combination.GoodsId == nil or #combination.GoodsId == 0 then self.RImgSelCharIcon:SetRawImage(DEFAULT_UP_IMG) local drawAimProbability = XDrawConfigs.GetDrawAimProbability() self.TxtSelCharName.text = drawAimProbability[drawId].UpProbability or "" else local charId = combination.GoodsId[1] local icon = XDataCenter.CharacterManager.GetCharSmallHeadIcon(charId, true) self.RImgSelCharIcon:SetRawImage(icon) self.TxtSelCharName.text = XCharacterConfigs.GetCharacterLogName(charId) end elseif self.GoodsType == XArrangeConfigs.Types.Weapon then local equipTemplateId = combination.GoodsId[1] local goodPara = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(equipTemplateId) self.RImgSelWeaponIcon:SetRawImage(goodPara.Icon) self.TxtSelWeaponName.text =goodPara.Name elseif self.GoodsType == XArrangeConfigs.Types.Partner then local partnerTemplateId = combination.GoodsId[1] local goodPara = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(partnerTemplateId) self.RImgSelWeaponIcon:SetRawImage(goodPara.Icon) self.TxtSelWeaponName.text =goodPara.Name end -- 禁用状态 local isSame = self.CurSelectDrawId == self.LastSelectDrawId local canSelect = not isSame and self.IsCanSwitch local notSelect = not isSame and not self.IsCanSwitch self.BtnRoleComfirm:SetDisable(not canSelect) self.TexCharHaveSelect.gameObject:SetActiveEx(isSame) self.TexCharCurSelect.gameObject:SetActiveEx(canSelect) self.TexCharNotSelect.gameObject:SetActiveEx(notSelect) self.BtnWeaponComfirm:SetDisable(not canSelect) self.TexWeaponHaveSelect.gameObject:SetActiveEx(isSame) self.TexWeaponCurSelect.gameObject:SetActiveEx(canSelect) self.TexWeaponNotSelect.gameObject:SetActiveEx(notSelect) end function XUiDrawOptional:CheckIsAllTimeOver() for _, info in pairs(self.InfoList) do if not XDataCenter.DrawManager.CheckDrawIsTimeOver(info.Id) then return false end end return true end function XUiDrawOptional:IsHaveSwitchLimit() return self.GroupInfo and self.GroupInfo.MaxSwitchDrawIdCount and self.GroupInfo.MaxSwitchDrawIdCount > 0 end function XUiDrawOptional:GetGoodType(infoList) for _, info in ipairs(infoList) do local drawCt = XDataCenter.DrawManager.GetDrawCombination(info.Id) if drawCt and drawCt.GoodsId and #drawCt.GoodsId > 0 then return XArrangeConfigs.GetType(drawCt.GoodsId[1]) end end return end --endregion --region Ui - SelectByRecommendCharFilter -- 初始化推荐角色筛选器 function XUiDrawOptional:InitRecommendCharFilter() local groupRuleCfg = XDrawConfigs.GetDrawGroupRuleById(self.GroupInfo.Id) local filterElementList = groupRuleCfg.CharFilterElementList or {} local showFilter = groupRuleCfg.IsShowFilter == 1 self.BtnRecommendCharFilter.gameObject:SetActiveEx(showFilter) self.CharRecommendDic = {} if self.GoodsType == XArrangeConfigs.Types.Weapon then for _, info in ipairs(self.AllInfoList) do local drawId = info.Id local combination = XDataCenter.DrawManager.GetDrawCombination(drawId) local equipTemplateId = combination.GoodsId[1] local equipCfg = XEquipConfig.GetEquipCfg(equipTemplateId) local charId = equipCfg.RecommendCharacterId if not self.CharRecommendDic[charId] then self.CharRecommendDic[charId] = { Weapon = {}, Partner = {} } end table.insert(self.CharRecommendDic[charId].Weapon, drawId) end elseif self.GoodsType == XArrangeConfigs.Types.Partner then for _, info in ipairs(self.AllInfoList) do local drawId = info.Id local combination = XDataCenter.DrawManager.GetDrawCombination(drawId) local partnerTemplateId = combination.GoodsId[1] local partnerCfg = XPartnerConfigs.GetPartnerTemplateById(partnerTemplateId) local charId = partnerCfg.RecommendCharacterId if not self.CharRecommendDic[charId] then self.CharRecommendDic[charId] = { Weapon = {}, Partner = {} } end table.insert(self.CharRecommendDic[charId].Partner, drawId) end end self.AllRecomCharIdList = {} for charId, _ in pairs(self.CharRecommendDic) do table.insert(self.AllRecomCharIdList, {Id = charId}) end end function XUiDrawOptional:OnRecommendCharFilter(charList) local showDrawDic = {} for _, charData in ipairs(charList) do local charId = charData.Id local recommend = self.CharRecommendDic[charId] if recommend then for _, drawId in ipairs(recommend.Weapon) do showDrawDic[drawId] = true end for _, drawId in ipairs(recommend.Partner) do showDrawDic[drawId] = true end end end local infoList = {} for _, info in ipairs(self.AllInfoList) do if showDrawDic[info.Id] then table.insert(infoList, info) end end self:RefreshGoodList(infoList) end --endregion --region Ui - Character function XUiDrawOptional:RefreshCharacterPanel() self.PanelRole.gameObject:SetActiveEx(true) self.TextRoleTitle.text = CSTextManagerGetText("AimCharacterSelectTitle") self:_SortCharInfoList(self.AllInfoList) self:_RefreshSwitchLimitChar() self:_InitCharTabList() end -- 切换选择次数限制 function XUiDrawOptional:_RefreshSwitchLimitChar() local maxSwitchCount = self.GroupInfo.MaxSwitchDrawIdCount local curSwitchCount = self.GroupInfo.SwitchDrawIdCount self.IsCanSwitch = not self:IsHaveSwitchLimit() or maxSwitchCount > curSwitchCount self.PanelQieHuanChar.gameObject:SetActiveEx(maxSwitchCount > 0) if self:IsHaveSwitchLimit() then local count = maxSwitchCount - curSwitchCount self.TxtHaveCountChar.text = CSTextManagerGetText("DrawSelectCountFullText", count) self.TxtNotHaveCountChar.text = CSTextManagerGetText("DrawSelectNotCountFullText") self.TxtHaveCountChar.gameObject:SetActiveEx(count > 0) self.TxtNotHaveCountChar.gameObject:SetActiveEx(count <= 0) end self.BtnRoleComfirm:SetDisable(not self.IsCanSwitch) end -- 角色列表排序 function XUiDrawOptional:_SortCharInfoList(infoList) -- 已拥有 local ownDic = {} for _, info in ipairs(infoList) do local combination = XDataCenter.DrawManager.GetDrawCombination(info.Id) local charId = combination.GoodsId[1] local isOwn = XDataCenter.CharacterManager.IsOwnCharacter(charId) ownDic[info.Id] = {CharId = charId, IsOwn = isOwn} end -- 排序 local drawAimProbability = XDrawConfigs.GetDrawAimProbability() table.sort(infoList, function(a, b) local priorityA = 0 local priorityB = 0 -- 是否是角色 local isNotCharA = ownDic[a.Id].CharId == nil local isNotCharB = ownDic[b.Id].CharId == nil if isNotCharA or isNotCharB then priorityA = priorityA + (isNotCharA and 100000 or 0) priorityB = priorityB + (isNotCharB and 100000 or 0) return priorityA > priorityB end -- 是否选中 priorityA = priorityA + (a.Id == self.CurSelectDrawId and 10000 or 0) priorityB = priorityB + (b.Id == self.CurSelectDrawId and 10000 or 0) -- 是否活动中 priorityA = priorityA + (a.EndTime > 0 and 1000 or 0) priorityB = priorityB + (b.EndTime > 0 and 1000 or 0) -- 是否拥有 local isOwnA = ownDic[a.Id].IsOwn local isOwnB = ownDic[b.Id].IsOwn priorityA = priorityA + (isOwnA and 0 or 100) priorityB = priorityB + (isOwnB and 0 or 100) -- 已拥有则未满阶角色优先 if isOwnA and isOwnB then local isMaxA = XDataCenter.CharacterManager.IsMaxQualityById(ownDic[a.Id].CharId) local isMaxB = XDataCenter.CharacterManager.IsMaxQualityById(ownDic[b.Id].CharId) priorityA = priorityA + (isMaxA and 0 or 10) priorityB = priorityB + (isMaxB and 0 or 10) end -- 最后按照Priority排序 priorityA = priorityA + (drawAimProbability[a.Id].Priority > drawAimProbability[b.Id].Priority and 1 or 0) priorityB = priorityB + (drawAimProbability[b.Id].Priority > drawAimProbability[a.Id].Priority and 1 or 0) return priorityA > priorityB end) end -- 初始化角色的页签列表 function XUiDrawOptional:_InitCharTabList() local groupRuleCfg = XDrawConfigs.GetDrawGroupRuleById(self.GroupInfo.Id) local filterElementList = groupRuleCfg.CharFilterElementList or {} local showFilter = groupRuleCfg.IsShowFilter and #filterElementList > 0 self.PanelTabList.gameObject:SetActiveEx(showFilter) if showFilter then self.TabBtnList = { self.BtnTabAll } -- 能量类型 for index, elementId in ipairs(filterElementList) do local go = CS.UnityEngine.Object.Instantiate(self.BtnTab) go.gameObject:SetActiveEx(true) go.transform:SetParent(self.BtnTab.transform.parent, false) local btn = go:GetComponent("XUiButton") table.insert(self.TabBtnList, btn) -- 刷新按钮ui local element = XCharacterConfigs.GetCharElement(elementId) btn:SetNameByGroup(0, element.ElementName) btn:SetRawImage(element.Icon2) end self.PanelTabList:Init(self.TabBtnList, function(tabIndex) self:OnClickTabBtn(tabIndex) end) self.PanelTabList:SelectIndex(1) end end --endregion --region Ui - Weapon function XUiDrawOptional:RefreshWeaponPanel() self.PanelWeapon.gameObject:SetActiveEx(true) self.TextWeaponTitle.text = CSTextManagerGetText("AimEquipSelectTitle") self:_SortWeaponInfoList(self.AllInfoList) self:_RefreshSwitchLimitWeapon() self:InitRecommendCharFilter() end function XUiDrawOptional:_SortWeaponInfoList(infoList) -- 已拥有 local ownDic = {} for _, info in ipairs(infoList) do local combination = XDataCenter.DrawManager.GetDrawCombination(info.Id) local equipTemplateId = combination.GoodsId[1] local isOwnEquip = XDataCenter.EquipManager.IsOwnEquip(equipTemplateId) local isOwnChar = false local equipCfg = XEquipConfig.GetEquipCfg(equipTemplateId) local charId = equipCfg.RecommendCharacterId if charId then isOwnChar = XDataCenter.CharacterManager.IsOwnCharacter(charId) end ownDic[info.Id] = {IsOwnWeapon = isOwnEquip, IsOwnChar = isOwnChar} end -- 排序 local drawAimProbability = XDrawConfigs.GetDrawAimProbability() table.sort(infoList, function(a, b) local priorityA = 0 local priorityB = 0 -- 是否选中 priorityA = priorityA + (a.Id == self.CurSelectDrawId and 10000 or 0) priorityB = priorityB + (b.Id == self.CurSelectDrawId and 10000 or 0) -- 是否活动中 priorityA = priorityA + (a.EndTime > 0 and 1000 or 0) priorityB = priorityB + (b.EndTime > 0 and 1000 or 0) -- 是否拥有装备 local isOwnA = ownDic[a.Id].IsOwnWeapon local isOwnB = ownDic[b.Id].IsOwnWeapon priorityA = priorityA + (isOwnA and 0 or 100) priorityB = priorityB + (isOwnB and 0 or 100) -- 未拥有装备,则优先有推荐角色的 if isOwnA == false and isOwnB == false then local isOwnCharA = ownDic[a.Id].IsOwnChar local isOwnCharB = ownDic[b.Id].IsOwnChar priorityA = priorityA + (isOwnCharA and 10 or 0) priorityB = priorityB + (isOwnCharB and 10 or 0) end -- 最后按照Priority排序 priorityA = priorityA + (drawAimProbability[a.Id].Priority > drawAimProbability[b.Id].Priority and 1 or 0) priorityB = priorityB + (drawAimProbability[b.Id].Priority > drawAimProbability[a.Id].Priority and 1 or 0) return priorityA > priorityB end) end -- 切换选择次数限制 function XUiDrawOptional:_RefreshSwitchLimitWeapon() local maxSwitchCount = self.GroupInfo.MaxSwitchDrawIdCount local curSwitchCount = self.GroupInfo.SwitchDrawIdCount self.IsCanSwitch = not self:IsHaveSwitchLimit() or maxSwitchCount > curSwitchCount self.PanelQieHuanWeapon.gameObject:SetActiveEx(maxSwitchCount > 0) if self:IsHaveSwitchLimit() then local count = maxSwitchCount - curSwitchCount self.TxtHaveCountWeapon.text = CSTextManagerGetText("DrawSelectCountFullText", count) self.TxtNotHaveCountWeapon.text = CSTextManagerGetText("DrawSelectNotCountFullText") self.TxtHaveCountWeapon.gameObject:SetActiveEx(count > 0) self.TxtNotHaveCountWeapon.gameObject:SetActiveEx(count <= 0) end self.BtnWeaponComfirm:SetDisable(not self.IsCanSwitch) end --endregion --region Ui - Partner function XUiDrawOptional:RefreshPartnerPanel() self.PanelWeapon.gameObject:SetActiveEx(true) self.TextWeaponTitle.text = CSTextManagerGetText("AimPartnerSelectTitle") self:_SortPartnerInfoList(self.AllInfoList) self:_RefreshSwitchLimitWeapon() self:InitRecommendCharFilter() end function XUiDrawOptional:_SortPartnerInfoList(infoList) -- 已拥有 local ownDic = {} for _, info in ipairs(infoList) do local combination = XDataCenter.DrawManager.GetDrawCombination(info.Id) local partnerTemplateId = combination.GoodsId[1] local isOwnPartner = XDataCenter.PartnerManager.GetPartnerCountByTemplateId(partnerTemplateId) > 0 local isOwnChar = false local partnerCfg = XPartnerConfigs.GetPartnerTemplateById(partnerTemplateId) local charId = partnerCfg.RecommendCharacterId if charId then isOwnChar = XDataCenter.CharacterManager.IsOwnCharacter(charId) end ownDic[info.Id] = {IsOwnPartner = isOwnPartner, IsOwnChar = isOwnChar} end -- 排序 local drawAimProbability = XDrawConfigs.GetDrawAimProbability() table.sort(infoList, function(a, b) local priorityA = 0 local priorityB = 0 -- 是否选中 priorityA = priorityA + (a.Id == self.CurSelectDrawId and 10000 or 0) priorityB = priorityB + (b.Id == self.CurSelectDrawId and 10000 or 0) -- 是否活动中 priorityA = priorityA + (a.EndTime > 0 and 1000 or 0) priorityB = priorityB + (b.EndTime > 0 and 1000 or 0) -- 是否拥有辅助机 local isOwnA = ownDic[a.Id].IsOwnPartner local isOwnB = ownDic[b.Id].IsOwnPartner priorityA = priorityA + (isOwnA and 0 or 100) priorityB = priorityB + (isOwnB and 0 or 100) -- 未拥有辅助机,则优先有推荐角色的 if isOwnA == false and isOwnB == false then local isOwnCharA = ownDic[a.Id].IsOwnChar local isOwnCharB = ownDic[b.Id].IsOwnChar priorityA = priorityA + (isOwnCharA and 10 or 0) priorityB = priorityB + (isOwnCharB and 10 or 0) end -- 最后按照Priority排序 priorityA = priorityA + (drawAimProbability[a.Id].Priority > drawAimProbability[b.Id].Priority and 1 or 0) priorityB = priorityB + (drawAimProbability[b.Id].Priority > drawAimProbability[a.Id].Priority and 1 or 0) return priorityA > priorityB end) end --endregion --region Ui - DrawActivityTarget function XUiDrawOptional:InitDrawActivityTarget(drawGroupId) self._TargetActivityData = XDataCenter.DrawManager.GetDrawGroupActivityTargetInfo(drawGroupId) ---@type XGridDrawTarget[] self._GridDrawTargetList = {} self._DrawTargetTemplateList = {0} local templateIdList = self._TargetActivityData:GetTargetTemplateIds() if not XTool.IsTableEmpty(templateIdList) then for _, id in ipairs(templateIdList) do self._DrawTargetTemplateList[#self._DrawTargetTemplateList + 1] = id end self.GoodsType = XArrangeConfigs.GetType(templateIdList[1]) end self.LastSelectDrawId = self._TargetActivityData:GetTargetId() self.CurSelectDrawId = self.LastSelectDrawId self.TextRoleTitle.text = XUiHelper.GetText("DrawTargetFirstTitle") self.TxtHaveCountChar.text = XUiHelper.GetText("DrawTargetSecondTitle", self._TargetActivityData:GetTargetCount()) -- 刷新界面 if self.GoodsType == XArrangeConfigs.Types.Character then -- 角色筛选 self:_InitTargetSelectFilter() -- 刷新列表 self:_RefreshCharacterDrawTarget(self._DrawTargetTemplateList) end -- 刷新当前选中 self:SelectTargetTemplate(self.CurSelectDrawId) end function XUiDrawOptional:_InitTargetSelectFilter() self.PanelTabList.gameObject:SetActiveEx(true) self.TabBtnList = { self.BtnTabAll } -- 能量类型 ---@type XCharacterAgency local characterAgency = XMVCA:GetAgency(ModuleId.XCharacter) local elementList = characterAgency:GetModelCharacterElement() for i = 1, 5 do local go = CS.UnityEngine.Object.Instantiate(self.BtnTab) go.gameObject:SetActiveEx(true) go.transform:SetParent(self.BtnTab.transform.parent, false) local btn = go:GetComponent("XUiButton") table.insert(self.TabBtnList, btn) -- 刷新按钮ui btn:SetNameByGroup(0, elementList[i].ElementName) btn:SetRawImage(elementList[i].Icon2) end self.PanelTabList:Init(self.TabBtnList, function(tabIndex) self:_OnClickTabSelectTab(tabIndex) end) self.PanelTabList:SelectIndex(1) end function XUiDrawOptional:_OnClickTabSelectTab(tabIndex) if self.TabIndex == tabIndex then return end self.TabIndex = tabIndex if tabIndex == 1 then self:_RefreshCharacterDrawTarget(self._DrawTargetTemplateList) else ---@type XCharacterAgency local characterAgency = XMVCA:GetAgency(ModuleId.XCharacter) local elementList = characterAgency:GetModelCharacterElement() local elementCfg = elementList[tabIndex - 1] local templateList = {} for _, characterId in ipairs(self._DrawTargetTemplateList) do if XTool.IsNumberValid(characterId) and characterAgency:GetCharacterElement(characterId) == elementCfg.Id then templateList[#templateList + 1] = characterId end end self:_RefreshCharacterDrawTarget(templateList) end self:PlayAnimation("QieHuan") end function XUiDrawOptional:SelectTargetTemplate(templateId) self.PanelSelectedChar.gameObject:SetActiveEx(true) self.PanelSelectedWeapon.gameObject:SetActiveEx(true) self.BtnRoleComfirm.gameObject:SetActiveEx(true) self.BtnWeaponComfirm.gameObject:SetActiveEx(true) -- 刷新选中 local gridList = self.GoodsType == XArrangeConfigs.Types.Character and self._GridDrawTargetList for _, grid in ipairs(gridList) do local isSelect = grid:GetTemplateId() == templateId grid:SetSelectState(isSelect) end self.CurSelectDrawId = templateId -- 禁用状态 local isSame = self.CurSelectDrawId == self.LastSelectDrawId -- 刷新右下角当前选中的信息 if self.GoodsType == XArrangeConfigs.Types.Character then if not XTool.IsNumberValid(templateId) then self.RImgSelCharIcon:SetRawImage(XDrawConfigs.GetDrawClientConfig("DrawTargetSelectNoneRoleImg")) self.TxtSelCharName.text = XDrawConfigs.GetDrawClientConfig("DrawTargetSelectNoneRoleText") self.TexCharHaveSelect.gameObject:SetActiveEx(false) self.TexCharCurSelect.gameObject:SetActiveEx(false) self.TexCharNotSelect.gameObject:SetActiveEx(false) else local charId = templateId local icon = XDataCenter.CharacterManager.GetCharSmallHeadIcon(charId, true) self.RImgSelCharIcon:SetRawImage(icon) self.TxtSelCharName.text = XCharacterConfigs.GetCharacterLogName(charId) self.TexCharHaveSelect.gameObject:SetActiveEx(isSame) self.TexCharCurSelect.gameObject:SetActiveEx(not isSame) self.TexCharNotSelect.gameObject:SetActiveEx(false) end end self.BtnRoleComfirm:SetDisable(isSame) end function XUiDrawOptional:_RefreshCharacterDrawTarget(templateIds) self.RoleContent.anchoredPosition = CS.UnityEngine.Vector2(0, 0) self.WeaponContent.anchoredPosition = CS.UnityEngine.Vector2(0, 0) for _, gridRole in ipairs(self.GridRoleList) do gridRole.GameObject:SetActiveEx(false) end for _, gridWeapon in ipairs(self.GridWeaponList) do gridWeapon.GameObject:SetActiveEx(false) end for i, id in ipairs(templateIds) do ---@type XGridDrawTarget local gridDrawTarget if self.GoodsType == XArrangeConfigs.Types.Character then if i <= #self._GridDrawTargetList then gridDrawTarget = self._GridDrawTargetList[i] else local go = CS.UnityEngine.Object.Instantiate(self.GridRole, self.GridRole.transform.parent) go.gameObject:SetActiveEx(true) gridDrawTarget = XGridDrawTarget.New(go, self) table.insert(self._GridDrawTargetList, gridDrawTarget) end end local isSelect = self.CurSelectDrawId == id gridDrawTarget:SetData(i, id, self.GoodsType, isSelect) gridDrawTarget.GameObject:SetActiveEx(true) end for i = #templateIds + 1, #self._GridDrawTargetList do self._GridDrawTargetList[i].GameObject:SetActiveEx(false) end self.PanelRole.gameObject:SetActiveEx(true) end --endregion --region Event function XUiDrawOptional:AddEventListener() XEventManager.AddEventListener(XEventId.EVENT_DRAW_TARGET_ACTIVITY_CHANGE, self.Close, self) end function XUiDrawOptional:RemoveEventListener() XEventManager.RemoveEventListener(XEventId.EVENT_DRAW_TARGET_ACTIVITY_CHANGE, self.Close, self) end --endregion --region BtnListener function XUiDrawOptional:AutoAddListener() XUiHelper.RegisterClickEvent(self, self.BtnCloseRole, self.OnBtnCloseClick) XUiHelper.RegisterClickEvent(self, self.BtnCloseWeapon, self.OnBtnCloseClick) XUiHelper.RegisterClickEvent(self, self.BtnRoleComfirm, self.OnBtnComfirmClick) XUiHelper.RegisterClickEvent(self, self.BtnWeaponComfirm, self.OnBtnComfirmClick) XUiHelper.RegisterClickEvent(self, self.BtnRecommendCharFilter, self.OnBtnRecommendCharFilterClick) end function XUiDrawOptional:OnBtnCloseClick() if self._IsTargetActivity then self.CurSelectDrawId = self._TargetActivityData:GetTargetId() else -- 重新获取当前选中 self.CurSelectDrawId = self:IsHaveSwitchLimit() and self.GroupInfo.UseDrawId or self.ParentUi.DrawInfo.Id if self:CheckIsAllTimeOver() then XLuaUiManager.RunMain() XUiManager.TipText("DrawAimLeftTimeOver") return end end if self.CurSelectDrawId == 0 then if self.NotSelectCb then self.NotSelectCb() end self:Close() return end self:Close() end function XUiDrawOptional:OnBtnComfirmClick() if self.CurSelectDrawId == self.LastSelectDrawId then return end if self._IsTargetActivity then -- 非校准活动过期判断 self:_OnBtnComfirmSelectDrawTarget() else self:_OnBtnComfirmSelectDrawAnim() end end ---校准活动选择 function XUiDrawOptional:_OnBtnComfirmSelectDrawTarget() XDataCenter.DrawManager.RequestSelectTargetActivity(self._TargetActivityData:GetActivityId(), self.CurSelectDrawId, function() self.OptionalCb(self._TargetActivityData) self:Close() end) end ---限定角色选择 function XUiDrawOptional:_OnBtnComfirmSelectDrawAnim() if not self.IsCanSwitch then return end if self:CheckIsAllTimeOver() then XLuaUiManager.RunMain() XUiManager.TipText("DrawAimLeftTimeOver") return end if XDataCenter.DrawManager.CheckDrawIsTimeOver(self.CurSelectDrawId) then XUiManager.TipText("DrawAimLeftTimeOver") return end local sureFun = function(IsChange) if IsChange then XDataCenter.DrawManager.SaveDrawAimId(self.CurSelectDrawId, self.ParentUi.GroupId, function() self.OptionalCb(self.CurSelectDrawId) self:Close() end) end end local combination = XDataCenter.DrawManager.GetDrawCombination(self.CurSelectDrawId) local goodsList = combination and combination.GoodsId or {} local IsRandom = #goodsList == 0 local maxSwitchCount = self.GroupInfo.MaxSwitchDrawIdCount local curSwitchCount = self.GroupInfo.SwitchDrawIdCount local count = maxSwitchCount - curSwitchCount local IsChang = self.GroupInfo.UseDrawId ~= self.CurSelectDrawId if (IsChang or IsRandom) and maxSwitchCount > 0 then XLuaUiManager.Open("UiChangeCombination", self.CurSelectDrawId, count, IsChang, sureFun) else sureFun(IsChang) end end function XUiDrawOptional:OnBtnRecommendCharFilterClick() local cacheKey = "UiDrawOptional" .. self.GroupInfo.Id local groupNameList = {} groupNameList[1] = XUiHelper.GetText("FitterCharCareer") groupNameList[2] = XUiHelper.GetText("FitterCharElement") XLuaUiManager.Open("UiCommonCharacterFilterTipsOptimization", self.AllRecomCharIdList, cacheKey, function(charList) self:OnRecommendCharFilter(charList) end, CharacterFilterGroupType.Draw, nil, groupNameList) end --endregion