338 lines
15 KiB
Lua
338 lines
15 KiB
Lua
----- 回溯 -----
|
||
local this = {}
|
||
local sortType = 0
|
||
local sortingOrder = 0
|
||
local tarHero = {} --当前筛选后显示英雄列表
|
||
local selectHeroData = {} --选择的英雄list did = data
|
||
local oldChoosed = nil --上一个选中英雄
|
||
local heroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig)
|
||
local heroRankupConfig = ConfigManager.GetConfig(ConfigName.HeroRankupConfig)
|
||
|
||
local costItemId = 0
|
||
|
||
function this:InitComponent(gameObject)
|
||
this.spLoader = SpriteLoader.New()
|
||
this.helpBtn = Util.GetGameObject(gameObject, "Content/Resolve_Recall/HelpBtn")
|
||
this.helpPos = this.helpBtn:GetComponent("RectTransform").localPosition
|
||
this.confirmBtn = Util.GetGameObject(gameObject, "Content/Resolve_Recall/ConfirmBtn")
|
||
--道具数量信息
|
||
this.usePropIcon = Util.GetGameObject(gameObject, "Content/Resolve_Recall/UseProps/Icon"):GetComponent("Image")
|
||
this.usePropInfo = Util.GetGameObject(gameObject, "Content/Resolve_Recall/UseProps/Info"):GetComponent("Text")
|
||
this.empty = Util.GetGameObject(gameObject, "Content/Resolve_Recall/Empty")
|
||
|
||
this.cardPre = Util.GetGameObject(gameObject, "item")
|
||
this.scrollbar = Util.GetGameObject(gameObject, "Content/Resolve_Recall/Scrollbar"):GetComponent("Scrollbar")
|
||
local v21 = Util.GetGameObject(gameObject, "Content/Resolve_Recall/ItemListRoot"):GetComponent("RectTransform").rect
|
||
this.ScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView,
|
||
Util.GetGameObject(gameObject, "Content/Resolve_Recall/ItemListRoot").transform,
|
||
this.cardPre, this.scrollbar, Vector2.New(v21.width, v21.height), 1, 5, Vector2.New(43, 15))
|
||
this.ScrollView.moveTween.MomentumAmount = 1
|
||
this.ScrollView.moveTween.Strength = 1
|
||
Util.GetGameObject(this.confirmBtn, "Image"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
|
||
"guiyuananniu_zh")
|
||
end
|
||
|
||
function this:BindEvent()
|
||
Util.AddClick(this.helpBtn, function()
|
||
UIManager.OpenPanel(UIName.HelpPopup, HELP_TYPE.Resolve_Recall, this.helpPos.x, this.helpPos.y)
|
||
end)
|
||
Util.AddClick(this.confirmBtn, function()
|
||
if tonumber(LengthOfTable(selectHeroData)) == 0 then
|
||
PopupTipPanel.ShowTip(Language[12558])
|
||
else
|
||
if BagManager.GetItemCountById(costItemId) == 0 then
|
||
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, costItemId)
|
||
return
|
||
end
|
||
UIManager.OpenPanel(UIName.GeneralPopup, GENERAL_POPUP_TYPE.ResolveRecall,
|
||
HeroManager.GetHeroReturnItems(selectHeroData, GENERAL_POPUP_TYPE.ResolveRecall), selectHeroData)
|
||
end
|
||
end)
|
||
end
|
||
|
||
function this:AddListener()
|
||
end
|
||
|
||
function this:RemoveListener()
|
||
end
|
||
|
||
function this:OnShow(...)
|
||
local args = { ... }
|
||
sortingOrder = args[1]
|
||
sortType = PlayerManager.now_index or 0
|
||
|
||
--LogGreen(PlayerManager.now_index)
|
||
this.SortTypeClick(sortingOrder, sortType, args[3], args[4])
|
||
end
|
||
|
||
function this:OnClose()
|
||
selectHeroData = {}
|
||
oldChoosed = nil
|
||
end
|
||
|
||
function this:OnDestroy()
|
||
this.spLoader:Destroy()
|
||
end
|
||
|
||
--展示数据
|
||
function this.SortTypeClick(_sort, _sortType, isTop, isAni)
|
||
selectHeroData = {}
|
||
|
||
tarHero = {}
|
||
tarHero = this.GetHeroData(_sortType)
|
||
--设置empty
|
||
this.empty:SetActive(#tarHero == 0)
|
||
--设置回溯按钮置灰
|
||
--Util.SetGray(this.confirmBtn,tonumber(LengthOfTable(selectHeroData))==0)
|
||
this.usePropIcon.gameObject:SetActive(tonumber(LengthOfTable(selectHeroData)) ~= 0)
|
||
this.usePropInfo.enabled = tonumber(LengthOfTable(selectHeroData)) == 0
|
||
this.usePropInfo.alignment = GetCurLanguage() ~= 2 and "MiddleCenter" or "MiddleRight"
|
||
this.usePropInfo.text = Language[12631]
|
||
this.usePropInfo.fontSize = 25
|
||
|
||
--设置英雄显示
|
||
this.SortHeroDatas(tarHero)
|
||
this.ScrollView:SetData(tarHero, function(index, go)
|
||
this.SingleHeroDataShow(go, tarHero[index])
|
||
end, isTop, isAni)
|
||
-- 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.GetHeroData(_sortType)
|
||
local tempHeros = {}
|
||
local data = HeroManager.GetAllHeroDataMsinusUpWar(_sortType, 1)
|
||
for n = 1, #data do
|
||
tempHeros[#tempHeros + 1] = data[n]
|
||
end
|
||
--根据元素筛选
|
||
local heros = {}
|
||
if tempHeros and LengthOfTable(tempHeros) > 0 then
|
||
for i, v in pairs(tempHeros) do
|
||
if _sortType == 0 then
|
||
table.insert(heros, v)
|
||
-- elseif _sortType>=7 then
|
||
-- if v.star==_sortType-4 then
|
||
-- table.insert(heros,v)
|
||
-- end
|
||
else
|
||
if v.property == _sortType then
|
||
table.insert(heros, v)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
--end
|
||
return heros
|
||
end
|
||
|
||
--英雄单个数据展示
|
||
function this.SingleHeroDataShow(go, _heroData)
|
||
local heroData = _heroData
|
||
local _go = go
|
||
Util.GetGameObject(_go.transform, "frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
|
||
GetHeroQuantityImageByquality(heroData.heroConfig.Quality, heroData.star))
|
||
Util.GetGameObject(_go.transform, "lv/Text"):GetComponent("Text").text = heroData.lv
|
||
Util.GetGameObject(_go.transform, "Text"):GetComponent("Text").text = SubString2(
|
||
GetLanguageStrById(heroData.heroConfig.ReadingName), 8)
|
||
Util.GetGameObject(_go.transform, "icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(heroData.icon)
|
||
Util.GetGameObject(_go.transform, "posIcon"):SetActive(false) --:GetComponent("Image").sprite = this.spLoader:LoadSprite(heroData.professionIcon)
|
||
Util.GetGameObject(_go.transform, "proIcon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
|
||
GetProStrImageByProNum(heroData.changeProId))
|
||
--Util.GetGameObject(_go.transform, "heroStage"):GetComponent("Image").sprite = this.spLoader:LoadSprite(HeroStageSprite[heroData.heroConfig.HeroStage])
|
||
local starGrid = Util.GetGameObject(_go.transform, "star")
|
||
local star, starType = heroData.GetStar(1)
|
||
local starScale = -15
|
||
if starType == 3 then
|
||
starScale = -13
|
||
end
|
||
SetHeroStars(this.spLoader, starGrid, star, starType, nil, starScale)
|
||
Util.SetParticleSortLayer(starGrid, sortingOrder + 1)
|
||
local choosed = Util.GetGameObject(_go.transform, "choosed")
|
||
local formationMask = Util.GetGameObject(_go.transform, "formationMask")
|
||
Util.GetGameObject(_go.transform, "formationMask/formationImage/upImage"):GetComponent("Image").sprite = this
|
||
.spLoader:LoadSprite("t_tongyong-yishangzheng_zh")
|
||
formationMask:SetActive(heroData.isFormation ~= "")
|
||
local lockMask = Util.GetGameObject(_go.transform, "lockMask")
|
||
lockMask:SetActive(heroData.lockState == 1)
|
||
choosed:SetActive(selectHeroData[heroData.dynamicId] ~= nil)
|
||
local cardclickBtn = Util.GetGameObject(_go.transform, "icon")
|
||
local GongMingMask = Util.GetGameObject(_go.transform, "GongMingMask")
|
||
GongMingMask:SetActive(false) --最后检测是否共鸣
|
||
if heroData.lockState == 1 or (heroData.isFormation ~= "") 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:HongMengTowerUpLimit() ~= 0 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[10477])
|
||
end)
|
||
|
||
Util.AddOnceClick(cardclickBtn, function()
|
||
if oldChoosed then
|
||
oldChoosed:SetActive(false)
|
||
end
|
||
if oldChoosed == choosed then
|
||
--LogColor("green","点的我自己")
|
||
oldChoosed:SetActive(LengthOfTable(selectHeroData) == 0)
|
||
oldChoosed = nil
|
||
selectHeroData = {}
|
||
if LengthOfTable(selectHeroData) == 0 then
|
||
this.usePropInfo.text = Language[12631]
|
||
this.usePropInfo.fontSize = 25
|
||
end
|
||
else
|
||
HarmonyManager.IsGongMing(heroData.dynamicId)
|
||
--LogColor("red","别人")
|
||
choosed:SetActive(true)
|
||
oldChoosed = choosed
|
||
|
||
selectHeroData = {}
|
||
selectHeroData[heroData.dynamicId] = heroData
|
||
this.usePropInfo.fontSize = 35
|
||
--英雄消耗道具数量
|
||
local heroUseCount = 0
|
||
local heroUseItemId = 0
|
||
|
||
--等表配全后再启用
|
||
for k, v in pairs(selectHeroData) do
|
||
local pId
|
||
local curHeroData = HeroManager.GetSingleHeroData(v.dynamicId)
|
||
if not curHeroData then return end
|
||
if curHeroData.breakId == 0 then
|
||
pId = 0
|
||
else
|
||
pId = heroRankupConfig[curHeroData.breakId].Phase[2]
|
||
end
|
||
local heroReturnConfig = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.HeroReturn, "HeroId",
|
||
curHeroData.id, "Star", pId)
|
||
if not heroReturnConfig then
|
||
LogRed("HeroId" .. curHeroData.id .. " Star" ..
|
||
pId .. " curHeroData.breakId" .. curHeroData.breakId)
|
||
heroUseCount = 50
|
||
heroUseItemId = 16
|
||
else
|
||
heroUseCount = heroReturnConfig.ReturnConsume[1][2]
|
||
heroUseItemId = heroReturnConfig.ReturnConsume[1][1]
|
||
end
|
||
break
|
||
end
|
||
--持有道具数量
|
||
costItemId = heroUseItemId
|
||
local itemNum = BagManager.GetItemCountById(heroUseItemId)
|
||
if heroUseItemId > 0 then
|
||
this.usePropIcon.sprite = this.spLoader:LoadSprite(GetResourcePath(ConfigManager.GetConfigData(
|
||
ConfigName.ItemConfig, heroUseItemId).ResourceID))
|
||
end
|
||
if itemNum < heroUseCount then
|
||
this.usePropInfo.text = "<color=red> " .. heroUseCount .. "</color>"
|
||
else
|
||
this.usePropInfo.text = " " .. heroUseCount
|
||
end
|
||
end
|
||
|
||
--Util.SetGray(this.confirmBtn,LengthOfTable(selectHeroData)==0)
|
||
this.usePropIcon.gameObject:SetActive(LengthOfTable(selectHeroData) ~= 0)
|
||
end)
|
||
|
||
Util.AddOnceClick(formationMask, function()
|
||
if heroData.isFormation ~= "" then
|
||
-- 复位角色的状态
|
||
MsgPanel.ShowTwo(Language[12620] .. heroData.isFormation .. Language[12621], nil, function()
|
||
if heroData.isFormations[1] then
|
||
if heroData.isFormations[1] == FormationTypeDef.FORMATION_NORMAL then
|
||
UIManager.OpenPanel(UIName.FormationPanelV2, FORMATION_TYPE.SAVE_FORMATION)
|
||
elseif heroData.isFormations[1] == FormationTypeDef.FORMATION_ARENA_DEFEND then
|
||
JumpManager.GoJump(8001)
|
||
-- elseif heroData.isFormations[1] == FormationTypeDef.FORMATION_ENDLESS_MAP then
|
||
-- JumpManager.GoJump(57001)
|
||
elseif heroData.isFormations[1] == FormationTypeDef.EXPEDITION then
|
||
UIManager.OpenPanel(UIName.FormationPanelV2, FORMATION_TYPE.SAVE_FORMATION,
|
||
FormationTypeDef.EXPEDITION)
|
||
elseif heroData.isFormations[1] == FormationTypeDef.ARENA_TOM_MATCH then
|
||
-- JumpManager.GoJump(57001)
|
||
UIManager.OpenPanel(UIName.ArenaTopMatchPanel)
|
||
elseif heroData.isFormations[1] == FormationTypeDef.JUMPSERVER_HIGHTLADDER
|
||
or heroData.isFormations[1] == FormationTypeDef.LuoFuZhengFeng1
|
||
or heroData.isFormations[1] == FormationTypeDef.LuoFuZhengFeng2
|
||
or heroData.isFormations[1] == FormationTypeDef.LuoFuZhengFeng3
|
||
or heroData.isFormations[1] == FormationTypeDef.LuoFuZhengFeng4 then
|
||
UIManager.OpenPanel(UIName.FormationPanelV2, FORMATION_TYPE.JUMPSERVER_HIGHTLADDER)
|
||
end
|
||
end
|
||
end)
|
||
return
|
||
end
|
||
end)
|
||
Util.AddOnceClick(lockMask, function()
|
||
if heroData.lockState == 1 then
|
||
MsgPanel.ShowTwo(Language[12622], nil, function()
|
||
NetManager.HeroLockEvent(heroData.dynamicId, 0, function()
|
||
PopupTipPanel.ShowTip(Language[12623])
|
||
HeroManager.UpdateSingleHeroLockState(heroData.dynamicId, 0)
|
||
lockMask:SetActive(false)
|
||
end)
|
||
end)
|
||
return
|
||
end
|
||
end)
|
||
end
|
||
|
||
--英雄排序
|
||
function this.SortHeroDatas(_heroDatas)
|
||
--上阵最优先,星级优先,同星级等级优先,同星级同等级按sortId排序。排序时降序排序。
|
||
table.sort(_heroDatas, function(a, b)
|
||
if a == nil or b == nil then
|
||
return
|
||
end
|
||
if a.isFormation == "" and b.isFormation == "" then
|
||
if a.lockState == b.lockState then
|
||
if a.isHarmonyGongMing == b.isHarmonyGongMing then
|
||
if a.heroConfig.Natural == b.heroConfig.Natural then
|
||
local aGodLv = GodSoulManager.GetGodSoulLv(a.dynamicId)
|
||
local bGodLv = GodSoulManager.GetGodSoulLv(b.dynamicId)
|
||
if aGodLv == bGodLv then
|
||
if a.star == b.star then
|
||
if a.lv == b.lv then
|
||
return a.heroConfig.Id > b.heroConfig.Id
|
||
else
|
||
return a.lv < b.lv
|
||
end
|
||
else
|
||
return a.star < b.star
|
||
end
|
||
else
|
||
return aGodLv > bGodLv
|
||
end
|
||
else
|
||
return a.heroConfig.Natural < b.heroConfig.Natural
|
||
end
|
||
else
|
||
return a.isHarmonyGongMing < b.isHarmonyGongMing
|
||
end
|
||
else
|
||
return a.lockState < b.lockState
|
||
end
|
||
else
|
||
return a.isFormation == "" and not b.dynamicId ~= ""
|
||
end
|
||
end)
|
||
end
|
||
|
||
return this
|