----- 神将置换 ----- local this = {} local sortingOrder=0 local tabs={} local curIndex = 0 local curSelectHero = {} local curSelectHeroConfig = {} local heroSelectBtn = {} local heroDatas local t local replaceItemIdConfig = ConfigManager.GetConfigData(ConfigName.SpecialConfig,68) local replaceCostConfig = ConfigManager.GetConfigData(ConfigName.SpecialConfig,69) local HeroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig) function this:InitComponent(gameObject) this.spLoader = SpriteLoader.New() this.gameObject = gameObject this.heroPre = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/item") this.replaceBtn = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/btns/replaceBtn") this.saveBtn = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/btns/saveBtn") this.cancelBtn = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/btns/cancelBtn") for i = 1, 6 do tabs[i] = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/Tabs/Grid/Btn" .. i) end this.selectBtn=Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/Tabs/SelectBtn") this.selectBtn:SetActive(true) this.ScrollBar=Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/Scrollbar"):GetComponent("Scrollbar") local v2 = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/scroll"):GetComponent("RectTransform").rect this.ScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/scroll").transform, this.heroPre, this.ScrollBar, Vector2.New(-v2.x*2, -v2.y*2), 1, 5, Vector2.New(35,15)) this.ScrollView.moveTween.MomentumAmount = 1 this.ScrollView.moveTween.Strength = 1 --need -> replaceHero Info this.needHero = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/heros/needHero") this.replaceHero = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/heros/replacedHero") this.needBg = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/bg/heroPlace1") this.replaceBg = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/bg/heroPlace2") this.text = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/heros/content/Text") this.cost = Util.GetGameObject(gameObject, "CompoundHeroPanel_Replace/heros/content/cost") this.costImage = Util.GetGameObject(this.cost, "Image"):GetComponent("Image") this.costText = Util.GetGameObject(this.cost,"Text"):GetComponent("Text") end function this:BindEvent() --置换 Util.AddClick(this.replaceBtn,function() if not curSelectHero.id then PopupTipPanel.ShowTip(Language[10417]) elseif curSelectHero.id and (t>BagManager.GetTotalItemNum(tonumber(replaceItemIdConfig.Value))) then PopupTipPanel.ShowTip(Language[10418]) else NetManager.SaveHeroChangeRequest(curSelectHero.dynamicId,function (msg) HeroManager.ResetHeroChangeId(curSelectHero.dynamicId,msg.heroTempId)--改变英雄changeId this.replaceHero:SetActive(true) this.cancelBtn:SetActive(true) this.replaceBtn:SetActive(false) this.saveBtn:SetActive(true) this.needBg:SetActive(false) this.replaceBg:SetActive(false) this.text:SetActive(false) this.cost:SetActive(false) this.ShowCostInfo() local value = this.RebuildData(msg.heroTempId,curSelectHero) this.SetHero(this.replaceHero,value) end) end end) --取消 Util.AddClick(this.cancelBtn,function() NetManager.CancelHeroChangeRequest(curSelectHero.dynamicId,function (msg) HeroManager.ResetHeroChangeId(curSelectHero.dynamicId)--改变英雄changeId this.replaceHero:SetActive(false) this.needHero:SetActive(true) this.cancelBtn:SetActive(false) this.replaceBtn:SetActive(true) this.saveBtn:SetActive(false) this.needBg:SetActive(false) this.replaceBg:SetActive(true) this.text:SetActive(false) this.cost:SetActive(true) this.ShowCostInfo() end) end) --保存置换 Util.AddClick(this.saveBtn,function() NetManager.DoHeroChangeRequest(curSelectHero.dynamicId,function (msg) this.replaceHero:SetActive(false) this.needHero:SetActive(false) this.needBg:SetActive(true) this.replaceBg:SetActive(true) this.text:SetActive(true) this.cost:SetActive(false) this.ShowCostInfo() HeroManager.DeleteHeroDatas({curSelectHero.dynamicId}) for i = 1, #msg.drop.Hero do HeroManager.UpdateHeroDatas(msg.drop.Hero[i]) ExpeditionManager.InitHeroHpValue(msg.drop.Hero[i].id) end CheckRedPointStatus(RedPointType.Huaxutan_CompoundHero) curSelectHero = HeroManager.GetSingleHeroData(msg.drop.Hero[1].id) this.ShowCurrPosHeroReplace(curIndex) end) end) end --通过Id 重新组成数据 function this.RebuildData(id,curHero) local herodata = {} herodata.id = HeroConfig[id].Id herodata.name = GetLanguageStrById(HeroConfig[id].ReadingName) herodata.live = GetResourcePath(HeroConfig[id].Live) herodata.star = HeroConfig[id].Star herodata.lv = curHero.lv herodata.quality = HeroConfig[id].Quality herodata.profession = HeroConfig[id].Profession herodata.scale = HeroConfig[id].Scale herodata.position = HeroConfig[id].Position herodata.property = HeroConfig[id].PropertyName return herodata end function this:AddListener() end function this:RemoveListener() end function this:OnSortingOrderChange(_sortingOrder) sortingOrder = _sortingOrder end function this:OnShow(...) curIndex = 0 sortingOrder =0 for i = 0,#tabs - 1 do local index=i Util.GetGameObject(tabs[i + 1], "Image"):GetComponent("Image").sprite=this.spLoader:LoadSprite(GetProStrImageByProNum(index)) Util.AddOnceClick(tabs[i + 1], function() curSelectHero = {} if index == curIndex then curIndex=0 this.HeroReplaceBtnClick(tabs[1],curIndex) else this.HeroReplaceBtnClick(tabs[i + 1],index) end end) end this.HeroReplaceBtnClick(tabs[1],curIndex) end --英雄类型按钮点击事件 function this.HeroReplaceBtnClick(_btn,_curIndex) curIndex = _curIndex this.needBg:SetActive(true) this.replaceBg:SetActive(true) this.SetBtnSelect(_btn) this.ShowCurrPosHeroReplace(_curIndex) end --显示当前阵营的英雄 function this.ShowCurrPosHeroReplace(_curIndex) this.replaceHero:SetActive(false) this.needHero:SetActive(false) heroDatas = this.GetHeroDataByPosition(_curIndex) this.ScrollView:SetData(heroDatas, function (index, go) -- heroSelectBtn[index] = Util.GetGameObject(go.transform, "choosed") -- if not heroSelectBtn[heroDatas[index].dynamicId] then -- heroSelectBtn[heroDatas[index].dynamicId] = Util.GetGameObject(go.transform, "choosed") -- end this.SingleHeroDataShow(go, heroDatas[index]) end) -- this.ScrollView:ForeachItemGO(function(index, go) -- Timer.New(function() -- go.gameObject:SetActive(true) -- PlayUIAnim(go.gameObject) -- end, 0.001 * (index - 1)):Start() -- end) end --通过职业筛选英雄 function this.GetHeroDataByPosition(_position) local heros = {} local index = 1 for i, v in pairs(HeroManager.ByReplaceHeroGetAllHeros()) do --这里不显示神系的武将 if v.heroConfig.PropertyName == _position or (_position ==0 and v.heroConfig.PropertyName~=5 ) then --0 全职业 heros[index] = v index = index + 1 end end return heros end local oldChoose --数据显示 function this.SingleHeroDataShow(_go,_heroData) local go = _go local heroData = _heroData Util.GetGameObject(go.transform, "frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite(GetHeroQuantityImageByquality(HeroConfig[heroData.id].Quality,heroData.star)) Util.GetGameObject(go.transform, "lv/Text"):GetComponent("Text").text = heroData.lv Util.GetGameObject(go.transform, "icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(heroData.icon) Util.GetGameObject(go.transform, "posIcon"):SetActive(false) Util.GetGameObject(go.transform, "proIcon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(GetProStrImageByProNum(heroData.changeProId)) Util.GetGameObject(go.transform, "Text"):GetComponent("Text").text = SubString2(GetLanguageStrById(heroData.name),8 ) local formationMask = Util.GetGameObject(go.transform, "formationMask") local formationImage = Util.GetGameObject(go.transform, "formationMask/formationImage/upImage"):GetComponent("Image") if LengthOfTable(heroData.formationList) ~= 0 then --if LengthOfTable(heroData.formationList) ~= 0 then formationMask:SetActive(true) formationImage.sprite = this.spLoader:LoadSprite("t_tongyong-yishangzheng_zh") elseif heroData.lockState == 1 then formationMask:SetActive(true) formationImage.sprite = this.spLoader:LoadSprite("r_hero_suodi_yisuoding_zh") else formationMask:SetActive(false) end local starGrid = Util.GetGameObject(go.transform, "star") local star,starType = heroData.GetStar(1) SetHeroStars(this.spLoader, starGrid, star,starType,nil,nil,Vector2.New(0,1)) local cardBtn = Util.GetGameObject(go.transform, "icon") local choosed = Util.GetGameObject(go.transform, "choosed") local GongMingMask = Util.GetGameObject(go.transform, "GongMingMask") GongMingMask:SetActive(false)--最后检测是否共鸣 if heroData.lockState == 1 or LengthOfTable(heroData.formationList) ~= 0 then else if HarmonyManager.IsChangeColor(heroData.dynamicId) then Util.GetGameObject(go.transform, "lv/Text"):GetComponent("Text").text = ""..heroData.lv.."" GongMingMask:SetActive(true) elseif HarmonyManager:IsEnvoy(heroData.dynamicId) and HarmonyManager:HongMengTowerUpLimit() ~= 0 then Util.GetGameObject(go.transform, "lv/Text"):GetComponent("Text").text = ""..heroData.lv.."" GongMingMask:SetActive(true) end end choosed:SetActive(false) if curSelectHero.dynamicId == heroData.dynamicId then choosed:SetActive(true) oldChoose = choosed end this.replaceBtn:SetActive(true) this.cancelBtn:SetActive(false) this.saveBtn:SetActive(false) this.needBg:SetActive(true) this.replaceBg:SetActive(true) this.text:SetActive(true) this.cost:SetActive(false) if curSelectHero.id then this.SetHero(this.needHero,curSelectHero) this.ShowCostInfo() this.needHero:SetActive(true) this.replaceHero:SetActive(false) this.needBg:SetActive(false) this.replaceBg:SetActive(true) this.text:SetActive(false) this.cost:SetActive(true) end Util.AddOnceClick(GongMingMask, function() PopupTipPanel.ShowTip(Language[12184]) end) Util.AddOnceClick(cardBtn, function() if heroData.dynamicId == curSelectHero.dynamicId then choosed:SetActive(false) oldChoose = nil curSelectHero = {} this.needHero:SetActive(false) this.replaceHero:SetActive(false) this.cancelBtn:SetActive(false) this.saveBtn:SetActive(false) this.replaceBtn:SetActive(true) this.needBg:SetActive(true) this.replaceBg:SetActive(true) this.text:SetActive(true) this.cost:SetActive(false) else choosed:SetActive(true) if oldChoose then oldChoose:SetActive(false) end oldChoose = choosed curSelectHero = heroData this.ShowCostInfo() this.needHero:SetActive(true) this.replaceHero:SetActive(false) this.needBg:SetActive(false) this.replaceBg:SetActive(true) this.text:SetActive(false) this.cost:SetActive(true) this.SetHero(this.needHero,curSelectHero) --如果已经有了置换Id if curSelectHero.changeId ~=0 then this.cancelBtn:SetActive(true) this.replaceBtn:SetActive(false) this.saveBtn:SetActive(true) this.replaceHero:SetActive(true) this.needBg:SetActive(false) this.replaceBg:SetActive(false) this.text:SetActive(false) this.cost:SetActive(false) local data = this.RebuildData(curSelectHero.changeId,curSelectHero) this.SetHero(this.replaceHero,data) else this.cancelBtn:SetActive(false) this.replaceBtn:SetActive(true) this.saveBtn:SetActive(false) this.replaceHero:SetActive(false) this.needBg:SetActive(false) this.replaceBg:SetActive(true) this.text:SetActive(false) this.cost:SetActive(true) end end -- for i = 1, #heroDatas do -- if heroSelectBtn[i] and heroDatas[i] then -- heroSelectBtn[i]:SetActive(heroDatas[i].dynamicId == curSelectHero.dynamicId) -- end -- end end) Util.AddOnceClick(formationMask, function() local text = "" for n, w in pairs(FormationManager.formationList) do for m = 1, #w.teamHeroInfos do if heroData.dynamicId == w.teamHeroInfos[m].heroId then local isFormationStr = HeroManager.GetHeroFormationStr2(n) if isFormationStr ~= "" then if not text or text == "" then text = isFormationStr else text = text .. "、"..isFormationStr end end end end end if text ~= "" then text = Language[10411]..text..Language[10412] PopupTipPanel.ShowTip(text) return end if heroData.lockState == 1 then PopupTipPanel.ShowTip(Language[10419]) return end end) Util.AddLongPressClick(cardBtn, function() UIManager.OpenPanel(UIName.RoleInfoPopup, heroData) end, 0.5) end --刷新中间按钮和显示 function this.refresh() -- body end --设置两个英雄,左右不确定 function this.SetHero(go,heroData) local hero = Util.GetGameObject(go, "Hero1") local herobg=Util.GetGameObject(hero,"Bg1"):GetComponent("Image") local herolv=Util.GetGameObject(hero,"lv/Text"):GetComponent("Text") local herofg=Util.GetGameObject(hero,"Bg2"):GetComponent("Image") local heropro=Util.GetGameObject(hero,"Pro/Image"):GetComponent("Image") local herostarGrid=Util.GetGameObject(hero,"StarGrid") local heroname=Util.GetGameObject(hero,"Name/Text"):GetComponent("Text") local heroyuanImage=Util.GetGameObject(hero,"yuanImage") local herolive = Util.GetGameObject(hero, "Mask/icon"):GetComponent("RawImage") local herozs = Util.GetGameObject(hero, "zs") Util.GetGameObject(hero,"hpProgress").gameObject:SetActive(false) Util.GetGameObject(hero,"rageProgress").gameObject:SetActive(false) Util.GetGameObject(hero,"UI_Effect_jinkuang_KaPai").gameObject:SetActive(false) herobg.sprite = this.spLoader:LoadSprite(GetHeroCardStarBg[heroData.star]) local roleConfig = ConfigManager.GetConfigData(ConfigName.RoleConfig, heroData.id) local scale = roleConfig.play_liveScale local livePos = Vector3.New(roleConfig.offset[1], roleConfig.offset[2], 0) if go == this.needHero then herolive.texture = CardRendererManager.GetSpineTexture(1, heroData.live, Vector3.one * scale, livePos, true) else herolive.texture = CardRendererManager.GetSpineTexture(2, heroData.live, Vector3.one * scale, livePos, true) end herolive.transform.localScale = Vector3.one herolive.transform.localPosition = Vector3.zero local zsName = GetHeroCardStarZs[heroData.star] if zsName == "" then herozs:SetActive(false) else herozs:SetActive(true) herozs:GetComponent("Image").sprite = this.spLoader:LoadSprite(zsName) end heroyuanImage:SetActive(false) herolv.text=heroData.lv herofg.sprite = this.spLoader:LoadSprite(GetHeroCardStarFg[heroData.star]) heropro.sprite=this.spLoader:LoadSprite(GetProStrImageByProNum(heroData.property)) SetCardStars(herostarGrid,heroData.star) if heroData.star > 9 then Util.GetGameObject(go,"UI_Effect_jinkuang_KaPai").gameObject:SetActive(true) else Util.GetGameObject(go,"UI_Effect_jinkuang_KaPai").gameObject:SetActive(false) end heroname.text=heroData.name end --设置阵营按钮选中 function this.SetBtnSelect(_parObj) this.selectBtn.transform:SetParent(_parObj.transform) this.selectBtn.transform.localScale = Vector3.one this.selectBtn.transform.localPosition=Vector3.zero end function this.ShowCostInfo() if replaceItemIdConfig then this.costImage:GetComponent("Image").sprite = SetIcon(this.spLoader, tonumber(replaceItemIdConfig.Value)) end if curSelectHero and replaceCostConfig then local getCostByStar = string.split(replaceCostConfig.Value,"|") if curSelectHero.star == 4 then t = tonumber(string.split(getCostByStar[1],"#")[2]) elseif curSelectHero.star == 5 then t = tonumber(string.split(getCostByStar[2],"#")[2]) end this.costText.text = t if t>BagManager.GetTotalItemNum(tonumber(replaceItemIdConfig.Value)) then this.costText.text = ""..t.."" end end end function this:OnClose() curSelectHero = {} curSelectHeroConfig = {} this.replaceHero:SetActive(false) this.needHero:SetActive(false) oldChoose = nil end function this:OnDestroy() this.spLoader:Destroy() end return this