require("Base/BasePanel") IncarnationPanel = Inherit(BasePanel) local heroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig) local artResourcesConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig) local tabs = {} local tabsRedpoints = {} local tabsImg = {"r_hero_huo 1_zh", "r_hero_feng 1_zh", "r_hero_shui 1_zh", "r_hero_dadi 1_zh"} local proId = 1 function IncarnationPanel:InitComponent() self.spLoader = SpriteLoader.New() for i = 1, 4 do tabs[i] = Util.GetGameObject(self.transform, "bg/Tabs/grid/Btn" .. i) tabsRedpoints[i] = Util.GetGameObject(tabs[i], "redpoint") if tabsImg[i] then Util.GetGameObject(tabs[i], "Image"):GetComponent("Image").sprite = self.spLoader:LoadSprite(tabsImg[i]) end end self.selectBtn = Util.GetGameObject(self.gameObject,"bg/Tabs/selectBtn") self.btnBack = Util.GetGameObject(self.gameObject,"bg/btnBack") self.incarnationPowerBtn = Util.GetGameObject(self.gameObject,"bg/incarnationPowerBtn") self.addBtn = Util.GetGameObject(self.gameObject,"bg/addBtn") self.helpBtn = Util.GetGameObject(self.gameObject,"bg/helpBtn") self.helpPos = self.helpBtn:GetComponent("RectTransform").localPosition self.fetterItem = Util.GetGameObject(self.gameObject,"fetterItem") local grid = Util.GetGameObject(self.gameObject,"bg/fetterGrid") local v21 = grid.transform.rect self.scroll = SubUIManager.Open(SubUIConfig.ScrollCycleView,grid.transform,self.fetterItem,nil,Vector2.New(v21.width, v21.height), 1, 1, Vector2.New(0,25)) self.itemPreList = {} self.upLayoutItemList = {} self.upLayout = Util.GetGameObject(self.gameObject,"bg/upLayout") for i = 1,3 do self.upLayoutItemList[i] = {} self.upLayoutItemList[i].go = Util.GetGameObject(self.upLayout,"card"..i) self.upLayoutItemList[i].btn = Util.GetGameObject(self.upLayoutItemList[i].go,"unLoadBtn") self.upLayoutItemList[i].pos = Util.GetGameObject(self.upLayoutItemList[i].go,"cardPre") self.upLayoutItemList[i].getBtn = Util.GetGameObject(self.upLayoutItemList[i].pos,"getBtn") end self.empty = Util.GetGameObject(self.gameObject,"bg/NoneImage") self.cardList = {} self.UpView = SubUIManager.Open(SubUIConfig.UpView, self.gameObject.transform) end function IncarnationPanel:BindEvent() for i = 1,4 do Util.AddClick(tabs[i], function() if i == proId then return end proId = i self:SetSelectBtn() self:RefreshList(false,true) end) end for i = 1,3 do Util.AddClick(self.upLayoutItemList[i].btn, function() if self.upLayoutData[i] and self.upLayoutData[i].id then NetManager.UpOrDownTransformationRequest(self.upLayoutData[i].id,i,1,function() self.upLayoutData[i] = nil self.upLayoutItemList[i].btn.gameObject:SetActive(false) self:RefreshSingleCardPre(self.upLayoutItemList[i].pos,nil,false,i) self:RefreshList(true,true) PopupTipPanel.ShowTip("成功卸下身外化身!") end) end end) end for i = 1,3 do Util.AddClick(self.upLayoutItemList[i].getBtn, function() if self.upLayoutData[i] and self.upLayoutData[i].id then local pos = self:FindDatasIndexById(self.upLayoutData[i].id) if proId ~= self.upLayoutData[i].property then proId = self.upLayoutData[i].property self:SetSelectBtn() self:RefreshList(false,true) end if pos > 0 then self.scroll:SetIndex(pos) end end end) end Util.AddClick(self.helpBtn, function() UIManager.OpenPanel(UIName.HelpPopup,HELP_TYPE.Incarnation,self.helpPos.x, self.helpPos.y) end) Util.AddClick(self.btnBack, function() self:ClosePanel() end) Util.AddClick(self.incarnationPowerBtn, function() local data = {} local singData = {} singData.title = "当前化身收集度" singData.pro = {} singData.tip = string.format("%s/%s",IncarnationManager.GetActiveNum(),LengthOfTable(IncarnationManager.itemDataList)) table.insert(data,singData) local singData = {} singData.title = "化身之力加成" singData.pro = IncarnationManager.GetproDesLst(IncarnationManager.GetIncarnationPower(),"00FF00") singData.tip = "" table.insert(data,singData) local singData = {} singData.title = "" singData.pro = {} singData.tip = string.format("说明:每获得一种化身,全体神将获得如下属性加成:%s",IncarnationManager.SingleIncarnationProDes) table.insert(data,singData) -- for i = 1 ,#data do -- LogGreen("data[i]:"..data[i].title.." #pro:"..#data[i].pro) -- for k,v in ipairs(data[i].pro) do -- LogGreen("data[i]:"..v) -- end -- end UIManager.OpenPanel(UIName.GeneralBigPopup,GENERAL_POPUP_TYPE.IncarnationDes,data) end) Util.AddClick(self.addBtn, function() local data = {} local singData = {} singData.title = "当前化身总加成" singData.pro = IncarnationManager.GetproDesLst(IncarnationManager.GetIncarnationTotalPro(),"00FF00") singData.tip = "总加成包括化身之力提供的属性" table.insert(data,singData) -- for i = 1 ,#data do -- LogGreen("data[i]:"..data[i].title.." #pro:"..#data[i].pro) -- for k,v in ipairs(data[i].pro) do -- LogGreen("data[i]:"..v) -- end -- end UIManager.OpenPanel(UIName.GeneralBigPopup,GENERAL_POPUP_TYPE.IncarnationDes,data) end) BindRedPointObject(RedPointType.incarnation_people,tabsRedpoints[1].gameObject) BindRedPointObject(RedPointType.incarnation_buddish,tabsRedpoints[2].gameObject) BindRedPointObject(RedPointType.incarnation_demon,tabsRedpoints[3].gameObject) BindRedPointObject(RedPointType.incarnation_taoist,tabsRedpoints[4].gameObject) end function IncarnationPanel:FindDatasIndexById(id) for i = 1 ,#self.datas do if self.datas[i].id == id then return i end end return -1 end function IncarnationPanel:SetSelectBtn() self.selectBtn.transform:SetParent(tabs[proId].transform) self.selectBtn:GetComponent("RectTransform").localPosition = Vector3.zero end function IncarnationPanel:AddListener() end function IncarnationPanel:RemoveListener() end function IncarnationPanel:OnOpen() proId = 1 end function IncarnationPanel:OnShow() self.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.Main }) self:RefreshUpList() self:SetSelectBtn() self:RefreshList(false,false) end function IncarnationPanel:RefreshUpList() self.upLayoutData = IncarnationManager.GetIncarnationData1() for i = 1,3 do self.upLayoutItemList[i].pos.gameObject:SetActive(false) self.upLayoutItemList[i].btn.gameObject:SetActive(false) end for k,v in pairs(self.upLayoutData) do self:RefreshSingleCardPre(self.upLayoutItemList[k].pos,v,false,k) self.upLayoutItemList[k].btn.gameObject:SetActive(true) end end function IncarnationPanel:RefreshSingleCardPre(cardPre,data,isJump,index) if not self.cardList[cardPre] then self.cardList[cardPre] = {} self.cardList[cardPre].bg = Util.GetGameObject(cardPre,"Hero/Bg1"):GetComponent("Image") self.cardList[cardPre].icon = Util.GetGameObject(cardPre,"Hero/Mask/icon"):GetComponent("RawImage") self.cardList[cardPre].cardBg = Util.GetGameObject(cardPre,"Hero/Bg2"):GetComponent("Image") self.cardList[cardPre].proImage = Util.GetGameObject(cardPre,"Hero/Pro/Image"):GetComponent("Image") self.cardList[cardPre].getBtn = Util.GetGameObject(cardPre,"getBtn") end if data then cardPre.gameObject:SetActive(true) if data.state < 0 or not isJump then self.cardList[cardPre].getBtn.gameObject:SetActive(true) else self.cardList[cardPre].getBtn.gameObject:SetActive(false) end self.cardList[cardPre].bg.sprite = self.spLoader:LoadSprite(GetIncarnationHeroCardStarBg[data.quality]) local liveName = GetResourcePath(heroConfig[data.heroId].Live) local roleConfig = ConfigManager.GetConfigData(ConfigName.RoleConfig, data.heroId) local scale = roleConfig.play_liveScale local livePos = Vector3.New(roleConfig.offset[1], roleConfig.offset[2], 0) if not isJump then self.cardList[cardPre].icon.texture = CardRendererManager.GetSpineTexture(index, liveName, Vector3.one * scale, livePos, true) else self.cardList[cardPre].icon.texture = CardRendererManager.GetSpineTexture((index%4 == 0 and 7 or index%4 + 3), liveName, Vector3.one * scale, livePos, true) end self.cardList[cardPre].icon.transform.localScale = Vector3.one self.cardList[cardPre].icon.transform.localPosition = Vector3.zero self.cardList[cardPre].proImage.sprite = self.spLoader:LoadSprite(GetProStrImageByProNum(data.property)) self.cardList[cardPre].cardBg.sprite = self.spLoader:LoadSprite(GetHeroCardStarFg[data.quality]) if isJump then Util.AddOnceClick(self.cardList[cardPre].getBtn,function() UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, data.itemId, function()end) end) end else cardPre.gameObject:SetActive(false) end end function IncarnationPanel:RefreshList(istop,isAnim) self.datas = IncarnationManager.GetItemDataListByPro(proId) self.scroll:ForeachItemGO(function(index,go) go.gameObject:SetActive(false) end) if not self.datas or #self.datas < 1 then self.empty.gameObject:SetActive(true) self.scroll.gameObject:SetActive(false) else self.empty.gameObject:SetActive(false) self.scroll.gameObject:SetActive(true) self.scroll:SetData(self.datas,function(index,go) self:SetSingleData(go,self.datas[index],index) end,istop,isAnim) end end function IncarnationPanel:SetSingleData(go,data,index) if not self.itemPreList[go] then self.itemPreList[go] = {} self.itemPreList[go].preList = {} self.itemPreList[go].obj = Util.GetGameObject(go,"bg") self.itemPreList[go].bg = Util.GetGameObject(self.itemPreList[go].obj,"bgdi"):GetComponent("Image") self.itemPreList[go].cardPre = Util.GetGameObject(self.itemPreList[go].obj,"cardPre") self.itemPreList[go].nameText = Util.GetGameObject(self.itemPreList[go].obj,"nameDi/nameText"):GetComponent("Text") self.itemPreList[go].nameText1 = Util.GetGameObject(self.itemPreList[go].obj,"nameDi/nameText1"):GetComponent("Text") self.itemPreList[go].skillLayout = Util.GetGameObject(self.itemPreList[go].obj,"skillLayout") self.itemPreList[go].proGrid = Util.GetGameObject(self.itemPreList[go].skillLayout,"proScrolllRect/proScroll") self.itemPreList[go].pro = Util.GetGameObject(self.itemPreList[go].skillLayout,"pro") self.itemPreList[go].red = Util.GetGameObject(self.itemPreList[go].obj,"red") self.itemPreList[go].unGetBtn = Util.GetGameObject(self.itemPreList[go].obj,"unGetBtn") self.itemPreList[go].activableBtn = Util.GetGameObject(self.itemPreList[go].obj,"activableBtn") self.itemPreList[go].incarnationBtn = Util.GetGameObject(self.itemPreList[go].obj,"incarnationBtn") self.itemPreList[go].incarnationningBtn = Util.GetGameObject(self.itemPreList[go].obj,"incarnationningBtn") end self.itemPreList[go].unGetBtn.gameObject:SetActive(false) self.itemPreList[go].activableBtn.gameObject:SetActive(false) self.itemPreList[go].incarnationBtn.gameObject:SetActive(false) self.itemPreList[go].incarnationningBtn.gameObject:SetActive(false) self.itemPreList[go].data = data if not data then go.gameObject:SetActive(false) return end go.gameObject:SetActive(true) self.itemPreList[go].bg.sprite = self.spLoader:LoadSprite(GetIncarnationDiImage[data.quality]) self.itemPreList[go].nameText.text = string.format("%s",GetIncarnationNameColor[data.quality], data.name) if data.quality == 7 then self.itemPreList[go].nameText1.gameObject:SetActive(true) self.itemPreList[go].nameText1.text = data.name else self.itemPreList[go].nameText1.gameObject:SetActive(false) end self.itemPreList[go].red.gameObject:SetActive(data.state == 0) self:RefreshSingleCardPre(self.itemPreList[go].cardPre,data,true,index) self:SetProList(data.proDesList,self.itemPreList[go].preList,self.itemPreList[go].proGrid,self.itemPreList[go].pro.gameObject) Util.AddOnceClick(self.itemPreList[go].unGetBtn,function() end) Util.AddOnceClick(self.itemPreList[go].activableBtn,function() NetManager.UpOrDownTransformationRequest(data.id,0,1,function() data.state = 1 self:SetSingleData(go,data,index) PopupTipPanel.ShowTip(string.format("成功激活%s",data.name)) CheckRedPointStatus(data.property + 438001) end) end) Util.AddOnceClick(self.itemPreList[go].incarnationBtn,function() local pos = 0 for i = 1,3 do if self.upLayoutData[i] and self.upLayoutData[i].id then else pos = i break end end if pos > 0 then NetManager.UpOrDownTransformationRequest(data.id,pos,2,function() data.state = 2 data.pos = pos self:SetSingleData(go,data,index) self.upLayoutData[pos] = data self:RefreshSingleCardPre(self.upLayoutItemList[pos].pos,data,false,pos) self.upLayoutItemList[pos].btn.gameObject:SetActive(true) PopupTipPanel.ShowTip("化身成功!") end) else PopupTipPanel.ShowTip("身外化身位置已达上限,请卸下需要替换的化身!") end end) Util.AddOnceClick(self.itemPreList[go].incarnationningBtn,function() NetManager.UpOrDownTransformationRequest(data.id,data.pos,1,function() local oldPos = data.pos data.state = 1 data.pos = 0 self:SetSingleData(go,data,index) self.upLayoutData[oldPos] = nil self:RefreshSingleCardPre(self.upLayoutItemList[oldPos].pos,nil,false,oldPos) self.upLayoutItemList[oldPos].btn.gameObject:SetActive(false) PopupTipPanel.ShowTip("成功卸下身外化身!") end) end) if data.state == -1 then self.itemPreList[go].unGetBtn.gameObject:SetActive(true) elseif data.state == 0 then self.itemPreList[go].activableBtn.gameObject:SetActive(true) elseif data.state == 1 then self.itemPreList[go].incarnationBtn.gameObject:SetActive(true) elseif data.state == 2 then self.itemPreList[go].incarnationningBtn.gameObject:SetActive(true) end end function IncarnationPanel:SetProList(data,preList,grid,pre) for i = 1,math.max(#data,#preList) do if not data[i] then preList[i].go.gameObject:SetActive(false) else if not preList[i] then preList[i] = {} preList[i].go = newObjToParent(pre,grid) preList[i].goText = preList[i].go:GetComponent("Text") end preList[i].go.gameObject:SetActive(true) preList[i].goText.text = data[i] end end ForceRebuildLayout(grid.transform) end function IncarnationPanel:OnSortingOrderChange() end function IncarnationPanel:OnClose() end function IncarnationPanel:OnDestroy() self.spLoader:Destroy() self.upLayoutItemList = {} self.itemPreList = {} self.cardList = {} ClearRedPointObject(RedPointType.incarnation_people,tabsRedpoints[1].gameObject) ClearRedPointObject(RedPointType.incarnation_buddish,tabsRedpoints[2].gameObject) ClearRedPointObject(RedPointType.incarnation_demon,tabsRedpoints[3].gameObject) ClearRedPointObject(RedPointType.incarnation_taoist,tabsRedpoints[4].gameObject) SubUIManager.Close(self.UpView) end return IncarnationPanel