2023-07-03 19:57:39 +08:00

369 lines
11 KiB
Lua

local MainComp = class("MainComp", LuaComponent)
local CHAPTER_COMP = "app/ui/main_city/component/chapter_comp"
local DAILY_CHALLENGE_COMP = "app/ui/main_city/component/daily_challenge_comp"
local DUNGEON_COMP = "app/ui/main_city/component/dungeon_comp"
local ARENA_COMP = "app/ui/main_city/component/arena_comp"
local BOTTOM_HEIGHT = 120
function MainComp:init()
self.uiMap = self:getBaseObject():genAllChildren()
self:initStageFormation()
self:refreshModule(ModuleManager.MaincityManager:getCurModule())
end
function MainComp:refreshTime()
if not self.moduleMap then
return
end
if self.moduleMap[self.curModuleType] and self.moduleMap[self.curModuleType].refreshTime then
self.moduleMap[self.curModuleType]:refreshTime()
end
end
function MainComp:refreshModule(selectModule)
if not self.moduleMap then
self.moduleMap = {}
-- 章节
local chapterComp = self.uiMap["main_comp.chapter_comp"]
self.chapterComp = CellManager:addCellComp(chapterComp, CHAPTER_COMP)
self.chapterComp:initWithParentUI(self)
self.moduleMap[GConst.MainCityConst.MAIN_MODULE.CHAPTER] = self.chapterComp
-- 每日挑战
local dailyChallengeComp = self.uiMap["main_comp.daily_challenge_comp"]
self.dailyChallengeComp = CellManager:addCellComp(dailyChallengeComp, DAILY_CHALLENGE_COMP)
self.dailyChallengeComp:initWithParentUI(self)
self.moduleMap[GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE] = self.dailyChallengeComp
-- 活动副本
local dungeonComp = self.uiMap["main_comp.dungeon_comp"]
self.dungeonComp = CellManager:addCellComp(dungeonComp, DUNGEON_COMP)
self.dungeonComp:initWithParentUI(self)
self.moduleMap[GConst.MainCityConst.MAIN_MODULE.DUNGEON] = self.dungeonComp
-- 竞技场
local arenaComp = self.uiMap["main_comp.arena_comp"]
self.arenaComp = CellManager:addCellComp(arenaComp, ARENA_COMP)
self.arenaComp:initWithParentUI(self)
self.moduleMap[GConst.MainCityConst.MAIN_MODULE.ARENA] = self.arenaComp
end
-- 左侧活动入口
if not self.leftEntrance then
self.leftEntrance = {}
self.leftEntrance[GConst.MainCityConst.MAIN_MODULE.CHAPTER] = self.uiMap["main_comp.left.chapter"]
self.leftEntrance[GConst.MainCityConst.MAIN_MODULE.ARENA] = self.uiMap["main_comp.left.arena"]
self.leftEntrance[GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE] = self.uiMap["main_comp.left.daily_challenge"]
end
-- 右侧活动入口
if not self.rightEntrance then
self.rightEntrance = {}
self.rightEntrance[GConst.MainCityConst.MAIN_MODULE.CHAPTER] = self.uiMap["main_comp.right.chapter"]
self.rightEntrance[GConst.MainCityConst.MAIN_MODULE.DUNGEON] = self.uiMap["main_comp.right.dungeon"]
end
if self.curModuleType ~= selectModule then
self.curModuleType = selectModule
ModuleManager.MaincityManager:setCurModule(self.curModuleType)
if self.curModuleType == GConst.MainCityConst.MAIN_MODULE.CHAPTER then
-- 切换到主线章节
elseif self.curModuleType == GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE then
-- 切换到每日挑战
if not DataManager.TutorialData:getIsInTutorial() and DataManager.DailyChallengeData:getIsPopTask() then
ModuleManager.DailyChallengeManager:showBattleTaskUI()
end
elseif self.curModuleType == GConst.MainCityConst.MAIN_MODULE.DUNGEON then
-- 切换到活动副本
end
self:refreshHeroFormationVisible()
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.CHANGE_MAIN_COMP_MODULE, self.curModuleType)
end
if self.curModuleType == GConst.MainCityConst.MAIN_MODULE.ARENA then
if DataManager.ArenaData:needShowPopGift() then
ModuleManager.ArenaManager:showGiftPopUI()
end
end
for idx, cell in pairs(self.moduleMap) do
cell:getBaseObject():setActive(self.curModuleType == idx)
end
self:refreshBtns()
end
function MainComp:refreshBtns()
self:refreshFightBtn()
self:refreshLeftBtn()
self:refreshRightBtn()
end
function MainComp:refreshFightBtn()
if self.fightBtn == nil then
self.fightBtn = self.uiMap["main_comp.fight_btn"]
-- 体力消耗
self.fightCost = self.uiMap["main_comp.fight_btn.cost"]
self.costTxDesc = self.uiMap["main_comp.fight_btn.cost.tx_desc"]
self.costTxCost = self.uiMap["main_comp.fight_btn.cost.tx_cost"]
-- 剩余次数
self.countTxNum = self.uiMap["main_comp.fight_btn.tx_count"]
-- 按钮文本
self.txFight = self.uiMap["main_comp.fight_btn.tx_desc"]
end
local moduleCell = self.moduleMap[self.curModuleType]
local isShowFight = false
-- 体力消耗
local cost = moduleCell:getFightHpCost()
if cost then
isShowFight = true
self.fightCost:setActive(true)
self.costTxDesc:setText(I18N:getGlobalText(I18N.GlobalConst.START_DESC))
self.costTxCost:setText(GFunc.getRewardNum(cost))
else
self.fightCost:setActive(false)
end
-- 剩余次数
local remainCount = moduleCell:getFightTodayRemainCount()
if remainCount >= 0 then
isShowFight = true
self.countTxNum:setActive(true)
self.countTxNum:setText(I18N:getGlobalText(I18N.GlobalConst.TODAY_REMAIN_TIMES, remainCount))
else
self.countTxNum:setActive(false)
end
-- 按钮描述
local fightDesc = moduleCell:getFightDesc()
if fightDesc then
isShowFight = true
self.txFight:setActive(true)
self.txFight:setText(fightDesc)
self.fightBtn:setSizeDelta(286, 119)
else
self.txFight:setActive(false)
self.fightBtn:setSizeDelta(334, 122)
end
if isShowFight then
self.fightBtn:setActive(true)
self.fightBtn:addClickListener(moduleCell.onClickFight)
self.fightBtn:setAnchoredPositionY(self.btnPosY)
else
self.fightBtn:setActive(false)
end
end
-- 刷新左侧活动模块入口
function MainComp:refreshLeftBtn()
local showCount = 0
local leftIdxList = self:getCurLeftModuleIdxList()
for module, entrance in pairs(self.leftEntrance) do
if leftIdxList ~= nil and table.containValue(leftIdxList, module) then
local isShow = self:refreshModuleEntrance(entrance, module, true)
if isShow then
showCount = showCount + 1
end
else
entrance:setActive(false)
end
end
if showCount >= 2 then
self.uiMap["main_comp.left"]:setAnchoredPositionY(self.btnPosY - 20)
table.foreach(self.leftEntrance, function(idx, entrance)
entrance:setLocalScale(0.8,0.8)
end)
else
self.uiMap["main_comp.left"]:setAnchoredPositionY(self.btnPosY)
table.foreach(self.leftEntrance, function(idx, entrance)
entrance:setLocalScale(1,1)
end)
end
end
-- 刷新右侧活动模块入口
function MainComp:refreshRightBtn()
local showCount = 0
local rightIdxList = self:getCurRightModuleIdxList()
for module, entrance in pairs(self.rightEntrance) do
if rightIdxList ~= nil and table.containValue(rightIdxList, module) then
local isShow = self:refreshModuleEntrance(entrance, module, false)
if isShow then
showCount = showCount + 1
end
else
entrance:setActive(false)
end
end
if showCount >= 2 then
self.uiMap["main_comp.right"]:setAnchoredPositionY(self.btnPosY - 20)
table.foreach(self.rightEntrance, function(idx, entrance)
entrance:setLocalScale(0.8,0.8)
end)
else
self.uiMap["main_comp.right"]:setAnchoredPositionY(self.btnPosY)
table.foreach(self.rightEntrance, function(idx, entrance)
entrance:setLocalScale(1,1)
end)
end
end
-- 刷新活动模块入口
function MainComp:refreshModuleEntrance(entrance, moduleType, isLeft)
entrance:setActive(false)
local module = self.moduleMap[moduleType]
if moduleType == nil or module == nil then
return false
end
if not module:getIsOpen() then
return false
end
entrance:setActive(true)
local uiMap = entrance:genAllChildren()
uiMap["desc"]:setText(module:getEntranceName())
-- 竞技场图标显示特殊处理
if moduleType == GConst.MainCityConst.MAIN_MODULE.ARENA then
local curId = DataManager.ArenaData:getGradingId()
uiMap["img_num"]:setSprite(GConst.ATLAS_PATH.ARENA, DataManager.ArenaData:getGradingNumName(curId))
uiMap["icon"]:setSprite(GConst.ATLAS_PATH.ARENA, DataManager.ArenaData:getGradingIconName(curId))
end
if module:getShowEntranceRedPoint() then
if isLeft then
entrance:addRedPoint(65, 35, 0.6)
else
entrance:addRedPoint(-65, 35, 0.6)
end
else
entrance:removeRedPoint()
end
entrance:addClickListener(function()
self:refreshModule(moduleType)
end)
return true
end
-- 获取当前左侧活动type list
function MainComp:getCurLeftModuleIdxList()
if self.curModuleType < GConst.MainCityConst.MAIN_MODULE.CHAPTER then
return nil
end
local leftIdx = {}
if self.curModuleType == GConst.MainCityConst.MAIN_MODULE.CHAPTER then
for module, idx in pairs(GConst.MainCityConst.MAIN_MODULE) do
if idx < GConst.MainCityConst.MAIN_MODULE.CHAPTER then
table.insert(leftIdx, idx)
end
end
table.sort(leftIdx, function(a, b)
return math.abs(a) < math.abs(b)
end)
else
table.insert(leftIdx, GConst.MainCityConst.MAIN_MODULE.CHAPTER)
end
return leftIdx
end
-- 获取当前右侧活动type list
function MainComp:getCurRightModuleIdxList()
if self.curModuleType > GConst.MainCityConst.MAIN_MODULE.CHAPTER then
return nil
end
local rightIdx = {}
if self.curModuleType == GConst.MainCityConst.MAIN_MODULE.CHAPTER then
for module, idx in pairs(GConst.MainCityConst.MAIN_MODULE) do
if idx > GConst.MainCityConst.MAIN_MODULE.CHAPTER then
table.insert(rightIdx, idx)
end
end
table.sort(rightIdx, function(a, b)
return math.abs(a) < math.abs(b)
end)
else
table.insert(rightIdx, GConst.MainCityConst.MAIN_MODULE.CHAPTER)
end
return rightIdx
end
function MainComp:initStageFormation()
self.heroCells = self.uiMap["main_comp.hero_formation_comp"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.HERO_FORMATION_COMP)
local heroBgPosY = self.heroCells:getFormationPosY()
local sWidth, sHeight = GFunc.getUIExpandScreenSize()
local hSHeight = sHeight / 2
self.btnPosY = (heroBgPosY + (BOTTOM_HEIGHT / 2 - hSHeight)) / 2
end
function MainComp:refreshHeroFormationVisible()
self.heroCells:setFormationActive(self.moduleMap[self.curModuleType]:isShowHeroFormation())
end
function MainComp:refresh()
self:refreshStageFormaion()
self:refreshChallenge()
self:refreshDungeon()
self:refreshArena()
end
function MainComp:getCurModuleType()
return self.curModuleType
end
function MainComp:getCurModule()
return self.moduleMap[self.curModuleType]
end
function MainComp:refreshChapter(force)
self.chapterComp:refreshChapter(force)
end
function MainComp:refreshChallenge()
self:refreshBtns()
self.dailyChallengeComp:refreshShow()
end
function MainComp:refreshDungeon()
self:refreshBtns()
self.dungeonComp:refreshShow()
end
function MainComp:refreshArena()
self:refreshBtns()
self.arenaComp:refreshShow()
end
function MainComp:refreshStageFormaion()
self.heroCells:refresh()
self:refreshHeroFormationVisible()
end
function MainComp:getDailyChallengeIconPos()
local idx = table.indexof(self:getCurLeftModuleIdxList(), GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE)
if idx and self.leftEntrance[idx] then
return self.leftEntrance[idx]:getPosition()
end
idx = table.indexof(self:getCurRightModuleIdxList(), GConst.MainCityConst.MAIN_MODULE.DAILY_CHALLENGE)
if idx and self.rightEntrance[idx] then
return self.rightEntrance[idx]:getPosition()
end
end
function MainComp:refreshArenaBounty()
if self.arenaComp then
self.arenaComp:refreshBounty()
end
end
return MainComp