local GachaInfoCtrl = class("GachaInfoCtrl", BaseCtrl) AllEnum = require("GameCore.Common.AllEnum") GachaInfoCtrl._mapNodeConfig = { txtWindowTitle = { sComponentName = "TMP_Text", sLanguageId = "Recruit_info" }, GridBig = {}, GridOutfit = {}, GridSmallOutfit = {}, GridSmall = {}, rtSSRList = {sComponentName = "Transform"}, rtSRList = {sComponentName = "Transform"}, rtAllSSRList = {sComponentName = "Transform"}, rtAllSRList = {sComponentName = "Transform"}, rtAllRList = {sComponentName = "Transform"}, rtSSRContnet = {}, rtSRContnet = {}, rtUPContent = {}, rtAllSSRContnet = {}, rtAllSRContnet = {}, rtAllRContnet = {}, TMPPoolDes = {sComponentName = "TMP_Text"}, TMPRandomInfo = {sComponentName = "TMP_Text"}, TMPRepeatInfo = {sComponentName = "TMP_Text"}, TMPUPTitle = {sComponentName = "TMP_Text"}, TMPUPSSRTitle = {sComponentName = "TMP_Text"}, TMPUPSRTitle = {sComponentName = "TMP_Text"}, TMPAllTitle = {sComponentName = "TMP_Text"}, TMPAllSSRTitle = {sComponentName = "TMP_Text"}, TMPAllSRTitle = {sComponentName = "TMP_Text"}, TMPAllRTitle = {sComponentName = "TMP_Text"}, TMPPoolDesTitle = {sComponentName = "TMP_Text"}, TMPRandomInfoTitle = {sComponentName = "TMP_Text"}, TMPRepeatInfoTitle = {sComponentName = "TMP_Text"}, btnCloseScreen = { sComponentName = "Button", callback = "OnBtnClick_Close" }, btnClose = { sComponentName = "Button", callback = "OnBtnClick_Close" }, rtPoolInfo = {sComponentName = "Animator"}, btn_ProbDetail = { sComponentName = "UIButton", callback = "OnBtnClick_OpenProbInfo" }, txt_Prob = {sComponentName = "TMP_Text", sLanguageId = "Gacha_Prob"}, svInfo = {sComponentName = "ScrollRect"} } GachaInfoCtrl._mapEventConfig = {} function GachaInfoCtrl:Awake() end function GachaInfoCtrl:FadeIn() end function GachaInfoCtrl:FadeOut() end function GachaInfoCtrl:OnEnable() end function GachaInfoCtrl:OnDisable() end function GachaInfoCtrl:OnDestroy() end function GachaInfoCtrl:OnRelease() end function GachaInfoCtrl:Refresh(nGachaId) NovaAPI.SetVerticalNormalizedPosition(self._mapNode.svInfo, 1) local mapGachaPoolCfgData = ConfigTable.GetData("Gacha", nGachaId) if mapGachaPoolCfgData == nil then printError("Gacha Missing:" .. nGachaId) return end local mapGachaCfgData = ConfigTable.GetData("GachaType", mapGachaPoolCfgData.GachaType) if mapGachaCfgData == nil then printError("GachaType Missing:" .. mapGachaPoolCfgData.GachaType) return end local tbSSRUpChar = {} local tbSSRUpOutfit = {} local tbSRUpChar = {} local tbSRUpOutfit = {} local tbSSRChar = {} local tbSSROutfit = {} local tbSRChar = {} local tbSROutfit = {} local tbROutfit = {} local tbUpItemList, tbItemList = PlayerData.Gacha:GetPoolProbDetail(nGachaId) for _, v in pairs(tbUpItemList) do local itemConfig = ConfigTable.GetData_Item(v.nGoodsId) if itemConfig.Type == GameEnum.itemType.Char then if itemConfig.Rarity == GameEnum.itemRarity.SSR then table.insert(tbSSRUpChar, v.nGoodsId) table.insert(tbSSRChar, v.nGoodsId) else table.insert(tbSRUpChar, v.nGoodsId) table.insert(tbSRChar, v.nGoodsId) end elseif itemConfig.Rarity == GameEnum.itemRarity.SSR then table.insert(tbSSRUpOutfit, v.nGoodsId) table.insert(tbSSROutfit, v.nGoodsId) else table.insert(tbSRUpOutfit, v.nGoodsId) table.insert(tbSROutfit, v.nGoodsId) end end for _, v in pairs(tbItemList) do local itemConfig = ConfigTable.GetData_Item(v.nGoodsId) if itemConfig.Type == GameEnum.itemType.Char then if itemConfig.Rarity == GameEnum.itemRarity.SSR then table.insert(tbSSRChar, v.nGoodsId) else table.insert(tbSRChar, v.nGoodsId) end elseif itemConfig.Rarity == GameEnum.itemRarity.SSR then table.insert(tbSSROutfit, v.nGoodsId) elseif itemConfig.Rarity == GameEnum.itemRarity.SR then table.insert(tbSROutfit, v.nGoodsId) else table.insert(tbROutfit, v.nGoodsId) end end delChildren(self._mapNode.rtAllRList) delChildren(self._mapNode.rtAllSRList) delChildren(self._mapNode.rtAllSSRList) delChildren(self._mapNode.rtSRList) delChildren(self._mapNode.rtSSRList) local SetCharGrid = function(goGrid, nTid) goGrid:SetActive(true) local mapCharCfgData = ConfigTable.GetData_Item(nTid) local mapCharCfg = ConfigTable.GetData_Character(nTid) local mapCharSkin = ConfigTable.GetData_CharacterSkin(mapCharCfg.DefaultSkinId) local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapCharCfg.Grade] local imgIcon = goGrid.transform:Find("AnimRoot/rtScaleRoot/tc_char_03/imgIconBg/imgItemIcon"):GetComponent("Image") local imgRare = goGrid.transform:Find("AnimRoot/rtScaleRoot/tc_char_03/imgItemRare"):GetComponent("Image") local imgElement = goGrid.transform:Find("AnimRoot/rtScaleRoot/tc_char_03/imgElement"):GetComponent("Image") local TMPName = goGrid.transform:Find("AnimRoot/TMPName"):GetComponent("TMP_Text") NovaAPI.SetTMPText(TMPName, mapCharCfgData.Title) self:SetPngSprite(imgIcon, mapCharSkin.Icon .. AllEnum.CharHeadIconSurfix.XXL) self:SetAtlasSprite(imgElement, "12_rare", AllEnum.Star_Element[mapCharCfg.EET].icon) self:SetAtlasSprite(imgRare, "12_rare", sFrame) local btnGrid = goGrid:GetComponent("UIButton") if btnGrid ~= nil then local ui_func = ui_handler(self, self.OnBtnClick_ShowCharInfo, goGrid, nTid) btnGrid.onClick:AddListener(ui_func) end end local SetOutfitGrid = function(goGrid, nTid) goGrid:SetActive(true) local mapItemCfgData = ConfigTable.GetData_Item(nTid) local imgIcon = goGrid.transform:Find("AnimRoot/rtScaleRoot/imgIcon"):GetComponent("Image") local imgRare = goGrid.transform:Find("AnimRoot/rtScaleRoot/imgRare"):GetComponent("Image") local imgElement = goGrid.transform:Find("AnimRoot/rtScaleRoot/imgElement"):GetComponent("Image") local mapDiscCfgData = ConfigTable.GetData("Disc", nTid) local TMPName = goGrid.transform:Find("AnimRoot/TMPName"):GetComponent("TMP_Text") NovaAPI.SetTMPText(TMPName, mapItemCfgData.Title) self:SetPngSprite(imgIcon, mapItemCfgData.Icon .. AllEnum.OutfitIconSurfix.Item) self:SetAtlasSprite(imgElement, "12_rare", AllEnum.Star_Element[mapDiscCfgData.EET].icon) self:SetSprite_FrameColor(imgRare, mapItemCfgData.Rarity, AllEnum.FrameType_New.Item) local btnGrid = goGrid:GetComponent("UIButton") if btnGrid ~= nil then local ui_func = ui_handler(self, self.OnBtnClick_ShowDiscInfo, goGrid, nTid) btnGrid.onClick:AddListener(ui_func) end end if #tbSSRUpChar + #tbSSRUpOutfit == 0 then self._mapNode.rtSSRContnet:SetActive(false) else self._mapNode.rtSSRContnet:SetActive(true) for _, nTid in ipairs(tbSSRUpChar) do local goGrid = instantiate(self._mapNode.GridBig, self._mapNode.rtSSRList) SetCharGrid(goGrid, nTid) end for _, nTid in ipairs(tbSSRUpOutfit) do local goGrid = instantiate(self._mapNode.GridOutfit, self._mapNode.rtSSRList) SetOutfitGrid(goGrid, nTid) end end if #tbSRUpOutfit + #tbSRUpChar == 0 then self._mapNode.rtSSRContnet:SetActive(false) else self._mapNode.rtSSRContnet:SetActive(true) self._mapNode.rtSSRContnet:SetActive(true) for _, nTid in ipairs(tbSRUpChar) do local goGrid = instantiate(self._mapNode.GridBig, self._mapNode.rtSRList) SetCharGrid(goGrid, nTid) end for _, nTid in ipairs(tbSRUpOutfit) do local goGrid = instantiate(self._mapNode.GridOutfit, self._mapNode.rtSRList) SetOutfitGrid(goGrid, nTid) end end if #tbSRUpOutfit + #tbSRUpChar + #tbSSRUpChar + #tbSSRUpOutfit == 0 then self._mapNode.rtUPContent:SetActive(false) else self._mapNode.rtUPContent:SetActive(true) end if #tbSSRChar + #tbSSROutfit == 0 then self._mapNode.rtAllSSRContnet:SetActive(false) else self._mapNode.rtAllSSRContnet:SetActive(true) for _, nTid in ipairs(tbSSRChar) do local goGrid = instantiate(self._mapNode.GridSmall, self._mapNode.rtAllSSRList) SetCharGrid(goGrid, nTid) end for _, nTid in ipairs(tbSSROutfit) do local goGrid = instantiate(self._mapNode.GridSmallOutfit, self._mapNode.rtAllSSRList) SetOutfitGrid(goGrid, nTid) end end if #tbSRChar + #tbSROutfit == 0 then self._mapNode.rtAllSRContnet:SetActive(false) else self._mapNode.rtAllSRContnet:SetActive(true) for _, nTid in ipairs(tbSRChar) do local goGrid = instantiate(self._mapNode.GridSmall, self._mapNode.rtAllSRList) SetCharGrid(goGrid, nTid) end for _, nTid in ipairs(tbSROutfit) do local goGrid = instantiate(self._mapNode.GridSmallOutfit, self._mapNode.rtAllSRList) SetOutfitGrid(goGrid, nTid) end end if tbROutfit == 0 then self._mapNode.rtAllSRContnet:SetActive(false) else self._mapNode.rtAllSRContnet:SetActive(true) for _, nTid in ipairs(tbROutfit) do local goGrid = instantiate(self._mapNode.GridSmallOutfit, self._mapNode.rtAllRList) SetOutfitGrid(goGrid, nTid) end end local tbContent = {} tbContent[1] = mapGachaPoolCfgData.Name local tbMainItem = {} local tbSubItem = {} local mapPkgData = ConfigTable.Get("GachaPkg") if mapPkgData ~= nil then ForEachTableLine(mapPkgData, function(mapData) if mapData.PkgId == mapGachaPoolCfgData.ATypeUpPkg then table.insert(tbMainItem, mapData.GoodsId) elseif mapData.PkgId == mapGachaPoolCfgData.BTypeUpPkg then table.insert(tbSubItem, mapData.GoodsId) end end) end local GetContent = function(nItmeId) local ret = "" local mapCfgData = ConfigTable.GetData_Item(nItmeId) if mapCfgData ~= nil then if mapCfgData.Type == GameEnum.itemType.Char then local mapCharCfg = ConfigTable.GetData_Character(nItmeId) if mapCharCfg ~= nil then ret = string.format("%s·%s", ConfigTable.GetUIText("T_Element_Attr_" .. mapCharCfg.EET), mapCharCfg.Name) end elseif mapCfgData.Type == GameEnum.itemType.Disc then local mapDiscCfg = ConfigTable.GetData("Disc", nItmeId) if mapDiscCfg ~= nil then ret = string.format("%s·%s", ConfigTable.GetUIText("T_Element_Attr_" .. mapDiscCfg.EET), mapCfgData.Title) end end end return ret end if tbMainItem[1] ~= nil then local nItemId = tbMainItem[1] tbContent[2] = GetContent(nItemId) end if tbSubItem[1] ~= nil then tbContent[3] = GetContent(tbSubItem[1]) end if tbSubItem[2] ~= nil then tbContent[4] = GetContent(tbSubItem[2]) end local subContent = function(sContent) return (sContent:gsub("{(%d+)}", function(index) index = tonumber(index) + 1 return tbContent[index] == nil and "" or tbContent[index] end)) end NovaAPI.SetTMPText(self._mapNode.TMPUPTitle, mapGachaCfgData.Title4) NovaAPI.SetTMPText(self._mapNode.TMPUPSSRTitle, mapGachaCfgData.Desc4) NovaAPI.SetTMPText(self._mapNode.TMPUPSRTitle, mapGachaCfgData.Desc5) NovaAPI.SetTMPText(self._mapNode.TMPAllTitle, mapGachaCfgData.Title5) NovaAPI.SetTMPText(self._mapNode.TMPAllSSRTitle, mapGachaCfgData.Desc6) NovaAPI.SetTMPText(self._mapNode.TMPAllSRTitle, mapGachaCfgData.Desc7) NovaAPI.SetTMPText(self._mapNode.TMPAllRTitle, mapGachaCfgData.Desc8) NovaAPI.SetTMPText(self._mapNode.TMPPoolDes, subContent(mapGachaCfgData.Desc1)) NovaAPI.SetTMPText(self._mapNode.TMPPoolDesTitle, mapGachaCfgData.Title1) NovaAPI.SetTMPText(self._mapNode.TMPRandomInfo, subContent(mapGachaCfgData.Desc2)) NovaAPI.SetTMPText(self._mapNode.TMPRandomInfoTitle, mapGachaCfgData.Title2) NovaAPI.SetTMPText(self._mapNode.TMPRepeatInfo, mapGachaCfgData.Desc3) NovaAPI.SetTMPText(self._mapNode.TMPRepeatInfoTitle, mapGachaCfgData.Title3) self._mapNode.btn_ProbDetail.gameObject:SetActive(mapGachaPoolCfgData.StorageId ~= GameEnum.gachaStorageType.BeginnerCardPool) end function GachaInfoCtrl:OpenInfo() self.gameObject:SetActive(true) self._mapNode.rtPoolInfo:Play("t_window_04_t_in") end function GachaInfoCtrl:OnBtnClick_Close() local Close = function() self.gameObject:SetActive(false) end self._mapNode.rtPoolInfo:Play("t_window_04_t_out") self:AddTimer(1, 0.2, Close, true, true, true) end function GachaInfoCtrl:OnBtnClick_ShowCharInfo(btn, nCharId) EventManager.Hit(EventId.OpenPanel, PanelId.CharBgTrialPanel, PanelId.CharInfoTrial, nCharId) end function GachaInfoCtrl:OnBtnClick_ShowDiscInfo(btn, nDiscId) EventManager.Hit(EventId.OpenPanel, PanelId.DiscSample, nDiscId) end function GachaInfoCtrl:OnBtnClick_OpenProbInfo() EventManager.Hit("GachaOpenProbInfo") end return GachaInfoCtrl