miduo_client/Assets/ManagedResources/~Lua/Modules/Resolve/View/Resolve_GodWeapon.lua

459 lines
18 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

----- 献祭 -----
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