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

469 lines
23 KiB
Lua

require("Base/BasePanel")
RoleAwakeLayout = Inherit(BasePanel)
local this = RoleAwakeLayout
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local heroRankupConfig = ConfigManager.GetConfig(ConfigName.HeroRankupConfig)
local propertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
local heroSkinConfig = ConfigManager.GetConfig(ConfigName.HeroSkin)
local isUpStarMaterials = true --升星 材料是否充足
local curSelectUpStarData --当前选择升星坑位的数据
local curSelectUpStarGo --当前选择升星坑位的预设
local upStarConsumeMaterial = {} --升星消耗的英雄组 {{1坑位英雄信息}{2坑位英雄信息}{}}
local upStarMaterialIsAll = {} --升星消耗的英雄组是否满足 {{1满足}{2不满足}{}}
local isHeroUpStar = false --是否可升星
local upStarRankUpConfig = {} --即将要升星的数据
local curStarRankUpConfig = {} --当前升星的数据
local curHeroData --当前英雄信息
local parent = {}
local upStarPreList = {}
local heroDatas = {}
local isUpZhen = false
function RoleAwakeLayout:New(gameObject)
local b = {}
b.gameObject = gameObject
b.transform = gameObject.transform
setmetatable(b, { __index = RoleAwakeLayout })
return b
end
--初始化组件(用于子类重写)
function RoleAwakeLayout:InitComponent()
this.spLoader = SpriteLoader.New()
Util.GetGameObject(self.gameObject, "content/Image/Text"):GetComponent("Text").text = Language[12691]
Util.GetGameObject(self.gameObject, "content/Image (3)/Text"):GetComponent("Text").text = Language[12692]
Util.GetGameObject(self.gameObject, "content/tip"):GetComponent("Text").text = Language[12693]
this.roleUpStarLayoutTip1 = Util.GetGameObject(self.gameObject, "content/tip1"):GetComponent("Text")
Util.GetGameObject(self.gameObject, "content/upStarBtn/Text"):GetComponent("Text").text = Language[12694]
Util.GetGameObject(self.gameObject, "content/lvUp/Text"):GetComponent("Text").text = Language[12695]
--天赋
this.talent1Image = Util.GetGameObject(self.gameObject, "talent/talent (1)"):GetComponent("Image")
this.talent1Progress = Util.GetGameObject(self.gameObject, "talent/talent (1)/progress"):GetComponent("Text")
this.talent2Image = Util.GetGameObject(self.gameObject, "talent/talent (2)"):GetComponent("Image")
this.talent2Progress = Util.GetGameObject(self.gameObject, "talent/talent (2)/progress"):GetComponent("Text")
this.talentBtn = Util.GetGameObject(self.gameObject, "talent/talentBtn")
this.curLvEnd = Util.GetGameObject(self.gameObject, "lvUp/curLvEnd"):GetComponent("Text")
this.nextLvEnd = Util.GetGameObject(self.gameObject, "lvUp/nextLvEnd"):GetComponent("Text")
--升星觉醒
this.upStarPre = Util.GetGameObject(self.gameObject, "upStarPre")
this.upStarGrid = Util.GetGameObject(self.gameObject, "grid")
this.upStarBtnRedPoint = Util.GetGameObject(self.gameObject, "upStarBtn/redPoint")
this.goldBtn = Util.GetGameObject(self.gameObject, "goldGrid/gold")
this.goldText = Util.GetGameObject(self.gameObject, "goldGrid/gold/Text"):GetComponent("Text")
this.goldImage = Util.GetGameObject(self.gameObject, "goldGrid/gold")
this.gold2Btn = Util.GetGameObject(self.gameObject, "goldGrid/gold2")
this.gold2Text = Util.GetGameObject(self.gameObject, "goldGrid/gold2/Text"):GetComponent("Text")
this.gold2Image = Util.GetGameObject(self.gameObject, "goldGrid/gold2")
this.upStarBtn = Util.GetGameObject(self.gameObject, "upStarBtn")
end
--绑定事件(用于子类重写)
function RoleAwakeLayout:BindEvent()
--升星
Util.AddOnceClick(this.upStarBtn, function()
self:StarUpClick()
end)
end
--添加事件监听(用于子类重写)
function RoleAwakeLayout:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.Bag.BagGold, this.UpdateHeroUpStarMaterialShow, self)
end
--移除事件监听(用于子类重写)
function RoleAwakeLayout:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.Bag.BagGold, this.UpdateHeroUpStarMaterialShow, self)
end
function RoleAwakeLayout:OnShow()
self.gameObject:SetActive(true)
end
function RoleAwakeLayout:SetData(_sortinglayer, _parent, _curHerodata, _isUpZhen, _heroDatas)
this.sortingOrder = _sortinglayer
curHeroData = _curHerodata
parent = _parent
heroDatas = _heroDatas
isUpZhen = _isUpZhen
self:GetCurHeroUpLvOrUpStarSData()
self:UpdateHeroUpStarData() --进阶
local upStarRankUpConfig
for k, v in ConfigPairs(ConfigManager.GetConfig(ConfigName.HeroRankupConfig)) do
if v.Star == curHeroData.heroConfig.Star and v.LimitStar == curHeroData.star and v.OpenStar == curHeroData.star + 1 then
upStarRankUpConfig = v
break
end
end
if upStarRankUpConfig then
if HarmonyManager.GetSingleAdditions(HarmonyAddType.AddLv) >= upStarRankUpConfig.LimitHongmengLevel then -- 鸿蒙阵神将共鸣等级
this.upStarBtn.gameObject:SetActive(true)
this.roleUpStarLayoutTip1.gameObject:SetActive(false)
else
this.upStarBtn.gameObject:SetActive(false)
this.roleUpStarLayoutTip1.gameObject:SetActive(true)
this.roleUpStarLayoutTip1.text = Language[12696] .. upStarRankUpConfig.LimitHongmengLevel
end
end
end
--更新英雄进阶数据
function RoleAwakeLayout:UpdateHeroUpStarData()
--进阶材料
self:UpdateHeroUpStarMaterialShow()
--进阶属性提升
this.curLvEnd.text = HeroManager.GetCurHeroStarLvEnd(1, curHeroData)
this.nextLvEnd.text = HeroManager.GetCurHeroStarLvEnd(2, curHeroData, curHeroData.breakId, upStarRankUpConfig.Id)
local OpenPassiveSkillRules = curHeroData.star == HeroManager.awakeNextStarIndex and curHeroData.heroConfig.Awaken or
curHeroData.heroConfig.OpenPassiveSkillRules
OpenPassiveSkillRules = GetPassiveByMaxStar(curHeroData.heroConfig, OpenPassiveSkillRules)
local openlists, compoundOpenNum, compoundNum, allUpStarOpenData = HeroManager.GetAllPassiveSkillIds(
curHeroData.heroConfig, curHeroData.breakId, curHeroData.upStarId)
this.talent1Progress.text = #openlists - compoundOpenNum .. "/" .. #OpenPassiveSkillRules - compoundNum
this.talent2Progress.text = #openlists - compoundOpenNum .. "/" .. #OpenPassiveSkillRules - compoundNum
Util.AddOnceClick(this.talentBtn, function()
UIManager.OpenPanel(UIName.RoleAwakeTalentPopup, curHeroData.heroConfig)
end)
--进阶吞英雄条件
Util.ClearChild(this.upStarGrid.transform)
local curUpStarData = HeroManager.GetHeroCurUpStarInfo(curHeroData.dynamicId)
if curUpStarData and #curUpStarData > 0 then
upStarConsumeMaterial = {}
upStarMaterialIsAll = {}
upStarPreList = {}
for i = 1, #curUpStarData do
local go = newObject(this.upStarPre)
go.transform:SetParent(this.upStarGrid.transform)
go.transform.localScale = Vector3.one
go.transform.localPosition = Vector3.zero;
go:SetActive(true)
go.transform.name = "upStarPre" .. i
upStarPreList[i] = go
upStarConsumeMaterial[i] = {}
upStarMaterialIsAll[i] = 2
Util.GetGameObject(go.transform, "iconbg/proImage"):SetActive(false)
if curUpStarData[i].upStarMaterialsData.Issame == 1 or curUpStarData[i].upStarMaterialsData.IsId > 0 then
Util.GetGameObject(go.transform, "iconDefault"):SetActive(false)
Util.GetGameObject(go.transform, "icon"):SetActive(true)
Util.GetGameObject(go.transform, "iconbg/proImage"):SetActive(true)
Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite = this.spLoader
:LoadSprite(GetProStrImageByProNum(curHeroData.changeProId))
if curUpStarData[i].upStarMaterialsData.Issame == 1 then
Util.GetGameObject(go.transform, "icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
GetResourcePath(curHeroData.heroConfig.Icon))
Util.GetGameObject(go.transform, "frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
GetHeroQuantityImageByquality(curHeroData.heroConfig.Quality,
curUpStarData[i].upStarMaterialsData.StarLimit))
Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite = this.spLoader
:LoadSprite(GetProStrImageByProNum(curHeroData.changeProId))
elseif curUpStarData[i].upStarMaterialsData.IsId > 0 then
local heroConfig = ConfigManager.GetConfigData(ConfigName.HeroConfig,
curUpStarData[i].upStarMaterialsData.IsId)
Util.GetGameObject(go.transform, "icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
GetResourcePath(heroConfig.Icon))
Util.GetGameObject(go.transform, "frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
GetHeroQuantityImageByquality(heroConfig.Quality, curUpStarData[i].upStarMaterialsData.StarLimit))
Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite = this.spLoader
:LoadSprite(GetProStrImageByProNum(heroConfig.PropertyName))
end
else
if curUpStarData[i].upStarMaterialsData.IsSameClan == 1 then
Util.GetGameObject(go.transform, "iconbg/proImage"):SetActive(true)
Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite = this.spLoader
:LoadSprite(GetProStrImageByProNum(curHeroData.changeProId))
end
Util.GetGameObject(go.transform, "iconDefault"):SetActive(true)
Util.GetGameObject(go.transform, "icon"):SetActive(false)
Util.GetGameObject(go.transform, "frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
GetHeroQuantityImageByquality(nil, curUpStarData[i].upStarMaterialsData.StarLimit))
end
local upStarHeroListData = HeroManager.GetUpStarHeroListData(curUpStarData[i].upStarMaterialsData.Id,
curHeroData)
if upStarHeroListData.state > 0 then
Util.GetGameObject(go.transform, "add/add"):SetActive(true)
else
Util.GetGameObject(go.transform, "add/add"):SetActive(false)
end
Util.GetGameObject(go.transform, "num"):GetComponent("Text").text = string.format(
"<color=#FF0000FF>%s/%s</color>", 0, curUpStarData[i].upStarData[4])
SetHeroStars(this.spLoader, Util.GetGameObject(go.transform, "iconbg/starGrid"),
curUpStarData[i].upStarMaterialsData.StarLimit, 1, nil, -15.3)
local addBtn = Util.GetGameObject(go.transform, "add")
Util.AddOnceClick(addBtn, function()
curSelectUpStarData = curUpStarData[i]
curSelectUpStarGo = go
local curShowHeroListData = self:SetShowHeroListData(upStarConsumeMaterial, upStarHeroListData.heroList)
--参数1 显示的herolist 2 3 升当前星的规则 4 打开RoleUpStarListPanel的界面
UIManager.OpenPanel(UIName.RoleUpStarListPanel, curShowHeroListData, curUpStarData[i]
.upStarMaterialsData, curUpStarData[i].upStarData, this, upStarConsumeMaterial[i], curHeroData)
end)
end
end
self:AutoSelectUpStarHeroList(curUpStarData)
end
--获取当前英雄的下一突破 和 升星 静态数据
function RoleAwakeLayout:GetCurHeroUpLvOrUpStarSData()
isHeroUpStar = false
upStarRankUpConfig = {}
local heroRankUpConfig = ConfigManager.GetConfig(ConfigName.HeroRankupConfig)
for i, v in ConfigPairs(heroRankUpConfig) do
if v.Star == curHeroData.heroConfig.Star then --初始星级相等
if v.Show == 2 then -- 2 升星
if v.Id ~= curHeroData.upStarId and curHeroData.star == v.LimitStar then
--Log("升星 "..v.Id)
upStarRankUpConfig = v
isHeroUpStar = true
end
end
end
end
end
--更新英雄进阶材料显示
function RoleAwakeLayout:UpdateHeroUpStarMaterialShow()
--进阶金币 妖壶条件
if upStarRankUpConfig then
isUpStarMaterials = true
local ConsumeMaterial = upStarRankUpConfig.ConsumeMaterial
if ConsumeMaterial and #ConsumeMaterial >= 2 then
if ConsumeMaterial[1][2] > 0 then
this.goldImage:SetActive(true)
this.goldImage:GetComponent("Image").sprite = this.spLoader:LoadSprite(GetResourcePath(itemConfig
[ConsumeMaterial[1][1]].ResourceID))
if BagManager.GetItemCountById(ConsumeMaterial[1][1]) < ConsumeMaterial[1][2] then
isUpStarMaterials = false
this.goldText.text = string.format("<color=#FF0000FF>%s</color>", ConsumeMaterial[1][2])
else
this.goldText.text = string.format("<color=#FFFFFFFF>%s</color>", ConsumeMaterial[1][2])
end
Util.AddOnceClick(this.goldBtn, function()
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, ConsumeMaterial[1][1])
end)
else
this.goldImage:SetActive(false)
end
if ConsumeMaterial[2][2] > 0 then
this.gold2Image:SetActive(true)
this.gold2Image:GetComponent("Image").sprite = this.spLoader:LoadSprite(GetResourcePath(itemConfig
[ConsumeMaterial[2][1]].ResourceID))
if BagManager.GetItemCountById(ConsumeMaterial[2][1]) < ConsumeMaterial[2][2] then
isUpStarMaterials = false
this.gold2Text.text = string.format("<color=#FF0000FF>%s</color>", ConsumeMaterial[2][2])
else
this.gold2Text.text = string.format("<color=#FFFFFFFF>%s</color>", ConsumeMaterial[2][2])
end
Util.AddOnceClick(this.gold2Btn, function()
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, ConsumeMaterial[2][1])
end)
else
this.gold2Image:SetActive(false)
end
end
end
end
--升星选择祭品后刷新界面
function RoleAwakeLayout:AutoSelectUpStarHeroList(_curUpStarData)
local curUpStarData = _curUpStarData
if curUpStarData and #curUpStarData > 0 then
for i = 1, #curUpStarData do
curSelectUpStarData = curUpStarData[i]
curSelectUpStarGo = upStarPreList[i]
local upStarHeroListData = HeroManager.GetUpStarHeroListData(curUpStarData[i].upStarMaterialsData.Id,
curHeroData)
local curSelectHeroList = {}
if curUpStarData[i].upStarMaterialsData.Issame == 1
or curUpStarData[i].upStarMaterialsData.IsId > 0
or (curUpStarData[i].upStarMaterialsData.IsSameClan == 1
and curUpStarData[i].upStarMaterialsData.StarLimit == 3
and curHeroData.heroConfig.Qualiy ~= 3) then
if LengthOfTable(upStarHeroListData.heroList) >= curUpStarData[i].upStarData[4] then
for i = 1, curUpStarData[i].upStarData[4] do
if upStarHeroListData.heroList[i].type == RoleUpStarMatType.item
or upStarHeroListData.heroList[i].type == RoleUpStarMatType.hero
and upStarHeroListData.heroList[i].lockState == 0
and upStarHeroListData.heroList[i].isFormation == ""
and not HarmonyManager.IsChangeColor(upStarHeroListData.heroList[i].dynamicId)
and not HarmonyManager:IsEnvoy(upStarHeroListData.heroList[i].dynamicId)
then
table.insert(curSelectHeroList, upStarHeroListData.heroList[i])
end
end
self:UpdateUpStarPosHeroData(curSelectHeroList)
end
end
end
end
--进阶红点
local upStarRedPointState = HeroManager.IsShowUpStarRedPoint(curHeroData)
this.upStarBtnRedPoint:SetActive(upStarRedPointState)
parent:CheckRedPointType(RoleInfoPanelIndex.juexing, upStarRedPointState)
end
--刷新当前升星坑位英雄的信息
function RoleAwakeLayout:UpdateUpStarPosHeroData(curSelectHeroList)
if LengthOfTable(curSelectHeroList) < curSelectUpStarData.upStarData[4] then
upStarMaterialIsAll[curSelectUpStarData.upStarData[2]] = 2
Util.GetGameObject(curSelectUpStarGo.transform, "add/add"):SetActive(true)
local upStarHeroListData = HeroManager.GetUpStarHeroListData(curSelectUpStarData.upStarMaterialsData.Id,
curHeroData)
if upStarHeroListData.state <= 0 then
Util.GetGameObject(curSelectUpStarGo.transform, "add/add"):SetActive(false)
end
Util.GetGameObject(curSelectUpStarGo.transform, "num"):GetComponent("Text").text = string.format(
"<color=#FF0000FF>%s/%s</color>", LengthOfTable(curSelectHeroList), curSelectUpStarData.upStarData[4])
else
upStarMaterialIsAll[curSelectUpStarData.upStarData[2]] = 1
Util.GetGameObject(curSelectUpStarGo.transform, "add/add"):SetActive(false)
Util.GetGameObject(curSelectUpStarGo.transform, "num"):GetComponent("Text").text = string.format(
"<color=#FFFFFFFF>%s/%s</color>", LengthOfTable(curSelectHeroList), curSelectUpStarData.upStarData[4])
end
local curUpStarConsumeMaterial = {}
for i, v in pairs(curSelectHeroList) do
table.insert(curUpStarConsumeMaterial, v)
end
upStarConsumeMaterial[curSelectUpStarData.upStarData[2]] = curUpStarConsumeMaterial
end
--分析设置升星界面显示的英雄list数据 如果当前升星材料的坑位的英雄数据与 以其他坑位有重合并且选择上的英雄不显示 如果是当前坑位显示的英雄显示对勾
function RoleAwakeLayout:SetShowHeroListData(upStarConsumeMaterial, curHeroList) --1 消耗的总消耗组 2 当前坑位可选择的所有英雄
--Log("#curHeroList "..#curHeroList)
local curEndShowHeroListData2 = {}
for i = 1, #curHeroList do
table.insert(curEndShowHeroListData2, curHeroList[i])
end
local curEndShowHeroListData = {}
for i, v in pairs(curEndShowHeroListData2) do
v.isSelect = 2
table.insert(curEndShowHeroListData, v)
end
for j = 1, #upStarConsumeMaterial do
if upStarConsumeMaterial[j] and #upStarConsumeMaterial[j] > 0 then
for k = 1, #upStarConsumeMaterial[j] do
if j == curSelectUpStarData.upStarData[2] then --curSelectUpStarData 当前坑位选择的英雄信息
for _, v in pairs(curEndShowHeroListData) do
if v.type == RoleUpStarMatType.hero and v.dynamicId == upStarConsumeMaterial[j][k].dynamicId then
v.isSelect = 1
elseif v.type == RoleUpStarMatType.item and v.id == upStarConsumeMaterial[j][k].id and v.index == upStarConsumeMaterial[j][k].index then
v.isSelect = 1
end
end
else
for i, v in pairs(curEndShowHeroListData) do
if v.type == RoleUpStarMatType.hero and v.dynamicId == upStarConsumeMaterial[j][k].dynamicId then
curEndShowHeroListData[i] = nil
elseif v.type == RoleUpStarMatType.item and v.id == upStarConsumeMaterial[j][k].id and v.index == upStarConsumeMaterial[j][k].index then
curEndShowHeroListData[i] = nil
end
end
end
end
end
end
local curList = {}
for _, v in pairs(curEndShowHeroListData) do
table.insert(curList, v)
end
return curList
end
--进阶按钮点击事件处理
function RoleAwakeLayout:StarUpClick()
if curHeroData.oriLv >= HeroManager.heroLvEnd[curHeroData.heroConfig.Id] then
PopupTipPanel.ShowTip(Language[12697])
return
end
if curHeroData.lv < upStarRankUpConfig.LimitLevel then
PopupTipPanel.ShowTip(Language[12698] .. upStarRankUpConfig.LimitLevel)
return
end
local isUpStarMaterialsHero = true
for i = 1, #upStarMaterialIsAll do
if upStarMaterialIsAll[i] == 2 then
isUpStarMaterialsHero = false
end
end
if isUpStarMaterials and isUpStarMaterialsHero then
NetManager.HeroUpStarEvent(curHeroData.dynamicId, upStarConsumeMaterial, function(msg)
self:DeleteUpStarMaterials()
UIManager.OpenPanel(UIName.RoleAwakeSuccessPanel, curHeroData, upStarRankUpConfig.Id,
upStarRankUpConfig.OpenLevel, function()
local dropItemTabs = BagManager.GetTableByBackDropData(msg)
if #dropItemTabs > 0 then
BagManager.SetDropIsSHowEquipPrint(false)
UIManager.OpenPanel(UIName.RewardItemPopup, msg, 1, function()
end)
end
end)
CheckRedPointStatus(RedPointType.ShengXingYouLi)
CheckRedPointStatus(RedPointType.HongMeng_UpTower)
end)
-- 进阶音效
PlaySoundWithoutClick(SoundConfig.Sound_Recruit3)
else
PopupTipPanel.ShowTip(Language[12699])
end
end
--扣除升星 消耗的材料 更新英雄数据
function RoleAwakeLayout:DeleteUpStarMaterials()
HeroManager.UpdateSingleHeroDatas(curHeroData.dynamicId, curHeroData.oriLv, curHeroData.star + 1, curHeroData
.breakId, upStarRankUpConfig.Id, true)
HeroManager.UpdateSingleHeroSkillData(curHeroData.dynamicId)
for i, v in pairs(heroDatas) do
if curHeroData == v then
curHeroData = HeroManager.GetSingleHeroData(curHeroData.dynamicId)
v = curHeroData
end
end
--本地数据删除材料英雄
local curDelHeroDids = {}
for i = 1, #upStarConsumeMaterial do
for j = 1, #upStarConsumeMaterial[i] do
if upStarConsumeMaterial[i][j].type == RoleUpStarMatType.hero then
table.insert(curDelHeroDids, upStarConsumeMaterial[i][j].dynamicId)
end
end
end
if curDelHeroDids and #curDelHeroDids > 0 then
HeroManager.DeleteHeroDatas(curDelHeroDids)
end
if HeroManager.heroListPanelProID ~= ProIdConst.All then
heroDatas = HeroManager.GetHeroDataByProperty(HeroManager.heroListPanelProID)
else
heroDatas = HeroManager.GetAllHeroDatas()
end
if UIManager.IsOpen(UIName.RoleInfoPanel) then --当界面存在时需要刷新当前界面
HeroManager.SortHeroDatas(heroDatas)
parent:OnOpen(curHeroData, heroDatas, isUpZhen)
parent:OnShow()
end
end
function RoleAwakeLayout:OnSortingOrderChange()
end
function RoleAwakeLayout:OnHide()
self.gameObject:SetActive(false)
end
function RoleAwakeLayout:OnClose()
upStarPreList = {}
end
function RoleAwakeLayout:OnDestroy()
this.spLoader:Destroy()
upStarPreList = {}
end
return this