miduo_client/Assets/ManagedResources/~Lua/Modules/RoleInfo/TrainingItemListPanel.lua

560 lines
26 KiB
Lua

require("Base/BasePanel")
TrainingItemListPanel = Inherit(BasePanel)
local this = TrainingItemListPanel
local curSelectItemOrHeroList={}
local heroOrItemDataList={}
local curNeedRoleNum=1
local openThisPanel
local curData = {}
local openType=0
local currentSelectItems={}
local currentSelectItem={}
local curSelectGO
local sendFunc=nil
local openPanel=nil
--初始化组件(用于子类重写)
function TrainingItemListPanel:InitComponent()
this.spLoader = SpriteLoader.New()
curSelectGO=nil
this.BtnBack = Util.GetGameObject(self.gameObject, "btnBack")
this.mask = Util.GetGameObject(self.gameObject, "mask")
this.BtnSure = Util.GetGameObject(self.gameObject, "btnSure")
this.BtnSure:SetActive(true)
this.btnAutoSelect = Util.GetGameObject(self.gameObject, "btnAutoSelect")
this.cardPre = Util.GetGameObject(self.gameObject, "item")
--this.grid = Util.GetGameObject(self.gameObject, "scroll/grid")
local v = Util.GetGameObject(self.gameObject, "scroll"):GetComponent("RectTransform").rect
--LogGreen("v.width:".. v.width.." v.height:"..v.height)
this.Scrollbar= Util.GetGameObject(self.gameObject, "Scrollbar"):GetComponent("Scrollbar")
this.ScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView,Util.GetGameObject(self.gameObject, "scroll").transform,
this.cardPre, this.Scrollbar, Vector2.New(v.width, v.height), 1, 5, Vector2.New(19.32,40))
this.ScrollView.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(6.78, 27)
this.ScrollView.gameObject:GetComponent("RectTransform").anchorMin = Vector2.New(0.5, 0.5)
this.ScrollView.gameObject:GetComponent("RectTransform").anchorMax = Vector2.New(0.5, 0.5)
this.ScrollView.moveTween.MomentumAmount = 1
this.ScrollView.moveTween.Strength = 1
this.NoneImage= Util.GetGameObject(self.gameObject, "NoneImage")
this.NoneImage.gameObject:SetActive(false)
end
--绑定事件(用于子类重写)
function TrainingItemListPanel:BindEvent()
Util.AddClick(this.BtnBack, function()
PlaySoundWithoutClick(SoundConfig.Sound_UICancel)
self:ClosePanel()
end)
Util.AddClick(this.mask, function()
PlaySoundWithoutClick(SoundConfig.Sound_UICancel)
self:ClosePanel()
end)
Util.AddClick(this.BtnSure, function()
if sendFunc then
sendFunc(currentSelectItems,curSelectItemOrHeroList)
-- openPanel:UpdateUpStarPosHeroData(cu)
self:ClosePanel()
end
end)
-- Util.AddClick(this.btnAutoSelect, function()
-- self:AutoSelectHero()
-- end)
end
--添加事件监听(用于子类重写)
function TrainingItemListPanel:AddListener()
end
--移除事件监听(用于子类重写)
function TrainingItemListPanel:RemoveListener()
end
--界面打开时调用(用于子类重写)
function TrainingItemListPanel:OnOpen(_curData,_func,NeedNum,selectItems1,selectItems2,_openPanel)
sendFunc=_func
openPanel=_openPanel
curSelectItemOrHeroList={}
currentSelectItems={}
curNeedRoleNum=NeedNum
heroOrItemDataList={}
for i = 1, #selectItems1 do
-- curSelectHeroList[_curSelectHeroList[i]]=_curSelectHeroList[i]
table.insert(currentSelectItems,selectItems1[i])
end
for i = 1, #selectItems2 do
-- curSelectHeroList[_curSelectHeroList[i]]=_curSelectHeroList[i]
table.insert(curSelectItemOrHeroList,selectItems2[i])
end
-- print(#_curSelectHeroList)
-- for i = 1, #_curSelectHeroList do
-- -- curSelectHeroList[_curSelectHeroList[i]]=_curSelectHeroList[i]
-- table.insert(curSelectHeroList,_curSelectHeroList[i])
-- end
curData = _curData
-- heroDataList = heroData
if _curData.type==1 then
local itemDatas = BagManager.GetBagItemDataByItemTypeV3(_curData.data[2],_curData.data[1],_curData.data[3])
local index =0
for i=1,#itemDatas do
local haveNum = BagManager.GetItemCountById(itemDatas[i].id)
if haveNum > 0 then
for j = 1+index, haveNum +index do
local v = {}
v.id = itemDatas[i].id
v.itemData= itemDatas[i]
v.index = j--用于祭品选择界面 查看是否选中
table.insert(heroOrItemDataList,v)
end
end
index=haveNum
-- heroOrItemDataList[i]=itemDatas[i]
end
elseif _curData.type==3 then
local pokemonList = PokemonManager.GetPokemonDatas()
local index=0
for i=1,#pokemonList do
local v={}
v.dynamicId=pokemonList[i].dynamicId
v.pokemonData=pokemonList[i]
v.type=3
v.index = i--用于祭品选择界面 查看是否选中
v.star=v.star
v.lv=v.lv
local config=pokemonList[i].config
v.ischip=0
v.icon= GetResourcePath(config.Icon)
v.id=v.id
v.quality=config.Quality
v.name=config.Name
v.returnCoin=config.CoinReturn
v.frame=GetHeroQuantityImageByquality(config.Quality)
v.num=1
table.insert(heroOrItemDataList,v)
-- heroOrItemDataList[i]=itemDatas[i]
end
elseif _curData.type == 4 then
local pokemonList = GodWeaponManager.GetNoUpZhenWeapons()
local index=0
for i=1,#pokemonList do
local v={}
v.dynamicId=pokemonList[i].dynamicId
v.pokemonData=pokemonList[i]
v.type=4
v.index = i--用于祭品选择界面 查看是否选中
v.star=pokemonList[i].star
v.lv=pokemonList[i].lv
local config=pokemonList[i].config
v.ischip=0
v.icon= GetResourcePath(config.Icon)
--LogError("v.id========================================="..v.id)
v.id=pokemonList[i].id
v.quality=config.Quality
v.name=config.Name
v.returnCoin=config.CoinReturn
v.frame=GetHeroQuantityImageByquality(config.Quality)
v.num=1
table.insert(heroOrItemDataList,v)
end
else
local titemDatas={}
if _curData.NeedHeroOther ~=0 then
local itemId = _curData.NeedHeroOther
local haveNum = BagManager.GetItemCountById(itemId)
if haveNum > 0 then
for i = 1, haveNum do
local v = {}
v.id = itemId
v.type = 2--1道具 2 英雄 需要传给后端
v.index = i--用于祭品选择界面 查看是否选中
table.insert(titemDatas,v)
end
end
end
if #titemDatas>0 then
local HeroDatas=HeroManager.GetAllNumStarData(curData.heroGroupData[1])
for i=1 ,#titemDatas do
heroOrItemDataList[i]=titemDatas[i]
end
local index=#titemDatas
for i=1+index,#HeroDatas+index do
heroOrItemDataList[i]=HeroDatas[i-index]
heroOrItemDataList[i].type=1
end
else
local HeroDatas=HeroManager.GetAllNumStarData(curData.heroGroupData[1])
for i=1,#HeroDatas do
heroOrItemDataList[i]=HeroDatas[i]
heroOrItemDataList[i].type=1
end
end
end
this.ScrollView:SetData(heroOrItemDataList, function (index, go)
this.OnShowSingleCardData(go, heroOrItemDataList[index])
end,false,false)
end
function this.OnClickEnterHero(go,heroData,type)
-- this.OnShowSingleCardData(go,heroData,type)
end
function this.OnShowSingleCardData(go,heroData)--isSelect 1选择 2 没选择
local choosed = Util.GetGameObject(go.transform, "choosed")
choosed:SetActive(false)
local frame = Util.GetGameObject(go.transform, "frame"):GetComponent("Image")
local lvGo = Util.GetGameObject(go.transform, "lv"):GetComponent("Text")
local icon = Util.GetGameObject(go.transform, "icon"):GetComponent("Image")
local name = Util.GetGameObject(go.transform, "name"):GetComponent("Text")
local formationMask = Util.GetGameObject(go.transform, "formationMask")
-- local formationImage = Util.GetGameObject(formationMask.transform, "formationImage")
-- local lockImage = Util.GetGameObject(formationMask.transform, "lockImage")
-- local noumenon = Util.GetGameObject(go, "noumenon")
-- local starGrid = Util.GetGameObject(go.transform, "star")
local cardBtn = Util.GetGameObject(go.transform, "icon")
if curData.type==2 then
-- icon.sprite = this.spLoader:LoadSprite(heroData.icon)
local choosed = Util.GetGameObject(go.transform, "choosed")
choosed:SetActive(false)
-- if curSelectHeroList[heroData.dynamicId] then
-- curSelectHeroList[heroData.dynamicId]=heroData
-- choosed:SetActive(true)
-- end
for i = 1, #curSelectItemOrHeroList do
if curSelectItemOrHeroList[i].type == RoleUpStarMatType.hero then
if curSelectItemOrHeroList[i].dynamicId == heroData.dynamicId then
choosed:SetActive(true)
end
elseif curSelectItemOrHeroList[i].type == RoleUpStarMatType.item then
if curSelectItemOrHeroList[i].id == heroData.id and curSelectItemOrHeroList[i].index == heroData.index then
choosed:SetActive(true)
end
end
end
Util.GetGameObject(go.transform, "posIcon"):SetActive(false)
local frame = Util.GetGameObject(go.transform, "frame"):GetComponent("Image")
local lvGo = Util.GetGameObject(go.transform, "lv")
local icon = Util.GetGameObject(go.transform, "icon"):GetComponent("Image")
local proIcon = Util.GetGameObject(go.transform, "proIcon")
local name = Util.GetGameObject(go.transform, "name"):GetComponent("Text")
local formationMask = Util.GetGameObject(go.transform, "formationMask")
local formationImage = Util.GetGameObject(formationMask.transform, "formationImage")
local lockImage = Util.GetGameObject(formationMask.transform, "lockImage")
local noumenon = Util.GetGameObject(go, "noumenon")
local starGrid = Util.GetGameObject(go.transform, "star")
local cardBtn = Util.GetGameObject(go.transform, "icon")
local GongMingMask = Util.GetGameObject(go.transform, "GongMingMask")
if heroData.type == RoleUpStarMatType.hero then
frame.sprite = this.spLoader:LoadSprite(GetHeroQuantityImageByquality(heroData.heroConfig.Quality,heroData.star))
lvGo:SetActive(true)
lvGo:GetComponent("Text").text = heroData.lv
icon.sprite = this.spLoader:LoadSprite(heroData.icon)
proIcon:GetComponent("Image").sprite = this.spLoader:LoadSprite(GetProStrImageByProNum(heroData.changeProId))
formationMask:SetActive((heroData.isFormation ~=nil and heroData.isFormation ~= "" and heroData.isFormation ~= Language[10410]) or heroData.lockState == 1)
formationImage:SetActive(heroData.isFormation ~=nil and heroData.isFormation ~= "" )
lockImage:SetActive( heroData.lockState == 1)
--noumenon:SetActive( heroData.id == curHeroData.id )
name.text = SubString2(GetLanguageStrById(heroData.heroConfig.ReadingName),8)
local star,starType = heroData.GetStar(1)
SetHeroStars(this.spLoader, starGrid, star,starType,nil,nil,Vector2.New(0,1))
LogError("hero star=="..star)
-- local effect=SetHeroFlyEffect(go,this.spLoader,heroData.star,this.sortingOrder+1,1)
-- if effect then
-- local particles=effect:GetComponentsInChildren(typeof(UnityEngine.ParticleSystem))
-- for key, value in pairs(particles:ToTable()) do
-- local mat=value:GetComponent(typeof(UnityEngine.Renderer))
-- if mat.material.shader.name=="YXZ/Effect/Mix Masking(Without Moving)_alphablend" then
-- mat.material.shader=poolManager:LoadAsset("YXZ_MixMaskingWithoutMoving_alphablend_1",poolManager.AssetType.Other)
-- end
-- end
-- end
Util.SetParticleSortLayer(starGrid,this.sortingOrder + 1)
GongMingMask:SetActive(false)--最后检测是否共鸣
if heroData.lockState == 1 or (heroData.isFormation ~= "" and heroData.isFormation ~= Language[10410]) then
else
if HarmonyManager.IsChangeColor(heroData.dynamicId) then
Util.GetGameObject(go.transform, "lv/Text"):GetComponent("Text").text = "<color=#0f0>"..heroData.lv.."</color>"
GongMingMask:SetActive(true)
elseif HarmonyManager:IsEnvoy(heroData.dynamicId) and HarmonyManager.GetSingleAdditionsData(HarmonyAddType.AddLv) then
if HarmonyManager.GetSingleAdditionsData(HarmonyAddType.AddLv).heroTid == 0 then
-- body
Util.GetGameObject(go.transform, "lv/Text"):GetComponent("Text").text = "<color=#ffbe22>"..heroData.lv.."</color>"
GongMingMask:SetActive(true)
end
end
end
Util.AddOnceClick(GongMingMask, function()
PopupTipPanel.ShowTip(Language[12184])
end)
Util.AddOnceClick(cardBtn, function()
local isSelect = false
local selectIndex = 0
for i = 1, #curSelectItemOrHeroList do
if curSelectItemOrHeroList[i].type == RoleUpStarMatType.hero then
if curSelectItemOrHeroList[i].dynamicId == heroData.dynamicId then
isSelect = true
selectIndex = i
end
end
end
if isSelect then
choosed:SetActive(false)
-- curSelectHeroList[heroData.dynamicId]=nil
table.remove(curSelectItemOrHeroList,selectIndex)
-- this.numText.text=string.format("%s/%s",LengthOfTable(curSelectItemOrHeroList),curNeedRoleNum)
return
end
if LengthOfTable(curSelectItemOrHeroList)>=curNeedRoleNum then
PopupTipPanel.ShowTip(Language[10403])
return
end
-- curSelectHeroList[heroData.dynamicId]=heroData
table.insert(curSelectItemOrHeroList,heroData)
choosed:SetActive(true)
-- this.numText.text=string.format("%s/%s",LengthOfTable(currentSelectItems),curNeedRoleNum)
end)
Util.AddOnceClick(formationMask, function()
if heroData.isFormation ~= "" then
PopupTipPanel.ShowTip( heroData.isFormation)
return
end
if heroData.lockState == 1 then
PopupTipPanel.ShowTip(Language[10413])
return
end
end)
Util.AddLongPressClick(cardBtn, function()
UIManager.OpenPanel(UIName.RoleInfoPopup,heroData)
end, 0.5)
elseif heroData.type == RoleUpStarMatType.item then
LogError("22222222222")
local itemConfig = ConfigManager.TryGetConfigData(ConfigName.ItemConfig,heroData.id)
if not itemConfig then return end
frame.sprite = this.spLoader:LoadSprite(GetHeroQuantityImageByquality(itemConfig.Quantity,itemConfig.HeroStar[1]))
lvGo:SetActive(false)
icon.sprite = this.spLoader:LoadSprite(GetResourcePath(itemConfig.ResourceID))
if itemConfig.PropertyName and itemConfig.PropertyName > 0 then
proIcon:SetActive(true)
proIcon:GetComponent("Image").sprite = this.spLoader:LoadSprite(GetProStrImageByProNum(itemConfig.PropertyName))
else
proIcon:SetActive(false)
end
formationMask:SetActive(false)
formationImage:SetActive(false)
lockImage:SetActive(false)
noumenon:SetActive(false)
GongMingMask:SetActive(false)
name.text = SubString2(GetLanguageStrById(itemConfig.Name),8)
SetHeroStars(this.spLoader,starGrid, itemConfig.HeroStar[1] or 6,1,nil,nil,Vector2.New(0,1))
local effect=SetHeroFlyEffect(go,this.spLoader,itemConfig.HeroStar[1] or 6,this.sortingOrder+1,1)
if effect then
local particles=effect:GetComponentsInChildren(typeof(UnityEngine.ParticleSystem))
for key, value in pairs(particles:ToTable()) do
local mat=value:GetComponent(typeof(UnityEngine.Renderer))
if mat.material.shader.name=="YXZ/Effect/Mix Masking(Without Moving)_alphablend" then
mat.material.shader=poolManager:LoadAsset("YXZ_MixMaskingWithoutMoving_alphablend_1",poolManager.AssetType.Other)
end
end
end
Util.SetParticleSortLayer(starGrid,this.sortingOrder + 1)
Util.AddOnceClick(cardBtn, function()
local isSelect = false
local selectIndex = 0
for i = 1, #curSelectItemOrHeroList do
if curSelectItemOrHeroList[i].type == RoleUpStarMatType.item then
if curSelectItemOrHeroList[i].id == heroData.id and curSelectItemOrHeroList[i].index == heroData.index then
isSelect = true
selectIndex = i
choosed:SetActive(true)
end
end
end
if isSelect then
choosed:SetActive(false)
-- curSelectHeroList[heroData.dynamicId]=nil
table.remove(curSelectItemOrHeroList,selectIndex)
-- this.numText.text=string.format("%s/%s",LengthOfTable(curSelectItemOrHeroList),curNeedRoleNum)
return
end
if LengthOfTable(curSelectItemOrHeroList)>=curNeedRoleNum then
PopupTipPanel.ShowTip(Language[10403])
return
end
-- curSelectHeroList[heroData.dynamicId]=heroData
table.insert(curSelectItemOrHeroList,heroData)
choosed:SetActive(true)
-- this.numText.text=string.format("%s/%s",LengthOfTable(curSelectItemOrHeroList),curNeedRoleNum)
end)
Util.AddLongPressClick(cardBtn, function()
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, heroData.id)
end, 0.5)
end
elseif curData.type==3 or curData.type==4 then
local choosed = Util.GetGameObject(go.transform, "choosed")
choosed:SetActive(false)
-- if curSelectHeroList[heroData.dynamicId] then
-- curSelectHeroList[heroData.dynamicId]=heroData
-- choosed:SetActive(true)
-- end
for i = 1, #currentSelectItems do
if currentSelectItems[i].dynamicId == heroData.dynamicId then
choosed:SetActive(true)
end
end
Util.GetGameObject(go.transform, "posIcon"):SetActive(false)
local frame = Util.GetGameObject(go.transform, "frame"):GetComponent("Image")
local lvGo = Util.GetGameObject(go.transform, "lv")
local icon = Util.GetGameObject(go.transform, "icon"):GetComponent("Image")
local proIcon = Util.GetGameObject(go.transform, "proIcon")
local name = Util.GetGameObject(go.transform, "name"):GetComponent("Text")
local formationMask = Util.GetGameObject(go.transform, "formationMask")
local formationImage = Util.GetGameObject(formationMask.transform, "formationImage")
local lockImage = Util.GetGameObject(formationMask.transform, "lockImage")
local noumenon = Util.GetGameObject(go, "noumenon")
local starGrid = Util.GetGameObject(go.transform, "star")
starGrid.transform.position=Vector3.New(-60,-60,0)
local cardBtn = Util.GetGameObject(go.transform, "icon")
local GongMingMask = Util.GetGameObject(go.transform, "GongMingMask")
frame.sprite = this.spLoader:LoadSprite(GetHeroQuantityImageByquality(heroData.pokemonData.config.Quality,heroData.star))
lvGo:SetActive(true)
lvGo:GetComponent("Text").text = heroData.lv
icon.sprite = this.spLoader:LoadSprite(heroData.icon)
proIcon:GetComponent("Image").sprite = this.spLoader:LoadSprite(GetProStrImageByProNum(heroData.changeProId))
formationMask:SetActive((heroData.isFormation ~=nil and heroData.isFormation ~= "" and heroData.isFormation ~= Language[10410]) or heroData.lockState == 1)
formationImage:SetActive(heroData.isFormation ~=nil and heroData.isFormation ~= "" )
lockImage:SetActive( heroData.lockState == 1)
--noumenon:SetActive( heroData.id == curHeroData.id )
name.text = SubString2(GetLanguageStrById(heroData.name),8)
local star = heroData.pokemonData.star
local starSize=Vector2.New(32.5,32.5)
if star>5 then
star=star+5
starSize = Vector2.New(1,-13)
end
SetHeroStars(this.spLoader, starGrid, star,1,starSize,-15)
Util.SetParticleSortLayer(starGrid,this.sortingOrder + 1)
GongMingMask:SetActive(false)--最后检测是否共鸣
Util.AddOnceClick(cardBtn, function()
local isSelect = false
local selectIndex = 0
for i = 1, #currentSelectItems do
if currentSelectItems[i].dynamicId == heroData.dynamicId then
isSelect = true
selectIndex = i
end
end
if isSelect then
choosed:SetActive(false)
-- curSelectHeroList[heroData.dynamicId]=nil
table.remove(currentSelectItems,selectIndex)
-- this.numText.text=string.format("%s/%s",LengthOfTable(curSelectItemOrHeroList),curNeedRoleNum)
return
end
if LengthOfTable(currentSelectItems)>=curNeedRoleNum then
PopupTipPanel.ShowTip(Language[10403])
return
end
-- curSelectHeroList[heroData.dynamicId]=heroData
table.insert(currentSelectItems,heroData)
choosed:SetActive(true)
-- this.numText.text=string.format("%s/%s",LengthOfTable(currentSelectItems),curNeedRoleNum)
end)
Util.AddOnceClick(formationMask, function()
if heroData.isFormation ~= "" then
PopupTipPanel.ShowTip( heroData.isFormation)
return
end
if heroData.lockState == 1 then
PopupTipPanel.ShowTip(Language[10413])
return
end
end)
Util.AddLongPressClick(cardBtn, function()
--UIManager.OpenPanel(UIName.RoleInfoPopup,heroData)
end, 0.5)
else
for i = 1, #currentSelectItems do
if currentSelectItems[i].itemData.id == heroData.itemData.id and currentSelectItems[i].index == heroData.index then
choosed:SetActive(true)
end
end
icon.sprite = this.spLoader:LoadSprite(heroData.itemData.icon)
local proIcon = Util.GetGameObject(go.transform, "proIcon")
proIcon:SetActive(false)
lvGo.gameObject:SetActive(true)
lvGo.text=heroData.index
name.text = heroData.itemData.name
frame.sprite = this.spLoader:LoadSprite(heroData.itemData.frame)
local isSelect = CheckListIsContainValue1(curSelectItemOrHeroList,heroData.itemData.did)
Util.AddOnceClick(cardBtn, function()
local isSelect = false
local selectIndex = 0
for i = 1, #currentSelectItems do
if currentSelectItems[i].index == heroData.index then
isSelect = true
selectIndex = i
end
end
if isSelect then
choosed:SetActive(false)
-- curSelectHeroList[heroData.dynamicId]=nil
table.remove(currentSelectItems,selectIndex)
-- this.numText.text=string.format("%s/%s",LengthOfTable(currentSelectItems),curNeedRoleNum)
return
end
if LengthOfTable(currentSelectItems)>=curNeedRoleNum then
PopupTipPanel.ShowTip(Language[10403])
return
end
-- curSelectHeroList[heroData.dynamicId]=heroData
table.insert(currentSelectItems,heroData)
choosed:SetActive(true)
-- this.numText.text=string.format("%s/%s",LengthOfTable(currentSelectItems),curNeedRoleNum)
end)
end
end
--界面关闭时调用(用于子类重写)
function TrainingItemListPanel:OnClose()
end
--界面销毁时调用(用于子类重写)
function TrainingItemListPanel:OnDestroy()
this.spLoader:Destroy()
sendFunc=nil
heroOrItemDataList={}
currentSelectItem=nil
this.ScrollView = nil
end
return TrainingItemListPanel