459 lines
18 KiB
Lua
459 lines
18 KiB
Lua
----- 献祭 -----
|
||
local this = {}
|
||
local sortingOrder=0
|
||
local tabSortType = 0
|
||
local tarHero
|
||
local selectHeroData={}--选择的英雄list did = data
|
||
local maxSelectNum = 30--最大选择数量
|
||
--选择碎片的数量
|
||
local selectChipNum = 0
|
||
--显示的灵兽及碎片数据
|
||
local heroDatas={}
|
||
local oldChoosed=nil--上一个选中英雄
|
||
--选择的碎片id
|
||
local selectChipId=0
|
||
--碎片最大数量
|
||
local maxChipNum =0
|
||
--是否为灵兽/灵兽碎片
|
||
local isPokemon = false
|
||
function this:InitComponent(gameObject)
|
||
this.spLoader = SpriteLoader.New()
|
||
--上部内容
|
||
this.helpBtn=Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/HelpBtn")
|
||
this.helpPos=this.helpBtn:GetComponent("RectTransform").localPosition
|
||
--回溯按钮
|
||
this.confirmBtn=Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/ConfirmBtn")
|
||
Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/ConfirmBtn/Image"):GetComponent("Image").sprite=this.spLoader:LoadSprite("UI_hz_ls_03")
|
||
this.shopBtn=Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/shopBtn")
|
||
this.selectText = Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/selectNumText"):GetComponent("Text")
|
||
this.selectNumDes = Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/selectNumDes"):GetComponent("Text")
|
||
this.selectBtn = Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/btns/selectBtn")
|
||
this.cardPre = Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/equipTreasurePre")
|
||
this.scrollbar = Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/Scrollbar"):GetComponent("Scrollbar")
|
||
this.Empty = Util.GetGameObject(gameObject,"Content/Resolve_GodWeapon/Empty")
|
||
local v21 = Util.GetGameObject(gameObject, "Content/Resolve_GodWeapon/ItemListRoot"):GetComponent("RectTransform").rect
|
||
Util.GetGameObject(gameObject, "Content/Resolve_GodWeapon/Empty/Bg/Text"):GetComponent("Text").text="无可分解名刀"
|
||
this.chipObj=Util.GetGameObject(gameObject, "Content/Resolve_GodWeapon/chipObj")
|
||
this.btn_remove=Util.GetGameObject(gameObject, "Content/Resolve_GodWeapon/chipObj/btn_remove")
|
||
this.btn_add=Util.GetGameObject(gameObject, "Content/Resolve_GodWeapon/chipObj/btn_add")
|
||
this.chipNumTxt=Util.GetGameObject(gameObject, "Content/Resolve_GodWeapon/chipObj/Text"):GetComponent("Text")
|
||
|
||
this.ScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, Util.GetGameObject(gameObject, "Content/Resolve_GodWeapon/ItemListRoot").transform,
|
||
this.cardPre, this.scrollbar, Vector2.New(v21.width, v21.height), 1, 5, Vector2.New(40,15))
|
||
this.ScrollView.moveTween.MomentumAmount = 1
|
||
this.ScrollView.moveTween.Strength = 1
|
||
maxSelectNum = tonumber(ConfigManager.GetConfigData(ConfigName.SpecialConfig,54).Value)
|
||
this.chooseObjList = {}
|
||
end
|
||
|
||
function this:BindEvent()
|
||
--减少按钮
|
||
Util.AddClick(this.btn_remove,function()
|
||
if selectChipNum==1 then
|
||
--减少按钮置灰
|
||
Util.SetGray(this.btn_remove,true)
|
||
return
|
||
end
|
||
if selectChipNum== maxChipNum-1 then
|
||
--取消增加按钮置灰
|
||
Util.SetGray(this.btn_add,false)
|
||
end
|
||
selectChipNum=selectChipNum-1
|
||
this.chipNumTxt.text=selectChipNum
|
||
end)
|
||
|
||
|
||
--增加按钮
|
||
Util.AddClick(this.btn_add,function()
|
||
if selectChipNum==maxChipNum then
|
||
--增加按钮置灰
|
||
Util.SetGray(this.btn_add,true)
|
||
return
|
||
end
|
||
if selectChipNum== 2 then
|
||
--取消减少按钮置灰
|
||
Util.SetGray(this.btn_remove,false)
|
||
end
|
||
selectChipNum=selectChipNum + 1
|
||
this.chipNumTxt.text=selectChipNum
|
||
end)
|
||
|
||
|
||
Util.AddClick(this.helpBtn,function()
|
||
UIManager.OpenPanel(UIName.HelpPopup,HELP_TYPE.PokemonResolve,this.helpPos.x,this.helpPos.y)
|
||
end)
|
||
|
||
Util.AddClick(this.shopBtn, function()
|
||
local isActive, errorTip = ShopManager.IsActive(SHOP_TYPE.SOUL_CONTRACT_SHOP)
|
||
if not isActive then
|
||
PopupTipPanel.ShowTip(errorTip or Language[10574])
|
||
return
|
||
end
|
||
UIManager.OpenPanel(UIName.MainShopPanel, SHOP_TYPE.SOUL_CONTRACT_SHOP)
|
||
end)
|
||
--放生按钮
|
||
Util.AddClick(this.confirmBtn,function()
|
||
if isPokemon and tonumber(LengthOfTable(selectHeroData))==0 then
|
||
PopupTipPanel.ShowTip("请选择名刀或名刀碎片")
|
||
return
|
||
end
|
||
if not isPokemon and (selectChipId==0 or selectChipNum==0) then
|
||
PopupTipPanel.ShowTip("请选择名刀或名刀碎片")
|
||
return
|
||
end
|
||
--奖励物品
|
||
--所有材料
|
||
local allMaterials={}
|
||
local pokemonIds={}
|
||
--灵兽
|
||
if isPokemon then
|
||
local allCoin=0
|
||
for key, value in pairs(selectHeroData) do
|
||
--升级消耗
|
||
table.insert(pokemonIds,key)
|
||
local lvConfig=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ShenBingLevel,"Level",value.lv,"Quality",value.quality)
|
||
if lvConfig then
|
||
local matrs=lvConfig.SumConsume
|
||
if matrs then
|
||
for i = 1, #matrs do
|
||
local mat=matrs[i]
|
||
if CheckListIsContainValue2(allMaterials,mat[1]) then
|
||
--allMaterials[mat[1]]=allMaterials[mat[1]]+mat[2]
|
||
|
||
for key, value in pairs(allMaterials) do
|
||
if value[1]==mat[1] then
|
||
value[2]=value[2]+mat[2]
|
||
end
|
||
end
|
||
else
|
||
if mat[2]>0 then
|
||
table.insert(allMaterials,{mat[1],mat[2]})
|
||
end
|
||
end
|
||
|
||
end
|
||
end
|
||
end
|
||
--升星消耗
|
||
local lingshouConfig=ConfigManager.GetConfigData(ConfigName.ShenBing,value.id)
|
||
local haveNum=0
|
||
if value.star>=0 then
|
||
LogError("value.star====="..value.star)
|
||
local starConfig=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ShenbingStar,"Star",value.star,"Quality",value.quality)
|
||
if starConfig then
|
||
haveNum=starConfig.SumItemNum
|
||
local starMatrs=starConfig.SumConsume
|
||
--消耗材料
|
||
if starMatrs then
|
||
for i = 1, #starMatrs do
|
||
local starm=starMatrs[i]
|
||
table.insert(allMaterials,{starm[1],starm[2]})
|
||
end
|
||
end
|
||
end
|
||
--消耗本体数量,分解成碎片
|
||
LogError("havenum==="..haveNum)
|
||
allCoin=allCoin+starConfig.CoinReturn[2]
|
||
end
|
||
|
||
end
|
||
--加上所有的分解币
|
||
table.insert(allMaterials,{22302,allCoin})
|
||
else--灵兽碎片
|
||
local itemConfig=ConfigManager.GetConfigData(ConfigName.ItemConfig,selectChipId)
|
||
if itemConfig then
|
||
local groupId=tonumber(itemConfig.ResolveReward)
|
||
local groupConfig=ConfigManager.GetConfigData(ConfigName.RewardGroup,groupId)
|
||
if groupConfig then
|
||
LogError("掉落组显示:"..groupConfig.ShowItem[1][1])
|
||
--local pokemon=ConfigManager.GetConfigData(ConfigName.ShenBing,groupConfig.ShowItem[1][1])
|
||
-- if pokemon then
|
||
LogError("groupConfig.ShowItem[1][1]=="..groupConfig.ShowItem[1][1].." groupConfig.ShowItem[1][2]=="..groupConfig.ShowItem[1][2])
|
||
table.insert(allMaterials,{groupConfig.ShowItem[1][1],groupConfig.ShowItem[1][2]*selectChipNum})
|
||
--end
|
||
end
|
||
end
|
||
end
|
||
--显示分解界面
|
||
UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.PokemonRestore,allMaterials,function()
|
||
LogError("灵兽长度 "..#pokemonIds.."碎片id "..selectChipId.." num"..selectChipNum)
|
||
|
||
if isPokemon then
|
||
NetManager.RequestMagicSoldierSpilt(pokemonIds,function(msg)
|
||
UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1)
|
||
if pokemonIds and #pokemonIds>0 then
|
||
GodWeaponManager.RemoveWeaponData(pokemonIds)
|
||
end
|
||
selectChipId = 0
|
||
oldChoosed = nil
|
||
this.SortTypeClick(0,sortingOrder)
|
||
end)
|
||
else
|
||
local items={}
|
||
for key, value in pairs(allMaterials) do
|
||
LogError("key==="..value[1].." value=="..value[2])
|
||
table.insert(items,{itemId=value[1],itemNum=value[2]})
|
||
end
|
||
NetManager.UseAndPriceItemRequest(1,items,function (drop)
|
||
UIManager.OpenPanel(UIName.RewardItemPopup,drop)
|
||
end)
|
||
end
|
||
end,2)
|
||
end)
|
||
end
|
||
|
||
function this:AddListener()
|
||
end
|
||
|
||
function this:RemoveListener()
|
||
end
|
||
|
||
function this:OnShow(...)
|
||
local args={...}
|
||
|
||
|
||
LogError("显示神兵分解界面=======")
|
||
sortingOrder =0
|
||
this.chooseObjList = {}
|
||
this.SortTypeClick(0,sortingOrder,args[3],args[4])
|
||
end
|
||
|
||
--展示数据
|
||
function this.SortTypeClick(_sort,_sortType,isTop,isAni)
|
||
tabSortType=_sortType
|
||
selectHeroData={}
|
||
--所有灵兽数据
|
||
local items={}
|
||
local heros=GodWeaponManager.GetNoUpZhenWeapons()
|
||
if heros then
|
||
for i, v in pairs(heros) do
|
||
local hero={}
|
||
local heroConfig=v.config
|
||
if heroConfig then
|
||
hero.star=v.star
|
||
hero.lv=v.lv
|
||
hero.dynamicId=v.dynamicId
|
||
hero.ischip=0
|
||
hero.icon= GetResourcePath(heroConfig.Icon)
|
||
hero.id=v.id
|
||
hero.quality=heroConfig.Quality
|
||
hero.name=heroConfig.Name
|
||
hero.returnCoin=heroConfig.CoinReturn
|
||
hero.frame=GetHeroQuantityImageByquality(heroConfig.Quality)
|
||
hero.num=1
|
||
table.insert(items,hero)
|
||
end
|
||
end
|
||
end
|
||
|
||
--所有灵兽碎片
|
||
local chips=BagManager.GetDataByItemType(ItemType.GodWeaponChip)
|
||
LogError("#chips len=="..#chips)
|
||
if chips then
|
||
for i, v in pairs(chips) do
|
||
local chip={}
|
||
chip.star=0
|
||
chip.lv=0
|
||
chip.ischip=1
|
||
chip.frame=v.frame
|
||
chip.icon=v.icon
|
||
chip.id=v.id
|
||
chip.quality=v.quality
|
||
chip.num=v.num
|
||
chip.name=v.name
|
||
chip.returnCoin=0
|
||
chip.dynamicId=v.id
|
||
table.insert(items,chip)
|
||
end
|
||
end
|
||
heroDatas=items
|
||
LogError("heroDatas len=="..#heroDatas)
|
||
this.chipObj:SetActive(selectChipId~=0)
|
||
this.selectNumDes.gameObject:SetActive(selectChipId==0)
|
||
this.selectText.gameObject:SetActive(selectChipId==0)
|
||
this.selectText.text = "0/"..maxSelectNum
|
||
this.SortHeroDatas(heroDatas)
|
||
if oldChoosed then
|
||
oldChoosed:SetActive(false)
|
||
end
|
||
this.Empty:SetActive(#heroDatas <= 0)
|
||
this.ScrollView:SetData(heroDatas, function (index, go)
|
||
this.SingleHeroDataShow(go, heroDatas[index],false)
|
||
end,isTop,isAni)
|
||
end
|
||
|
||
--英雄单个数据展示
|
||
function this.SingleHeroDataShow(go,_heroData,isGray)
|
||
local heroData = _heroData
|
||
local _go = go
|
||
Util.GetGameObject(_go.transform, "frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite(heroData.frame)
|
||
if heroData.ischip==1 then
|
||
Util.GetGameObject(_go.transform, "lv"):SetActive(false)
|
||
Util.GetGameObject(_go.transform, "num"):SetActive(true)
|
||
Util.GetGameObject(_go.transform, "num"):GetComponent("Text").text = heroData.num
|
||
else
|
||
Util.GetGameObject(_go.transform, "lv"):SetActive(true)
|
||
Util.GetGameObject(_go.transform, "num"):SetActive(false)
|
||
Util.GetGameObject(_go.transform, "lv/Text"):GetComponent("Text").text = heroData.lv
|
||
end
|
||
|
||
Util.GetGameObject(_go.transform, "Text"):GetComponent("Text").text = SubString2(GetLanguageStrById(heroData.name),8)
|
||
Util.GetGameObject(_go.transform, "icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(heroData.icon)
|
||
local chipImg=Util.GetGameObject(_go.transform, "chipImg"):GetComponent("Image")
|
||
local formationMask =Util.GetGameObject(_go.transform, "mask")
|
||
formationMask:SetActive(false)
|
||
Util.GetGameObject(_go.transform, "mask/formationImage"):SetActive(false)
|
||
Util.GetGameObject(_go.transform, "mask/formationImage"):GetComponent("Image").sprite = this.spLoader:LoadSprite("t_tongyong-yishangzheng_zh")
|
||
if heroData.ischip==1 then
|
||
chipImg.gameObject:SetActive(true)
|
||
-- formationMask:SetActive(isGray)
|
||
chipImg.sprite=this.spLoader:LoadSprite(GetHeroChipQuantityImageByquality(heroData.quality))
|
||
else
|
||
chipImg.gameObject:SetActive(false)
|
||
-- formationMask:SetActive(false)
|
||
end
|
||
local starGrid = Util.GetGameObject(_go.transform, "star")
|
||
SetHeroStars(this.spLoader, starGrid, heroData.star,1,Vector2.New(32.5,32.5),-15)
|
||
local choosed =Util.GetGameObject(_go.transform, "choosed")
|
||
if heroData.ischip==1 then
|
||
choosed:SetActive(selectChipId==heroData.dynamicId)
|
||
else
|
||
choosed:SetActive(selectHeroData[heroData.dynamicId] ~= nil)
|
||
this.chooseObjList[heroData.dynamicId] = choosed
|
||
end
|
||
local cardclickBtn = Util.GetGameObject(_go.transform, "icon")
|
||
this.selectText.text = LengthOfTable(selectHeroData).."/"..maxSelectNum
|
||
Util.AddOnceClick(cardclickBtn, function()
|
||
--如果点击的是碎片
|
||
if heroData.ischip==1 then
|
||
--第一个选中的碎片
|
||
if oldChoosed==nil then
|
||
this.selectText.gameObject:SetActive(false)
|
||
this.chipObj:SetActive(true)
|
||
choosed:SetActive(true)
|
||
oldChoosed=choosed
|
||
else
|
||
--如果选中之前选中的,就取消选中
|
||
if oldChoosed==choosed then
|
||
oldChoosed=nil
|
||
selectChipId=0
|
||
choosed:SetActive(false)
|
||
this.selectText.gameObject:SetActive(true)
|
||
this.selectText.text = "0".."/"..maxSelectNum
|
||
this.chipObj:SetActive(false)
|
||
return
|
||
else
|
||
oldChoosed:SetActive(false)
|
||
choosed:SetActive(true)
|
||
oldChoosed=choosed
|
||
end
|
||
end
|
||
selectChipId=heroData.dynamicId
|
||
Util.SetGray(this.btn_add,true)
|
||
selectChipNum=heroData.num
|
||
maxChipNum=heroData.num
|
||
this.chipNumTxt.text=selectChipNum
|
||
isPokemon=false
|
||
--如果选中灵兽,则取消灵兽选择
|
||
if LengthOfTable(selectHeroData) > 0 then
|
||
for k,v in pairs(selectHeroData) do
|
||
selectHeroData[k] = nil
|
||
this.chooseObjList[k]:SetActive(false)
|
||
end
|
||
end
|
||
else--点击的是灵兽
|
||
--取消碎片选中
|
||
selectChipId=0
|
||
selectChipNum=0
|
||
if oldChoosed then
|
||
oldChoosed:SetActive(false)
|
||
oldChoosed=nil
|
||
end
|
||
--如果灵兽是选中状态,取消选中
|
||
if selectHeroData[heroData.dynamicId] then
|
||
choosed:SetActive(false)
|
||
selectHeroData[heroData.dynamicId] = nil
|
||
local haveNum=LengthOfTable(selectHeroData)
|
||
this.selectText.text = haveNum.."/"..maxSelectNum
|
||
if haveNum==0 then
|
||
-- --todo 取消所有碎片置灰
|
||
this.ScrollView:SetData(heroDatas, function (index, go)
|
||
this.SingleHeroDataShow(go, heroDatas[index],false)
|
||
end,true,true)
|
||
isPokemon=false
|
||
end
|
||
return
|
||
end
|
||
--如果选中灵兽的数量为最大
|
||
if LengthOfTable(selectHeroData)>=maxSelectNum then
|
||
PopupTipPanel.ShowTip(string.format(Language[11747],maxSelectNum))
|
||
return
|
||
end
|
||
--否则就是正常选择
|
||
choosed:SetActive(true)
|
||
selectHeroData[heroData.dynamicId]=heroData
|
||
this.selectText.text = LengthOfTable(selectHeroData).."/"..maxSelectNum
|
||
if isPokemon==false then
|
||
--todo 首次点击灵兽,置灰所有碎片
|
||
this.ScrollView:SetData(heroDatas, function (index, go)
|
||
this.SingleHeroDataShow(go, heroDatas[index],true)
|
||
end,true,true)
|
||
this.selectText.gameObject:SetActive(true)
|
||
this.selectNumDes.gameObject:SetActive(true)
|
||
this.chipObj:SetActive(false)
|
||
isPokemon = true
|
||
end
|
||
end
|
||
-- LogGreen("selectChipId:"..tostring(selectChipId).." isPokemon:"..tostring(isPokemon))
|
||
this.selectText.gameObject:SetActive(isPokemon)
|
||
this.selectNumDes.gameObject:SetActive(isPokemon)
|
||
this.chipObj:SetActive(not isPokemon)
|
||
end)
|
||
|
||
--灰色遮罩点击
|
||
-- Util.AddOnceClick(formationMask, function()
|
||
-- PopupTipPanel.ShowTip(Language[11748])
|
||
-- end)
|
||
end
|
||
--英雄排序
|
||
function this.SortHeroDatas(_heroDatas)
|
||
--上阵最优先,星级优先,同星级等级优先,同星级同等级按sortId排序。排序时降序排序。
|
||
table.sort(_heroDatas, function(a, b)
|
||
if a ==nil or b == nil then
|
||
return
|
||
end
|
||
if a.ischip==b.ischip then
|
||
if a.quality ==b.quality then
|
||
if a.star == b.star then
|
||
if a.lv == b.lv then
|
||
return a.id > b.id
|
||
else
|
||
return a.lv < b.lv
|
||
end
|
||
else
|
||
return a.star < b.star
|
||
end
|
||
else
|
||
return a.quality < b.quality
|
||
end
|
||
else
|
||
return a.ischip<b.ischip
|
||
end
|
||
end)
|
||
end
|
||
|
||
function this:OnClose()
|
||
selectChipId=0
|
||
selectHeroData={}
|
||
isPokemon=false
|
||
oldChoosed=nil
|
||
this.chooseObjList = {}
|
||
end
|
||
|
||
function this:OnDestroy()
|
||
this.spLoader:Destroy()
|
||
end
|
||
|
||
return this
|
||
|