主界面英雄

This commit is contained in:
puxuan 2025-09-22 14:56:34 +08:00
parent 58bcc1f45f
commit 215c258dad

View File

@ -7,43 +7,8 @@ local HERO_SPINE_ASSET_PATH = "assets/arts/spines/characters/%s/%s_skeletondata.
local CHAPTER_PATH = "assets/prefabs/ui/chapter/%s.prefab"
local CHAPTER_PAGE = 5
function MainComp:onOpen()
self.startMonsterAction = true
if self.bossNode then
self.bossNode:setAnchoredPositionX(0)
end
-- if self.bossShadow then
-- self.bossShadow:setAnchoredPositionX(0)
-- end
if self.dialogueNode then
self.dialogueNode:setAnchoredPositionX(0)
end
end
function MainComp:onClose()
if self.chapterMoveSeq then
self.chapterMoveSeq:Kill()
self.chapterMoveSeq = nil
end
if self.chapterMonsterGenerateSeq then
self.chapterMonsterGenerateSeq:Kill()
self.chapterMonsterGenerateSeq = nil
end
self.currChapterId = nil
self.isTopTurn = nil
self.startMonsterAction = false
GFunc.killDOTween(GConst.DOTWEEN_IDS.CHAPTER_MONSTER)
self.monsterSpineTopPool = {}
self.monsterSpineDownPool = {}
self.monsterSpineTopList = {}
self.monsterSpineDownList = {}
-- self.monsterShadowPool = {}
self.monsterSmokePool = {}
self.monsterNodeTop:removeAllChildren()
self.monsterNodeDown:removeAllChildren()
-- self.shadowNode:removeAllChildren()
self.smokeNodeTop:removeAllChildren()
self.smokeNodeDown:removeAllChildren()
end
function MainComp:init()
@ -58,22 +23,6 @@ function MainComp:init()
self.dailyChallengeBtn = uiMap["main_comp.daily_challenge_btn"]
self.chapterBg = uiMap["main_comp.bg"]
-- self.chapterBg:setAnchoredPositionX(-720)
self.smokeNodeTop = uiMap["main_comp.smoke_node_1"]
self.monsterNodeTop = uiMap["main_comp.monster_node_1"]
self.bossNode = uiMap["main_comp.boss_node"]
self.bossNode:setActive(false)
self.bossSpine = uiMap["main_comp.boss_node.boss"]
self.smokeNodeDown = uiMap["main_comp.smoke_node_2"]
self.monsterNodeDown = uiMap["main_comp.monster_node_2"]
self.monsterSpineTopPool = {}
self.monsterSpineDownPool = {}
self.monsterSpineTopList = {}
self.monsterSpineDownList = {}
-- self.monsterShadowPool = {}
self.monsterSmokePool = {}
self.startMonsterAction = true
self.fightBtn = uiMap["main_comp.fight_btn"]
-- 体力消耗
self.fightCost = uiMap["main_comp.fight_btn.cost"]
@ -89,6 +38,20 @@ function MainComp:init()
self.leftBtn = uiMap["main_comp.left_btn"]
self.rightBtn = uiMap["main_comp.right_btn"]
self.heroSpineList = {}
self.heroNodeList = {}
for i = 1, 5 do
self.heroNodeList[i] = uiMap["main_comp.formation.hero_" .. i]
self.heroNodeList[i]:addClickListener(function()
local heroId = self.curFormation[i]
if heroId then
local hero = DataManager.HeroData:getHeroById(heroId)
if hero then
ModuleManager.HeroManager:showHeroDetailUI(heroId, nil, nil, GConst.BattleConst.FORMATION_TYPE.STAGE)
end
end
end)
end
self.chapterMiddleBg = uiMap["main_comp.middle_bg"]
self.chapterTx = uiMap["main_comp.middle_bg.chapter_tx"]
@ -181,6 +144,7 @@ end
function MainComp:refresh()
self:refreshChapter()
self:refreshRedPoint()
self:refreshHero()
end
function MainComp:refreshChapter(force)
@ -192,12 +156,9 @@ function MainComp:refreshChapter(force)
self.chapterStage = DataManager.ChapterData:getChapterStage(chapterId)
self:refreshChapterBg()
self:refreshFightBtn()
self:doBossAction()
end
self.currChapterId = chapterId
self:refreshChapterInfo()
-- self:doChapterMove()
-- self:doMonsterAction()
self:refreshChapterBtn()
self.leftBtn:setActive(ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.IDLE_DROP, true))
@ -333,304 +294,36 @@ end
function MainComp:getSummonBtnPosition()
return self.rightBtn:getPosition()
end
-- region 动画
-- function MainComp:doChapterMove()
-- if self.chapterMoveSeq then
-- return
-- end
-- self.chapterBg:setAnchoredPositionX(-720)
-- self.chapterMoveSeq = self.chapterBg:createBindTweenSequence()
-- local moveTween = self.chapterBg:getTransform():DOAnchorPosX(720, 20):SetEase(CS.DG.Tweening.Ease.Linear)
-- self.chapterMoveSeq:Append(moveTween)
-- self.chapterMoveSeq:AppendCallback(function()
-- self.chapterBg:setAnchoredPositionX(-720)
-- end)
-- self.chapterMoveSeq:SetLoops(-1)
-- end
function MainComp:doBossAction()
if self.currChapterId == nil then
return
end
local chapterInfo = ConfigManager:getConfig("chapter")[self.currChapterId]
if chapterInfo == nil then
return
end
local monsterIdList = chapterInfo.monster
-- monsterIdList = {20001, 10001, 10002}
if monsterIdList == nil then
return
end
self.chapterMonsterShowList = monsterIdList
if self.chapterBossId == nil then -- 还没显示boss模型
self.chapterBossId = self.chapterMonsterShowList[#self.chapterMonsterShowList]
local chapterBossId = self.chapterBossId
local monsterCfg = ConfigManager:getConfig("monster")
local monsterInfo = monsterCfg[self.chapterBossId]
if monsterInfo then
local modelId = monsterInfo.model_id
local path = string.format(HERO_SPINE_ASSET_PATH, modelId, modelId)
self.bossNode:setActive(false)
local scale = monsterInfo.ui or 1
self.bossSpine:loadAssetAsync(modelId, function()
if chapterBossId == self.chapterBossId then
self.bossNode:setActive(true)
self.bossSpine:setLocalScale(scale, scale, scale)
self.bossSpine:playAnim("move", true, true, true)
else -- 加载完成后已经切换到其他boss了
self:doChangeBossAction()
end
end, path)
end
else
local chapterBossId = self.chapterMonsterShowList[#self.chapterMonsterShowList]
if self.chapterBossId ~= chapterBossId then
self.chapterBossId = chapterBossId
self:doChangeBossAction()
end
end
end
-- 切换boss
function MainComp:doChangeBossAction()
local chapterBossId = self.chapterBossId
local monsterCfg = ConfigManager:getConfig("monster")
local monsterInfo = monsterCfg[self.chapterBossId]
if monsterInfo then
local modelId = monsterInfo.model_id
local path = string.format(HERO_SPINE_ASSET_PATH, modelId, modelId)
self.bossNode:setActive(false)
local scale = monsterInfo.ui or 1
self.bossSpine:loadAssetAsync(modelId, function()
if chapterBossId == self.chapterBossId then
self.bossNode:setActive(true)
self.bossSpine:setLocalScale(scale, scale, scale)
self.bossSpine:playAnim("move", true, true, true)
else -- 加载完成后已经切换到其他boss了
self:doChangeBossAction()
function MainComp:refreshHero()
self.curFormation = DataManager.FormationData:getStageFormation()
for i = 1, 5 do
local heroId = self.curFormation[i]
local hero = DataManager.HeroData:getHeroById(heroId)
if hero and hero:getLv() > 0 then
if self.heroSpineList[i] and self.heroSpineList[i]:getModelId() == hero:getModelId() then
self.heroSpineList[i]:setActive(true)
self.heroSpineList[i]:playAnimation("move", true)
else
SpineManager:loadHeroAsync(hero:getModelId(), self.heroNodeList[i], function(spineObject)
if heroId ~= self.curFormation[i] then
return
end
if self.heroSpineList[i] then
self.heroSpineList[i]:destroy()
end
spineObject:playAnimation("move", true)
spineObject:setLocalScale(0.7, 0.7, 0.7)
self.heroSpineList[i] = spineObject
self.heroSpineList[i]:setLocalPosition(0, -60, 0)
end)
end
end, path)
else
if self.heroSpineList[i] then
self.heroSpineList[i]:setActive(false)
end
end
end
end
-- function MainComp:doMonsterAction()
-- if self.chapterMonsterGenerateSeq then
-- return
-- end
-- self.chapterMonsterGenerateSeq = DOTweenManager:createSeqWithIntId()
-- local interval = GFunc.getConstValue("chapter_idel_monster_x") / 1000
-- interval = 2
-- self.chapterMonsterGenerateSeq:AppendCallback(function()
-- self:generateChapterMonsters()
-- end)
-- self.chapterMonsterGenerateSeq:AppendInterval(interval)
-- self.chapterMonsterGenerateSeq:SetLoops(-1)
-- end
-- function MainComp:generateChapterMonsters()
-- local monsterId
-- if #self.chapterMonsterShowList <= 2 then
-- monsterId = self.chapterMonsterShowList[2]
-- else
-- monsterId = self.chapterMonsterShowList[math.random(2, #self.chapterMonsterShowList)]
-- end
-- if monsterId == nil then
-- return
-- end
-- local monsterCfg = ConfigManager:getConfig("monster_base")
-- local monsterInfo = monsterCfg[monsterId]
-- if monsterInfo == nil then
-- return
-- end
-- if self.isTopTurn == nil then
-- self.isTopTurn = math.random(1, 100) > 50
-- end
-- local modelId = monsterInfo.model_id
-- local pool
-- local list
-- local parent
-- local posY
-- if self.isTopTurn then -- 刷上面
-- pool = self.monsterSpineTopPool[modelId]
-- list = self.monsterSpineTopList
-- parent = self.monsterNodeTop
-- posY = math.random(1, 300)
-- else -- 刷下面
-- pool = self.monsterSpineDownPool[modelId]
-- list = self.monsterSpineDownList
-- parent = self.monsterNodeDown
-- posY = -math.random(1, 240)
-- end
-- self.isTopTurn = not self.isTopTurn
-- if pool and #pool > 0 then
-- local spine = table.remove(pool)
-- table.insert(list, spine)
-- spine:setActive(true)
-- self:doMonsterMove(modelId, spine, posY, monsterInfo, not self.isTopTurn)
-- else
-- SpineManager:loadUIHeroSpineWidgetAsync(modelId, parent, function(spine)
-- if not self.startMonsterAction then
-- spine:destroy()
-- return
-- end
-- table.insert(list, spine)
-- local scale = monsterInfo.ui or 1
-- spine:setLocalScale(-scale, scale, scale)
-- self:doMonsterMove(modelId, spine, posY, monsterInfo, not self.isTopTurn)
-- end)
-- end
-- end
-- function MainComp:doMonsterMove(modelId, spine, posY, monsterInfo, isTopTurn)
-- spine:playAnim("move", true, true, true)
-- local posX = GConst.UI_SCREEN_WIDTH / 2 + 100
-- local targetPosX = -GConst.UI_SCREEN_WIDTH / 2 - 300
-- spine:setAnchoredPosition(posX, posY)
-- local seq = DOTweenManager:createSeqWithIntId(GConst.DOTWEEN_IDS.CHAPTER_MONSTER)
-- if self.chapterMonsterSpeed == nil then
-- -- self.chapterMonsterSpeed = GFunc.getConstValue("chapter_idel_monstermove")
-- self.chapterMonsterSpeed = 150
-- end
-- local distance = posX - targetPosX
-- local moveTime = distance / self.chapterMonsterSpeed
-- local moveTween = spine:getTransform():DOAnchorPosX(targetPosX, moveTime):SetEase(CS.DG.Tweening.Ease.Linear)
-- seq:Append(moveTween)
-- end
-- function MainComp:enterChapterBattle()
-- -- boss等一会再跑
-- local bossWaitTime = GFunc.getConstValue("chapter_fight_bosswait") / 1000
-- local bossSeq = DOTweenManager:createSeqWithIntId(GConst.DOTWEEN_IDS.CHAPTER_MONSTER)
-- bossSeq:AppendInterval(bossWaitTime)
-- local bossSpeed = GFunc.getConstValue("chapter_fight_bossmove")
-- local distance = GConst.UI_SCREEN_WIDTH/2 + 100
-- local moveTime = distance / bossSpeed
-- local targetPosX = -GConst.UI_SCREEN_WIDTH / 2 - 300
-- local moveTween = self.bossNode:getTransform():DOAnchorPosX(targetPosX, moveTime):SetEase(CS.DG.Tweening.Ease.Linear)
-- bossSeq:Append(moveTween)
-- local moveTween2 = self.dialogueNode:getTransform():DOAnchorPosX(targetPosX, moveTime):SetEase(CS.DG.Tweening.Ease.Linear)
-- bossSeq:Join(moveTween2)
-- -- local moveTween3 = self.bossShadow:getTransform():DOAnchorPosX(targetPosX, moveTime):SetEase(CS.DG.Tweening.Ease.Linear)
-- -- bossSeq:Join(moveTween3)
-- -- 出来一批小怪从右边跑向左边
-- local monsterCount = GFunc.getConstIntValue("chapter_fight_monster_num")
-- self.chapterFightMonsterCount = monsterCount
-- local wave = 5
-- local monsterCountPerWave = math.ceil(monsterCount / wave)
-- -- 分批处理
-- local monsterSeq = DOTweenManager:createSeqWithIntId(GConst.DOTWEEN_IDS.CHAPTER_MONSTER)
-- for i = 1, wave do
-- monsterSeq:AppendCallback(function ()
-- if monsterCountPerWave > monsterCount then
-- monsterCountPerWave = monsterCount
-- end
-- monsterCount = monsterCount - monsterCountPerWave
-- for j = 1, monsterCountPerWave do
-- self:generateChapterFightMonsters()
-- end
-- end)
-- monsterSeq:AppendInterval(0.03)
-- end
-- return GFunc.getConstValue("chapter_fight_wait") / 1000
-- end
-- function MainComp:generateChapterFightMonsters()
-- local monsterId
-- if #self.chapterMonsterShowList <= 2 then
-- monsterId = self.chapterMonsterShowList[2]
-- else
-- monsterId = self.chapterMonsterShowList[math.random(2, #self.chapterMonsterShowList)]
-- end
-- if monsterId == nil then
-- return
-- end
-- local monsterCfg = ConfigManager:getConfig("monster_base")
-- local monsterInfo = monsterCfg[monsterId]
-- if monsterInfo == nil then
-- return
-- end
-- local modelId = monsterInfo.model_id
-- local pool
-- local list
-- local parent
-- local posY
-- if self.isTopTurn then -- 刷上面
-- pool = self.monsterSpineTopPool[modelId]
-- list = self.monsterSpineTopList
-- parent = self.monsterNodeTop
-- posY = math.random(1, 300)
-- else -- 刷下面
-- pool = self.monsterSpineDownPool[modelId]
-- list = self.monsterSpineDownList
-- parent = self.monsterNodeDown
-- posY = -math.random(1, 240)
-- end
-- self.isTopTurn = not self.isTopTurn
-- if pool and #pool > 0 then
-- local spine = table.remove(pool)
-- table.insert(list, spine)
-- spine:setActive(true)
-- self:doMonsterFightMove(modelId, spine, posY, monsterInfo, not self.isTopTurn)
-- else
-- SpineManager:loadUIHeroSpineWidgetAsync(modelId, parent, function(spine)
-- if not self.startMonsterAction then
-- spine:destroy()
-- return
-- end
-- table.insert(list, spine)
-- local scale = monsterInfo.ui or 1
-- spine:setLocalScale(-scale, scale, scale)
-- self:doMonsterFightMove(modelId, spine, posY, monsterInfo, not self.isTopTurn)
-- end)
-- end
-- end
-- function MainComp:doMonsterFightMove(modelId, spine, posY, monsterInfo, isTopTurn)
-- spine:playAnim("move", true, true, true)
-- local posX = GConst.UI_SCREEN_WIDTH / 2 + math.random(100, math.floor(GConst.UI_SCREEN_WIDTH*2/3))
-- spine:setAnchoredPosition(posX, posY)
-- local seq = DOTweenManager:createSeqWithIntId(GConst.DOTWEEN_IDS.CHAPTER_MONSTER)
-- if self.chapterMonsterFightSpeed == nil then
-- -- self.chapterMonsterFightSpeed = GFunc.getConstValue("chapter_fight_monstermove")
-- self.chapterMonsterFightSpeed = 880
-- end
-- local distance = posX + GConst.UI_SCREEN_WIDTH/2 + 100
-- local moveTime = distance / self.chapterMonsterFightSpeed
-- local targetPosX = -GConst.UI_SCREEN_WIDTH / 2 - 100
-- local moveTween = spine:getTransform():DOAnchorPosX(targetPosX, moveTime):SetEase(CS.DG.Tweening.Ease.Linear)
-- seq:Append(moveTween)
-- if self.chapterFightMonsterCount then
-- self.chapterFightMonsterCount = self.chapterFightMonsterCount - 1
-- if self.chapterFightMonsterCount == 0 then -- 最后一个怪物生成完毕后,重新排一下序
-- self:sortChapterFightMonstersOrder()
-- self:sortChapterFightMonstersOrder()
-- self:sortChapterFightMonstersOrder()
-- self:sortChapterFightMonstersOrder()
-- end
-- end
-- end
-- function MainComp:sortChapterFightMonstersOrder()
-- self:sortChildrenOrder(self.monsterNodeTop)
-- self:sortChildrenOrder(self.monsterNodeDown)
-- end
-- function MainComp:sortChildrenOrder(parent)
-- local children = parent:getChildList()
-- if children and #children > 0 then
-- table.sort(children, function(a, b)
-- return a:getAnchoredPositionY() > b:getAnchoredPositionY()
-- end)
-- for i = #children, 1, -1 do
-- children[i]:getTransform():SetSiblingIndex(i - 1)
-- end
-- end
-- end
-- endregion
return MainComp