1123 lines
39 KiB
Lua
1123 lines
39 KiB
Lua
---@class MainCityUI : BaseUI
|
|
local MainCityUI = class("MainCityUI", BaseUI)
|
|
|
|
local BF_UI_HELPER = GConst.TYPEOF_UNITY_CLASS.BF_UI_HELPER
|
|
|
|
local HERO_MAIN_COMP = "app/ui/hero/hero_main_comp" -- 主角组件
|
|
local SECT_MAIN_COMP = "" -- TODO 门派组件
|
|
local TRAIN_MAIN_COMP = "app/ui/train/train_main_comp" -- 修炼组件
|
|
local DUNGEON_MAIN_COMP = "app/ui/dungeon/dungeon_main_comp" -- 试炼组件
|
|
local SHOP_MAIN_COMP = "app/ui/shop/shop_main_comp" -- 商店组件
|
|
local MINE_MAIN_COMP = "app/ui/mining/mining_main_comp" --地下城(挖矿)组件
|
|
|
|
local BOTTOM_BTN_CELL = "app/ui/main_city/cell/bottom_btn_cell"
|
|
local BOTTOM_BTN_CELL_COUNT = 5
|
|
|
|
local CHAPTER_SLIDER_COMP = "app/ui/main_city/component/chapter_slider_comp"
|
|
local TUTORIAL_TASK_COMP = "app/ui/main_city/component/tutorial_task_comp"
|
|
local DELAY_RESUME_TIME = 0.5
|
|
|
|
local SIDE_BAR_DEFAULT_CELL_WIDTH = 80
|
|
local SIDE_BAR_DEFAULT_CELL_WIDTH_SPACE = 10
|
|
local SIDE_BAR_DEFAULT_CELL_HEIGHT = 80
|
|
local SIDE_BAR_DEFAULT_CELL_HEIGHT_SPACE = 32
|
|
local SIDE_BAR_COMP_TYPE = {
|
|
STRENGTH = 1001, -- 强化
|
|
MONTHLY_CARD = 1011, -- 月卡
|
|
SPEED_UP = 1021, -- 加速
|
|
BOUNTY = 1031, -- 战令
|
|
|
|
TASK = 2001, -- 任务
|
|
HANDBOOK = 2011, -- 图鉴
|
|
ACTIVITY = 2021, -- 活动
|
|
}
|
|
local SIDE_BAR_PREFAB_PATH = {
|
|
-- 左边
|
|
[SIDE_BAR_COMP_TYPE.STRENGTH] = "assets/prefabs/ui/main_city/cell/side_bar_base_cell.prefab",
|
|
[SIDE_BAR_COMP_TYPE.MONTHLY_CARD] = "assets/prefabs/ui/main_city/cell/side_bar_base_cell.prefab",
|
|
[SIDE_BAR_COMP_TYPE.SPEED_UP] = "assets/prefabs/ui/main_city/cell/side_bar_base_cell.prefab",
|
|
[SIDE_BAR_COMP_TYPE.BOUNTY] = "assets/prefabs/ui/main_city/cell/side_bar_base_cell.prefab",
|
|
-- 右边
|
|
[SIDE_BAR_COMP_TYPE.TASK] = "assets/prefabs/ui/main_city/cell/side_bar_base_cell.prefab",
|
|
[SIDE_BAR_COMP_TYPE.HANDBOOK] = "assets/prefabs/ui/main_city/cell/side_bar_base_cell.prefab",
|
|
[SIDE_BAR_COMP_TYPE.ACTIVITY] = "assets/prefabs/ui/main_city/cell/side_bar_base_cell.prefab",
|
|
}
|
|
local SIDE_BAR_COMP_PATH = {
|
|
-- 左边
|
|
[SIDE_BAR_COMP_TYPE.STRENGTH] = "app/ui/main_city/cell/side_bar_strength_cell",
|
|
[SIDE_BAR_COMP_TYPE.MONTHLY_CARD] = "app/ui/main_city/cell/side_bar_monthly_card_cell",
|
|
[SIDE_BAR_COMP_TYPE.SPEED_UP] = "app/ui/main_city/cell/side_bar_speed_up_cell",
|
|
[SIDE_BAR_COMP_TYPE.BOUNTY] = "app/ui/main_city/cell/side_bar_bounty_cell",
|
|
-- 右边
|
|
[SIDE_BAR_COMP_TYPE.TASK] = "app/ui/main_city/cell/side_bar_task_cell",
|
|
[SIDE_BAR_COMP_TYPE.HANDBOOK] = "app/ui/main_city/cell/side_bar_handbook_cell",
|
|
[SIDE_BAR_COMP_TYPE.ACTIVITY] = "app/ui/main_city/cell/side_bar_activity_cell",
|
|
}
|
|
local SIDE_BAR_NAME = {
|
|
[SIDE_BAR_COMP_TYPE.STRENGTH] = "strength_cell",
|
|
[SIDE_BAR_COMP_TYPE.MONTHLY_CARD] = "monthly_card_cell",
|
|
[SIDE_BAR_COMP_TYPE.SPEED_UP] = "speed_up_cell",
|
|
[SIDE_BAR_COMP_TYPE.BOUNTY] = "bounty_cell",
|
|
[SIDE_BAR_COMP_TYPE.TASK] = "task_cell",
|
|
[SIDE_BAR_COMP_TYPE.HANDBOOK] = "handbook_cell",
|
|
[SIDE_BAR_COMP_TYPE.ACTIVITY] = "activity_cell",
|
|
}
|
|
|
|
local BLACK_FADE_TIME = 0.25
|
|
local SAVE_POWER_MODE_TIME = 60
|
|
|
|
function MainCityUI:getUIType()
|
|
return UIManager.UI_TYPE.MAIN
|
|
end
|
|
|
|
function MainCityUI:currencyParams()
|
|
self.targetIndex = self.targetIndex or 0
|
|
local params = {}
|
|
local hidAddImg = false
|
|
params.showType = GConst.CURRENCY_TYPE.HORIZONTAL
|
|
if self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.STAGE then
|
|
if self.targetIndex == 0 then -- 默认状态
|
|
params.itemIds = {
|
|
GConst.ItemConst.ITEM_ID_GOLD,
|
|
GConst.ItemConst.ITEM_ID_GEM,
|
|
}
|
|
elseif self.targetIndex == GConst.MainCityConst.BOTTOM_PAGE.HERO then -- 主角
|
|
params.itemIds = {
|
|
GConst.ItemConst.ITEM_ID_GOLD,
|
|
GConst.ItemConst.ITEM_ID_GEM,
|
|
}
|
|
elseif self.targetIndex == GConst.MainCityConst.BOTTOM_PAGE.SECT then -- 门派
|
|
params.itemIds = {
|
|
GConst.ItemConst.ITEM_ID_GOLD,
|
|
GConst.ItemConst.ITEM_ID_GEM,
|
|
}
|
|
elseif self.targetIndex == GConst.MainCityConst.BOTTOM_PAGE.TRAIN then -- 强化
|
|
params.itemIds = {
|
|
GConst.ItemConst.ITEM_ID_GOLD,
|
|
GConst.ItemConst.ITEM_ID_GEM,
|
|
}
|
|
elseif self.targetIndex == GConst.MainCityConst.BOTTOM_PAGE.DUNGEON then -- 地下城
|
|
params.itemIds = {
|
|
GConst.ItemConst.ITEM_ID_GOLD,
|
|
GConst.ItemConst.ITEM_ID_GEM,
|
|
}
|
|
elseif self.targetIndex == GConst.MainCityConst.BOTTOM_PAGE.SHOP then -- 商店
|
|
params.itemIds = {
|
|
GConst.ItemConst.ITEM_ID_GOLD,
|
|
GConst.ItemConst.ITEM_ID_GEM,
|
|
}
|
|
end
|
|
else
|
|
hidAddImg = true
|
|
if self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.DUNGEON_GOLD then
|
|
params.itemIds = {
|
|
GConst.ItemConst.ITEM_ID_GOLD,
|
|
}
|
|
elseif self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.DUNGEON_GEM then
|
|
params.itemIds = {
|
|
GConst.ItemConst.ITEM_ID_GEM,
|
|
}
|
|
else
|
|
params.itemIds = GConst.EMPTY_TABLE
|
|
end
|
|
end
|
|
return params, true, hidAddImg
|
|
end
|
|
|
|
function MainCityUI:updateCurrentBattleType(battleType)
|
|
if self.battleType ~= battleType then
|
|
self.battleType = battleType
|
|
self:updateCurrencyBar()
|
|
end
|
|
end
|
|
|
|
function MainCityUI:getPrefabPath()
|
|
return "assets/prefabs/ui/main_city/main_ui.prefab"
|
|
end
|
|
|
|
function MainCityUI:ctor(params)
|
|
self.isFirstEnter = params and params.isFirstEnter
|
|
self.targetIndex = params and params.targetIndex or 0
|
|
self.battleType = params and params.battleType or ModuleManager.BattleManager.BATTLE_TYPE.STAGE
|
|
|
|
self.savePowerModeTime = SAVE_POWER_MODE_TIME
|
|
end
|
|
|
|
function MainCityUI:onReshow()
|
|
if self.mineComp then
|
|
self.mineComp:checkRedPoint()
|
|
end
|
|
end
|
|
|
|
function MainCityUI:onLoadRootComplete()
|
|
if self:isClosed() then
|
|
return
|
|
end
|
|
self.uiMap = self.root:genAllChildren()
|
|
|
|
self:_display()
|
|
self:_addListeners()
|
|
self:_bind()
|
|
|
|
self:updateTime()
|
|
self:scheduleGlobal(function()
|
|
self:updateTime()
|
|
end, 1)
|
|
self:hideBlackUI()
|
|
DataManager.HeroData:getMainHeroEntity():getPassiveSkillIds()
|
|
end
|
|
|
|
function MainCityUI:_display()
|
|
self:refreshRoleInfo() -- 刷新左上角角色信息
|
|
self:initBattleNode() -- 初始化战斗节点
|
|
self:initComp() -- 初始化页签界面
|
|
self:initBottom() -- 初始化底部页签
|
|
self:refreshBottom(nil, false) -- 刷新底部页签
|
|
self:refreshChapterSlider() -- 刷新章节滑动条
|
|
self:refreshPower()
|
|
-- 检查弹窗
|
|
self:checkMainPop()
|
|
end
|
|
|
|
function MainCityUI:_addListeners()
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.MAIN_UI_CHECK_POP, function()
|
|
self:checkMainPop()
|
|
end)
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.CURRENCY_BAR_FLY_OVER, function(params)
|
|
if self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.STAGE then
|
|
DataManager.ChapterData:addStageCoinToBagWhenFlyOver() -- 关卡怪物金币入包
|
|
elseif self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.DUNGEON_GOLD then
|
|
UIManager:refreshCurrencyAddTx(GConst.ItemConst.ITEM_ID_GOLD, DataManager.DungeonData:getCacheDungeonDropBigNum())
|
|
elseif self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.DUNGEON_GEM then
|
|
UIManager:refreshCurrencyAddTx(GConst.ItemConst.ITEM_ID_GEM, DataManager.DungeonData:getCacheDungeonDropBigNum())
|
|
end
|
|
end)
|
|
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.TUTORIAL_TASK_REWARD, function(rewards)
|
|
if rewards and self.tutorialTaskComp then
|
|
GFunc.showCurrencyFlyAction(rewards, self.tutorialTaskComp:getBaseObject():getTransform().position)
|
|
end
|
|
end)
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.CURRENCY_BAR_FLY, function(params)
|
|
local pos = params.pos
|
|
local imgNum = params.imgNum
|
|
local itemIds = params.itemIds
|
|
if self.targetIndex == 0 and self:isTopUI() then
|
|
if itemIds and #itemIds > 0 then
|
|
local allPos = {}
|
|
for i = 1, imgNum do
|
|
local posX, posY = GFunc.randomPos(i, {x = pos.x, y = pos.y})
|
|
allPos[i] = {x = posX, y = posY}
|
|
end
|
|
local flyPos = {}
|
|
for _, id in ipairs(itemIds) do
|
|
flyPos[id] = allPos
|
|
end
|
|
UIManager:showCurrencyAction(flyPos)
|
|
end
|
|
else
|
|
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.CURRENCY_BAR_FLY_OVER)
|
|
end
|
|
end)
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.BATTLE_SHOW_CHAPTER_BLACK_UI, function(params)
|
|
self:showBlackUI(params.desc, params.time, params.isShowFail)
|
|
end)
|
|
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.BATTLE_SHOW_TOAST, function(params)
|
|
if self.targetIndex == 0 and self:isTopUI() then
|
|
GFunc.showToast(params)
|
|
end
|
|
end)
|
|
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.ATK_TRAIN_TUTORIAL_OVER, function()
|
|
if self.trainComp then
|
|
self.trainComp:clearTrainStatus()
|
|
end
|
|
end)
|
|
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.TUTORIAL_TASK_STOP, function()
|
|
self:checkTutorialTaskMask()
|
|
end)
|
|
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.GET_ANY_KEY_DOWN, function()
|
|
self:resetSavePowerTime()
|
|
end)
|
|
end
|
|
|
|
function MainCityUI:_bind()
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.CHANGE_MAIN_CITY_PAGE, function(params)
|
|
params = params or {}
|
|
local oldPage = self.targetIndex
|
|
local page = params.page or self.targetIndex
|
|
if page == GConst.MainCityConst.BOTTOM_PAGE.SHOP then
|
|
self.showStoreIdx = params.storeIdx
|
|
self.storeOffsetY = params.storeOffsetY
|
|
end
|
|
self:refreshBottom(page, true)
|
|
if page == GConst.MainCityConst.BOTTOM_PAGE.SHOP then
|
|
self.shopComp:refresh(self, self.showStoreIdx)
|
|
end
|
|
end)
|
|
|
|
self:bind(DataManager.ChapterData, "isDirty", function(binder, value)
|
|
self:refreshChapterSlider()
|
|
end)
|
|
|
|
self:bind(DataManager.TutorialTaskData, "isDirty", function()
|
|
self:_refreshChapterTask()
|
|
self:checkTutorialTaskMask()
|
|
self:refreshBottomIconOnly()
|
|
if self.targetIndex == GConst.MainCityConst.BOTTOM_PAGE.TRAIN and self.trainComp then
|
|
self.trainComp:refreshTutorialTask()
|
|
end
|
|
end, true)
|
|
|
|
self:bind(DataManager.DungeonData, "isDirty", function(binder, value)
|
|
self.dungeonComp:refresh()
|
|
end)
|
|
|
|
self:bind(DataManager.BagData.ItemData, "dirty", function(binder, value)
|
|
self.dungeonComp:refresh()
|
|
self.mineComp:refresh()
|
|
end)
|
|
|
|
self:bind(DataManager.ShopData, "isDirty", function(binder, value)
|
|
self.shopComp:refresh()
|
|
end)
|
|
|
|
self:bind(DataManager.HeroData:getMainHeroEntity(), "powerDirty", function(binder, value)
|
|
self:refreshPower()
|
|
end)
|
|
|
|
self:bind(DataManager.PlayerData, "level", function(binder, value)
|
|
self:refreshBottomIconOnly()
|
|
end)
|
|
self:bind(DataManager.ChapterData, "historyChapterId", function(binder, value)
|
|
self:refreshBottomIconOnly()
|
|
end)
|
|
|
|
DataManager:registerCrossDayFunc("crossDay", function()
|
|
DataManager:resetSignInInfo()
|
|
DataManager.SummonData:resetDailyAdTimes()
|
|
-- 检查弹窗
|
|
self:checkMainPop()
|
|
end)
|
|
end
|
|
|
|
function MainCityUI:initBattleNode()
|
|
self.battleNode = self.uiMap["main_ui.battle_node"]
|
|
end
|
|
|
|
function MainCityUI:getBattleNode()
|
|
return self.battleNode
|
|
end
|
|
|
|
function MainCityUI:onSetUIOrder()
|
|
if self.subComps then
|
|
for index, comp in pairs(self.subComps) do
|
|
local order = self._baseRootCanvas.sortingOrder
|
|
local uiHelper = comp:getGameObject():GetComponent(BF_UI_HELPER)
|
|
if uiHelper then
|
|
uiHelper:SetSortingOrder(order + 1)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 左上角头像与角色信息
|
|
function MainCityUI:refreshRoleInfo()
|
|
if not self.avatarCell then
|
|
self.avatarCell = CellManager:addCellComp(self.uiMap["main_ui.role_node.avatar_cell"], GConst.TYPEOF_LUA_CLASS.AVATAR_CELL)
|
|
end
|
|
self.avatarCell:refresh()
|
|
self.avatarCell:addClickListener(function()
|
|
ModuleManager.GameSettingManager:showSettingUI()
|
|
end)
|
|
|
|
self:refreshPower()
|
|
end
|
|
|
|
-- 初始化底部页签栏
|
|
function MainCityUI:initBottom()
|
|
if not self.bottomBtnCells then
|
|
self.bottomBtnCells = {}
|
|
for i = 1, BOTTOM_BTN_CELL_COUNT do
|
|
table.insert(self.bottomBtnCells, CellManager:addCellComp(self.uiMap["main_ui.bottom_node.bottom_btn_cell_" .. i], BOTTOM_BTN_CELL))
|
|
end
|
|
end
|
|
for i = 1, BOTTOM_BTN_CELL_COUNT do
|
|
local icon = GConst.MainCityConst.BOTTOM_ICON[i]
|
|
local closeIcon = GConst.MainCityConst.BOTTOM_CLOSE_ICON[i]
|
|
local isOpen
|
|
if i == GConst.MainCityConst.BOTTOM_PAGE.DUNGEON then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_GOLD, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_DIAMOND, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_RUNE, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ARENA, true)
|
|
elseif i == GConst.MainCityConst.BOTTOM_PAGE.SHOP then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SHOP, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SUMMON_WEAPON, true)
|
|
end
|
|
self.bottomBtnCells[i]:refresh(i, false, icon, closeIcon, isOpen)
|
|
self.bottomBtnCells[i]:addClickListener(function()
|
|
local isOpen
|
|
if i == GConst.MainCityConst.BOTTOM_PAGE.DUNGEON then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_GOLD, true)
|
|
if not isOpen then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_DIAMOND, true)
|
|
if not isOpen then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_RUNE, true)
|
|
if not isOpen then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ARENA, true)
|
|
end
|
|
end
|
|
end
|
|
if not isOpen then -- 弹toast
|
|
local notShowToast = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_GOLD, false)
|
|
if notShowToast then
|
|
notShowToast = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_DIAMOND, false)
|
|
if notShowToast then
|
|
notShowToast = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_RUNE, false)
|
|
if notShowToast then
|
|
notShowToast = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ARENA, false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
elseif i == GConst.MainCityConst.BOTTOM_PAGE.SHOP then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SHOP, true)
|
|
if not isOpen then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SUMMON_WEAPON, true)
|
|
end
|
|
if not isOpen then -- 弹toast
|
|
local notShowToast = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SHOP, false)
|
|
if notShowToast then
|
|
notShowToast = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SUMMON_WEAPON, false)
|
|
end
|
|
end
|
|
else
|
|
isOpen = ModuleManager:getIsOpen(GConst.MainCityConst.BOTTOM_MODULE_KEY[i], false)
|
|
end
|
|
if isOpen then
|
|
self:refreshBottom(i, true)
|
|
end
|
|
end)
|
|
end
|
|
self.tutorialTaskFinger = self.uiMap["main_ui.bottom_node.tutorial_finger"]
|
|
end
|
|
|
|
-- 刷新底部页签栏
|
|
function MainCityUI:refreshBottom(targetIndex, playAnim)
|
|
targetIndex = targetIndex or 0
|
|
|
|
-- 如果点击一样的 则是关闭效果
|
|
if self.targetIndex == targetIndex then
|
|
targetIndex = 0
|
|
end
|
|
|
|
local oldIndex = self.targetIndex
|
|
self.targetIndex = targetIndex
|
|
|
|
if playAnim then
|
|
-- 动画 TODOJ
|
|
for i = 1, BOTTOM_BTN_CELL_COUNT do
|
|
local icon = GConst.MainCityConst.BOTTOM_ICON[i]
|
|
local closeIcon = GConst.MainCityConst.BOTTOM_CLOSE_ICON[i]
|
|
local isOpen
|
|
if i == GConst.MainCityConst.BOTTOM_PAGE.DUNGEON then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_GOLD, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_DIAMOND, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_RUNE, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ARENA, true)
|
|
elseif i == GConst.MainCityConst.BOTTOM_PAGE.SHOP then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SHOP, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SUMMON_WEAPON, true)
|
|
else
|
|
isOpen = ModuleManager:getIsOpen(GConst.MainCityConst.BOTTOM_MODULE_KEY[i], true)
|
|
end
|
|
self.bottomBtnCells[i]:refresh(i, targetIndex == i, icon, closeIcon, isOpen)
|
|
end
|
|
else
|
|
for i = 1, BOTTOM_BTN_CELL_COUNT do
|
|
local icon = GConst.MainCityConst.BOTTOM_ICON[i]
|
|
local closeIcon = GConst.MainCityConst.BOTTOM_CLOSE_ICON[i]
|
|
local isOpen
|
|
if i == GConst.MainCityConst.BOTTOM_PAGE.DUNGEON then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_GOLD, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_DIAMOND, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_RUNE, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ARENA, true)
|
|
elseif i == GConst.MainCityConst.BOTTOM_PAGE.SHOP then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SHOP, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SUMMON_WEAPON, true)
|
|
else
|
|
isOpen = ModuleManager:getIsOpen(GConst.MainCityConst.BOTTOM_MODULE_KEY[i], true)
|
|
end
|
|
self.bottomBtnCells[i]:refresh(i, targetIndex == i, icon, closeIcon, isOpen)
|
|
end
|
|
end
|
|
|
|
-- 展示页签内容
|
|
if self.targetIndex == 0 or self.subComps[self.targetIndex] then
|
|
self:switchComp(self.targetIndex, oldIndex)
|
|
end
|
|
self:refreshBottomRedPoint()
|
|
|
|
self:checkTutorialTaskMask()
|
|
|
|
-- 战斗开启与暂停
|
|
if self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.STAGE and oldIndex ~= self.targetIndex then
|
|
if self.targetIndex == 0 then
|
|
if self.resumeBattleId then
|
|
SchedulerManager:unscheduleGlobal(self.resumeBattleId)
|
|
end
|
|
self.resumeBattleId = self:performWithDelayGlobal(function()
|
|
self.resumeBattleId = nil
|
|
if self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.STAGE and oldIndex ~= self.targetIndex then
|
|
ModuleManager.BattleManager:resumeFight()
|
|
end
|
|
end, DELAY_RESUME_TIME)
|
|
else
|
|
if not DataManager.BattleData:getIsAutoFight() or self.targetIndex == GConst.MainCityConst.BOTTOM_PAGE.TRAIN then
|
|
ModuleManager.BattleManager:pauseFight()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function MainCityUI:refreshBottomIconOnly()
|
|
for i = 1, BOTTOM_BTN_CELL_COUNT do
|
|
local icon = GConst.MainCityConst.BOTTOM_ICON[i]
|
|
local closeIcon = GConst.MainCityConst.BOTTOM_CLOSE_ICON[i]
|
|
local isOpen
|
|
if 1 == GConst.MainCityConst.BOTTOM_PAGE.DUNGEON then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_GOLD, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_DIAMOND, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DUNGEON_RUNE, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ARENA, true)
|
|
elseif i == GConst.MainCityConst.BOTTOM_PAGE.SHOP then
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SHOP, true)
|
|
or ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SUMMON_WEAPON, true)
|
|
else
|
|
isOpen = ModuleManager:getIsOpen(GConst.MainCityConst.BOTTOM_MODULE_KEY[i], true)
|
|
end
|
|
self.bottomBtnCells[i]:refresh(i, self.targetIndex == i, icon, closeIcon, isOpen)
|
|
end
|
|
end
|
|
|
|
-- 初始化页签界面
|
|
function MainCityUI:initComp()
|
|
if not self.subComps then
|
|
local uiMap = self.root:genAllChildren()
|
|
self.subComps = {}
|
|
|
|
-- 主角
|
|
local heroComp = uiMap["main_ui.sub_ui_node.hero_main_comp"]
|
|
heroComp:initPrefabHelper()
|
|
heroComp:genAllChildren()
|
|
self.subComps[1] = heroComp:addLuaComponent(HERO_MAIN_COMP)
|
|
self.heroComp = self.subComps[1]
|
|
|
|
-- 试炼副本
|
|
local dungeonComp = uiMap["main_ui.sub_ui_node.dungeon_main_comp"]
|
|
dungeonComp:initPrefabHelper()
|
|
dungeonComp:genAllChildren()
|
|
self.subComps[2] = dungeonComp:addLuaComponent(DUNGEON_MAIN_COMP)
|
|
self.dungeonComp = self.subComps[2]
|
|
self.dungeonComp:setParentUI(self)
|
|
-- 强化
|
|
local trainComp = uiMap["main_ui.sub_ui_node.train_main_comp"]
|
|
trainComp:initPrefabHelper()
|
|
trainComp:genAllChildren()
|
|
self.subComps[3] = trainComp:addLuaComponent(TRAIN_MAIN_COMP)
|
|
self.trainComp = self.subComps[3]
|
|
|
|
-- 地下城
|
|
local mineComp = uiMap["main_ui.sub_ui_node.mine_main_comp"]
|
|
mineComp:initPrefabHelper()
|
|
mineComp:genAllChildren()
|
|
self.subComps[4] = mineComp:addLuaComponent(MINE_MAIN_COMP)
|
|
self.mineComp = self.subComps[4]
|
|
self.mineComp:setParentUI(self)
|
|
|
|
-- 商城
|
|
local shopComp = uiMap["main_ui.sub_ui_node.shop_main_comp"]
|
|
shopComp:initPrefabHelper()
|
|
shopComp:genAllChildren()
|
|
self.subComps[5] = shopComp:addLuaComponent(SHOP_MAIN_COMP)
|
|
self.shopComp = self.subComps[5]
|
|
self.shopComp:setParentUI(self)
|
|
self:onSetUIOrder()
|
|
end
|
|
end
|
|
|
|
-- 切换展示对应页签
|
|
function MainCityUI:switchComp(index, oldIndex)
|
|
index = index or self.targetIndex
|
|
for i, comp in pairs(self.subComps) do
|
|
-- 页签被隐藏时调用
|
|
if oldIndex and comp.onHide and i ~= index and oldIndex == GConst.MainCityConst.BOTTOM_PAGE.TRAIN then
|
|
comp:onHide()
|
|
end
|
|
comp:getBaseObject():setActive(i == index)
|
|
if i == index then
|
|
comp:refresh(self)
|
|
self:updateTime()
|
|
end
|
|
end
|
|
self:updateCurrencyBar()
|
|
self:checkMainPop()
|
|
end
|
|
|
|
-- 定时器
|
|
function MainCityUI:updateTime()
|
|
self:refreshSubComps()
|
|
self:refreshLeftNode()
|
|
self:refreshRightNode()
|
|
self:refreshBottomRedPoint()
|
|
self:updateSavePowerModeTime()
|
|
|
|
DataManager.BlessingData:addTimeCount()
|
|
end
|
|
|
|
-- 定时刷新子页签内容
|
|
function MainCityUI:refreshSubComps()
|
|
-- TODO
|
|
self.shopComp:updateTime()
|
|
end
|
|
|
|
-- 定时刷新左部分界面
|
|
function MainCityUI:refreshLeftNode()
|
|
self:_refreshLeftSideBar()
|
|
end
|
|
-- 定时刷新左侧边栏
|
|
function MainCityUI:_refreshLeftSideBar()
|
|
local leftNum = 0
|
|
local offsetY = - SIDE_BAR_DEFAULT_CELL_HEIGHT / 2
|
|
local x = 0
|
|
local y = 0
|
|
local rp = false -- 总红点
|
|
|
|
local leftSideBarNode = self.uiMap["main_ui.left_node.side_bar_bg"]
|
|
-- 祝福 ********************************************************************************************
|
|
local isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.BLESSING, true)
|
|
if isOpen then
|
|
offsetY, leftNum, x, y = self:_getSideBtnPos(leftNum, offsetY)
|
|
end
|
|
local isShake = false
|
|
local isRed = false -- TODO 红点逻辑
|
|
rp = rp or (isOpen and isRed)
|
|
local forceDisVisible = false
|
|
local isAdPoint = DataManager.BlessingData:showVideoPoint()
|
|
self:_refreshSideBar(SIDE_BAR_COMP_TYPE.STRENGTH, isOpen, isShake, isRed, isAdPoint, leftSideBarNode, x, y, forceDisVisible, function()
|
|
ModuleManager.BlessingManager:showBlessingMainUI()
|
|
end)
|
|
|
|
-- 挂机 ********************************************************************************************
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.IDLE, true) and ModuleManager.IdleManager:canGetIdleDrop()
|
|
if isOpen then
|
|
offsetY, leftNum, x, y = self:_getSideBtnPos(leftNum, offsetY)
|
|
end
|
|
isShake = true
|
|
isRed = false -- TODO 红点逻辑
|
|
rp = rp or (isOpen and isRed)
|
|
forceDisVisible = false
|
|
local isAdPoint = false
|
|
self:_refreshSideBar(SIDE_BAR_COMP_TYPE.MONTHLY_CARD, isOpen, isShake, isRed, isAdPoint, leftSideBarNode, x, y, forceDisVisible, function()
|
|
ModuleManager.IdleManager:onBaseGetDrop()
|
|
end)
|
|
|
|
-- 加速 ********************************************************************************************
|
|
isOpen = DataManager.AccelerationData:getIsOpen()
|
|
if isOpen then
|
|
offsetY, leftNum, x, y = self:_getSideBtnPos(leftNum, offsetY)
|
|
end
|
|
isShake = false
|
|
isRed = false
|
|
rp = rp or (isOpen and isRed)
|
|
forceDisVisible = false
|
|
local isAdPoint = false
|
|
self:_refreshSideBar(SIDE_BAR_COMP_TYPE.SPEED_UP, isOpen, isShake, isRed, isAdPoint, leftSideBarNode, x, y, forceDisVisible, function()
|
|
ModuleManager.BattleManager:showBattleSpeedUpUI()
|
|
end)
|
|
|
|
-- 战令/基金 ********************************************************************************************
|
|
isOpen = ModuleManager.BountyManager:isOpen()
|
|
if isOpen then
|
|
offsetY, leftNum, x, y = self:_getSideBtnPos(leftNum, offsetY)
|
|
end
|
|
isShake = false
|
|
isRed = ModuleManager.BountyManager:showRp()
|
|
rp = rp or (isOpen and isRed)
|
|
forceDisVisible = false
|
|
local isAdPoint = false
|
|
self:_refreshSideBar(SIDE_BAR_COMP_TYPE.BOUNTY, isOpen, isShake, isRed, isAdPoint, leftSideBarNode, x, y, forceDisVisible, function()
|
|
ModuleManager.ActivityManager:showHallUI(ModuleManager.BountyManager:getAllActList())
|
|
end)
|
|
|
|
-- 处理总红点
|
|
-- TODOJ
|
|
end
|
|
|
|
-- 定时刷新章节进度
|
|
function MainCityUI:refreshChapterSlider()
|
|
local sliderObj = self.uiMap["main_ui.chapter_slider_node.chapter_slider_comp"]
|
|
if not self.chapterSliderComp then
|
|
|
|
sliderObj:initPrefabHelper()
|
|
sliderObj:genAllChildren()
|
|
self.chapterSliderComp = sliderObj:addLuaComponent(CHAPTER_SLIDER_COMP)
|
|
end
|
|
self.chapterSliderComp:refresh()
|
|
|
|
-- boss章节隐藏
|
|
if DataManager.ChapterData:checkIsFirstRewardChapter(DataManager.ChapterData:getCurChapterId() + 1) then
|
|
sliderObj:setVisible(false)
|
|
else
|
|
sliderObj:setVisible(true)
|
|
end
|
|
end
|
|
|
|
-- 定时刷新右部分界面
|
|
function MainCityUI:refreshRightNode()
|
|
self:_refreshEmailBtn()
|
|
self:_refreshChapterTask()
|
|
self:_refreshRightSideBar()
|
|
end
|
|
-- 定时刷新邮件
|
|
function MainCityUI:_refreshEmailBtn()
|
|
local emailBtn = self.uiMap["main_ui.right_node.email_btn"]
|
|
emailBtn:addClickListener(function()
|
|
ModuleManager.MailManager:showUI()
|
|
end)
|
|
local mailIsOpen = DataManager.MailData:getIsOpen()
|
|
if self.mailIsOpen ~= mailIsOpen then
|
|
emailBtn:setActive(mailIsOpen)
|
|
self.mailIsOpen = mailIsOpen
|
|
end
|
|
|
|
|
|
local isRed, isAdRp = DataManager.MailData:getRedPoint()
|
|
if isRed then
|
|
local iconName
|
|
if isAdRp then
|
|
iconName = GFunc.getAdSprite()
|
|
end
|
|
emailBtn:addRedPoint(23, 14, 0.6, iconName, nil, true)
|
|
else
|
|
emailBtn:removeRedPoint()
|
|
end
|
|
end
|
|
-- 定时刷新任务
|
|
function MainCityUI:_refreshChapterTask()
|
|
if not self.tutorialTaskComp then
|
|
local taskObj = self.uiMap["main_ui.right_node.tutorial_task_comp"]
|
|
taskObj:initPrefabHelper()
|
|
taskObj:genAllChildren()
|
|
self.tutorialTaskComp = self.uiMap["main_ui.right_node.tutorial_task_comp"]:addLuaComponent(TUTORIAL_TASK_COMP)
|
|
end
|
|
local over = DataManager.TutorialTaskData:getTaskCollect()
|
|
self.tutorialTaskComp:getBaseObject():setVisible(not over)
|
|
if not over then
|
|
self.tutorialTaskComp:refresh()
|
|
end
|
|
end
|
|
-- 定时刷新右侧边栏
|
|
function MainCityUI:_refreshRightSideBar()
|
|
local rightNum = 0
|
|
local offsetY = - SIDE_BAR_DEFAULT_CELL_HEIGHT / 2
|
|
local x = 0
|
|
local y = 0
|
|
local rp = false
|
|
|
|
local rightSideBarNode = self.uiMap["main_ui.right_node.side_bar_bg"]
|
|
-- 任务 *****************************************************************************************************
|
|
local isOpen = true -- TODO 开启逻辑
|
|
if isOpen then
|
|
offsetY, rightNum, x, y = self:_getSideBtnPos(rightNum, offsetY)
|
|
end
|
|
local isShake = false
|
|
local isRed = DataManager.DailyTaskData:showRedPoint()
|
|
rp = rp or (isOpen and isRed)
|
|
local forceDisVisible = false
|
|
local isAdPoint = DataManager.DailyTaskData:showAdPoint()
|
|
self:_refreshSideBar(SIDE_BAR_COMP_TYPE.TASK, isOpen, isShake, isRed, isAdPoint, rightSideBarNode, x, y, forceDisVisible, function()
|
|
ModuleManager.DailyTaskManager:showUI()
|
|
end)
|
|
|
|
-- 图鉴 *****************************************************************************************************
|
|
isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.COLLECTION, true)
|
|
if isOpen then
|
|
offsetY, rightNum, x, y = self:_getSideBtnPos(rightNum, offsetY)
|
|
end
|
|
isShake = false
|
|
isRed = DataManager.CollectionData:showRedPoint()
|
|
rp = rp or (isOpen and isRed)
|
|
forceDisVisible = false
|
|
local isAdPoint = false
|
|
self:_refreshSideBar(SIDE_BAR_COMP_TYPE.HANDBOOK, isOpen, isShake, isRed, isAdPoint, rightSideBarNode, x, y, forceDisVisible, function()
|
|
-- 打开图鉴界面
|
|
ModuleManager.CollectionManager:showCollectionUI()
|
|
end)
|
|
|
|
-- 活动 *****************************************************************************************************
|
|
isOpen = DataManager.SevenDayData:getIsOpen()
|
|
if isOpen then
|
|
offsetY, rightNum, x, y = self:_getSideBtnPos(rightNum, offsetY)
|
|
end
|
|
isShake = false
|
|
-- isRed = ModuleManager.ActivityManager:showRp()
|
|
isRed = DataManager.SevenDayData:getRp()
|
|
rp = rp or (isOpen and isRed)
|
|
forceDisVisible = false
|
|
local isAdPoint = false
|
|
self:_refreshSideBar(SIDE_BAR_COMP_TYPE.ACTIVITY, isOpen, isShake, isRed, isAdPoint, rightSideBarNode, x, y, forceDisVisible, function()
|
|
-- ModuleManager.ActivityManager:showHallUI()
|
|
ModuleManager.SevenDayManager:showUI()
|
|
end)
|
|
|
|
-- 处理总红点
|
|
-- TODOJ
|
|
end
|
|
|
|
-- 定时刷新底部红点
|
|
function MainCityUI:refreshBottomRedPoint()
|
|
-- 英雄
|
|
if DataManager.HeroData:showHeroRedPoint() and self.targetIndex ~= GConst.MainCityConst.BOTTOM_PAGE.HERO then
|
|
self.bottomBtnCells[GConst.MainCityConst.BOTTOM_PAGE.HERO].baseObject:addRedPoint(40, 40, 0.7)
|
|
else
|
|
self.bottomBtnCells[GConst.MainCityConst.BOTTOM_PAGE.HERO].baseObject:removeRedPoint()
|
|
end
|
|
|
|
-- 修炼
|
|
if DataManager.ChapterData:showTrainRedPoint() and self.targetIndex ~= GConst.MainCityConst.BOTTOM_PAGE.TRAIN then
|
|
self.bottomBtnCells[GConst.MainCityConst.BOTTOM_PAGE.TRAIN].baseObject:addRedPoint(40, 40, 0.7)
|
|
else
|
|
self.bottomBtnCells[GConst.MainCityConst.BOTTOM_PAGE.TRAIN].baseObject:removeRedPoint()
|
|
end
|
|
|
|
-- 挖矿
|
|
if DataManager.ResearchData:showRedPoint() and self.targetIndex ~= GConst.MainCityConst.BOTTOM_PAGE.DUNGEON then
|
|
self.bottomBtnCells[GConst.MainCityConst.BOTTOM_PAGE.DUNGEON].baseObject:addRedPoint(40, 40, 0.7)
|
|
else
|
|
self.bottomBtnCells[GConst.MainCityConst.BOTTOM_PAGE.DUNGEON].baseObject:removeRedPoint()
|
|
end
|
|
|
|
-- 商城显示广告图标
|
|
if DataManager.ShopData:showAdImg() and self.targetIndex ~= GConst.MainCityConst.BOTTOM_PAGE.SHOP then
|
|
local skip = DataManager.MallActData:skipAd()
|
|
local iconName = skip and "common_ad_4" or "common_ad_3"
|
|
self.bottomBtnCells[GConst.MainCityConst.BOTTOM_PAGE.SHOP].baseObject:addRedPoint(40, 40, 0.7, iconName, nil, true)
|
|
else
|
|
-- 商城
|
|
if DataManager.ShopData:showRedPoint() and self.targetIndex ~= GConst.MainCityConst.BOTTOM_PAGE.SHOP then
|
|
self.bottomBtnCells[GConst.MainCityConst.BOTTOM_PAGE.SHOP].baseObject:addRedPoint(40, 40, 0.7, nil, nil, true)
|
|
else
|
|
self.bottomBtnCells[GConst.MainCityConst.BOTTOM_PAGE.SHOP].baseObject:removeRedPoint()
|
|
end
|
|
end
|
|
|
|
if self.tutorialTaskFinger then
|
|
if DataManager.TutorialTaskData:showFinger() and (self.targetIndex == nil or self.targetIndex == 0) then
|
|
self.tutorialTaskFinger:setVisible(true)
|
|
self.tutorialTaskFinger:getComponent(GConst.TYPEOF_UNITY_CLASS.ANIMATOR):Play(50306902)
|
|
else
|
|
self.tutorialTaskFinger:setVisible(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 检测弹窗
|
|
function MainCityUI:checkMainPop()
|
|
local topUI = UIManager:getTopUIObj()
|
|
if topUI:getUIIndex() ~= self:getUIIndex() then
|
|
return
|
|
end
|
|
|
|
-- 签到弹窗
|
|
local signIsOpen = ModuleManager.SignInManager:getIsSignInOpen()
|
|
if signIsOpen and self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.STAGE then
|
|
local signCount, canSignIn, hasSigned = DataManager:getSignInfo()
|
|
if signCount < 7 and (not hasSigned) and canSignIn then
|
|
ModuleManager.SignInManager:showSignMainUI()
|
|
return
|
|
end
|
|
end
|
|
self:checkTutorial()
|
|
end
|
|
|
|
-- 动态获取侧边栏按钮
|
|
function MainCityUI:_refreshSideBar(type, isOpen, isShake, isRed, isAdPoint, parent, x, y, forceDisVisible, clickCallback)
|
|
if not self.sideBarCells then
|
|
self.sideBarCells = {}
|
|
end
|
|
if not self.sideBarCells[type] then
|
|
if not self.loadingSideBarCells then
|
|
self.loadingSideBarCells = {}
|
|
end
|
|
if not self.loadingSideBarCells[type] then -- 未加载中,加载对应模块侧边栏按钮
|
|
self.loadingSideBarCells[type] = true
|
|
|
|
CellManager:loadCellAsync(SIDE_BAR_PREFAB_PATH[type], SIDE_BAR_COMP_PATH[type], parent, function(cell)
|
|
self.loadingSideBarCells[type] = false
|
|
-- 如果已经加载了 则销毁新生成的
|
|
if self.sideBarCells[type] then
|
|
self.sideBarCells[type]:refresh(self, isOpen, isShake, isRed, isAdPoint, x, y, forceDisVisible, clickCallback)
|
|
|
|
cell.baseObject:destroy()
|
|
return
|
|
end
|
|
cell.baseObject:getGameObject().name = SIDE_BAR_NAME[type]
|
|
self.sideBarCells[type] = cell
|
|
self.sideBarCells[type]:refresh(self, isOpen, isShake, isRed, isAdPoint, x, y, forceDisVisible, clickCallback)
|
|
end)
|
|
end
|
|
else
|
|
self.sideBarCells[type]:refresh(self, isOpen, isShake, isRed, isAdPoint, x, y, forceDisVisible, clickCallback)
|
|
end
|
|
end
|
|
|
|
-- 获取侧边栏按钮相对位置
|
|
function MainCityUI:_getSideBtnPos(btnNum, offsetY, isRight)
|
|
local x = 0
|
|
local y = offsetY
|
|
local maxColumnNum = self:_getMaxColumnNum()
|
|
btnNum = btnNum + 1
|
|
if btnNum < maxColumnNum then
|
|
offsetY = offsetY - (SIDE_BAR_DEFAULT_CELL_HEIGHT + SIDE_BAR_DEFAULT_CELL_HEIGHT_SPACE)
|
|
else
|
|
local num = btnNum - maxColumnNum
|
|
if num > 0 then
|
|
if not isRight then
|
|
x = SIDE_BAR_DEFAULT_CELL_WIDTH + SIDE_BAR_DEFAULT_CELL_WIDTH_SPACE
|
|
else
|
|
x = - (SIDE_BAR_DEFAULT_CELL_WIDTH + SIDE_BAR_DEFAULT_CELL_WIDTH_SPACE)
|
|
end
|
|
end
|
|
offsetY = -(SIDE_BAR_DEFAULT_CELL_HEIGHT / 2) - num * (SIDE_BAR_DEFAULT_CELL_HEIGHT + SIDE_BAR_DEFAULT_CELL_HEIGHT_SPACE)
|
|
end
|
|
return offsetY, btnNum, x, y
|
|
end
|
|
|
|
-- 侧边栏按钮可支持数量
|
|
function MainCityUI:_getMaxColumnNum()
|
|
if not self.maxColumnNum then
|
|
local screenOffsetY = GFunc.calculateFitSizeY()
|
|
self.maxColumnNum = 5 + screenOffsetY // (SIDE_BAR_DEFAULT_CELL_HEIGHT + SIDE_BAR_DEFAULT_CELL_HEIGHT_SPACE)
|
|
end
|
|
return self.maxColumnNum
|
|
end
|
|
|
|
function MainCityUI:checkTutorial()
|
|
if self.targetIndex == nil or self.targetIndex == 0 then
|
|
ModuleManager.TutorialManager:checkAndPlayForceTutorial()
|
|
end
|
|
end
|
|
|
|
-- 提供给战斗使用 隐藏除战斗外的UI
|
|
function MainCityUI:hideMainUIExceptBattle()
|
|
if self.chapterSliderComp then
|
|
self.chapterSliderComp.baseObject:setVisible(false)
|
|
end
|
|
local leftNode = self.uiMap["main_ui.left_node"]
|
|
leftNode:setVisible(false)
|
|
local rightNode = self.uiMap["main_ui.right_node"]
|
|
rightNode:setVisible(false)
|
|
local bottomNode = self.uiMap["main_ui.bottom_node"]
|
|
bottomNode:setVisible(false)
|
|
|
|
self:refreshBottom(nil, true)
|
|
end
|
|
|
|
function MainCityUI:showMainUIExceptBattle()
|
|
if self.chapterSliderComp then
|
|
self.chapterSliderComp.baseObject:setVisible(true)
|
|
end
|
|
local leftNode = self.uiMap["main_ui.left_node"]
|
|
leftNode:setVisible(true)
|
|
local rightNode = self.uiMap["main_ui.right_node"]
|
|
rightNode:setVisible(true)
|
|
local bottomNode = self.uiMap["main_ui.bottom_node"]
|
|
bottomNode:setVisible(true)
|
|
end
|
|
|
|
function MainCityUI:refreshPower()
|
|
local hero = DataManager.HeroData:getMainHeroEntity()
|
|
if hero then
|
|
local powerTx = self.uiMap["main_ui.role_node.power_node.power_tx"]
|
|
powerTx:setText(BigNumOpt.bigNum2Str4Power(hero:getPower()))
|
|
end
|
|
end
|
|
|
|
function MainCityUI:showBlackUI(desc, time, isShowFail)
|
|
-- 自动关闭
|
|
if self.scheduleId then
|
|
self:unscheduleGlobal(self.scheduleId)
|
|
end
|
|
self.scheduleId = self:performWithDelayGlobal(function()
|
|
self.scheduleId = nil
|
|
self:hideBlackUI()
|
|
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.BATTLE_CLOSE_CHAPTER_BLACK_UI)
|
|
end,
|
|
time)
|
|
|
|
-- 表现
|
|
local descTx = self.uiMap["main_ui.black_node.black_bg.desc_tx"]
|
|
descTx:setText(nil)
|
|
local mask = self.uiMap["main_ui.black_node.black_bg"]
|
|
mask:setVisible(true)
|
|
local canvasGroup = mask:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS_GROUP)
|
|
canvasGroup.alpha = 0
|
|
|
|
local sequence = mask:createBindTweenSequence()
|
|
local fadeTween = canvasGroup:DOFade(1, BLACK_FADE_TIME)
|
|
sequence:Append(fadeTween)
|
|
sequence:OnComplete(function()
|
|
descTx:setText(desc)
|
|
if not isShowFail then
|
|
Game:garbageCollect()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function MainCityUI:hideBlackUI()
|
|
local mask = self.uiMap["main_ui.black_node.black_bg"]
|
|
mask:setVisible(false)
|
|
end
|
|
|
|
function MainCityUI:updateSavePowerModeTime()
|
|
local isOpen = ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.POWER_SAVE_MODE, true)
|
|
local topUI = UIManager:getTopUIObj()
|
|
if isOpen and ModuleManager.GameSettingManager:getSavePowerMode() == 1 and topUI:getUIIndex() == self:getUIIndex() and self.battleType == ModuleManager.BattleManager.BATTLE_TYPE.STAGE then
|
|
self.savePowerModeTime = self.savePowerModeTime - 1
|
|
if self.savePowerModeTime < 0 then
|
|
ModuleManager.GameSettingManager:showSavePowerUI()
|
|
|
|
self:resetSavePowerTime()
|
|
end
|
|
end
|
|
end
|
|
|
|
function MainCityUI:resetSavePowerTime()
|
|
self.savePowerModeTime = SAVE_POWER_MODE_TIME
|
|
end
|
|
|
|
---- 引导任务强制领取
|
|
function MainCityUI:checkTutorialTaskMask()
|
|
if not self.targetIndex or self.targetIndex == 0 then
|
|
if DataManager.TutorialTaskData:showMaskFinger() then
|
|
self:showTutorialTaskNode()
|
|
else
|
|
self:hideTutorialTaskNode()
|
|
end
|
|
end
|
|
end
|
|
|
|
function MainCityUI:showTutorialTaskNode()
|
|
if not self.uiMap then
|
|
return
|
|
end
|
|
self.uiMap["main_ui.tutorial_task_node"]:setVisible(true)
|
|
|
|
if not self.tutorialMaskMat then
|
|
self.tutorialMaskMat = CS.UnityEngine.Object.Instantiate(RenderManager:getUITutorialMat())
|
|
self.tutorialMask = self.uiMap["main_ui.tutorial_task_node.mask"]
|
|
self.tutorialMask:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE).material = self.tutorialMaskMat
|
|
self.clickArea = self.uiMap["main_ui.tutorial_task_node.click_area"]
|
|
self.clickArea:addClickListener(function()
|
|
end)
|
|
|
|
local taskComp = self.uiMap["main_ui.right_node.tutorial_task_comp"]
|
|
local rectTransform = taskComp:getComponent(GConst.TYPEOF_UNITY_CLASS.RECTTRANSFORM)
|
|
local rect = rectTransform.rect
|
|
local anchoredPosition = self:getTargetAnchoredPosition(taskComp)
|
|
|
|
self.tutorialMaskMat:SetVector(self:getCenterPropertyID(), {x = anchoredPosition.x, y = anchoredPosition.y, z = 0, w = 0})
|
|
self.tutorialMaskMat:SetFloat(self:getEllipsePropertyID(), 10)
|
|
|
|
self.tutorialMaskMat:SetFloat(self:getRectXPropertyID(), rect.width / 2 + 20)
|
|
self.tutorialMaskMat:SetFloat(self:getRectYPropertyID(), rect.height / 2 + 20)
|
|
|
|
self.tutorialFingerNode = self.uiMap["main_ui.tutorial_task_node.finger_node"]
|
|
self.tutorialBlockTouch = self.uiMap["main_ui.tutorial_task_node.block_touch"]
|
|
self.tutorialBlockTouch:addClickListener(function()
|
|
self.tutorialFingerNode:getComponent(GConst.TYPEOF_UNITY_CLASS.ANIMATOR):Play("finger_click_prompt", -1, 0)
|
|
end)
|
|
|
|
self.tutorialClickAreaCS = self.clickArea:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_TUTORIAL_CLICKAREA)
|
|
self.tutorialClickAreaCS:ClearTargetTransform()
|
|
self.tutorialClickAreaCS:SetTargetTransform(self.uiMap["main_ui.right_node.tutorial_task_comp.chapter_task_bg"]:getTransform())
|
|
end
|
|
self.tutorialFingerNode:getComponent(GConst.TYPEOF_UNITY_CLASS.ANIMATOR):Play("finger_click_prompt", -1, 0)
|
|
|
|
self.showingTutorialTaskNode = true
|
|
ModuleManager.BattleManager:pauseFightByTutorial()
|
|
end
|
|
|
|
function MainCityUI:getTargetAnchoredPosition(targetGo)
|
|
local rectTransform = targetGo:getComponent(GConst.TYPEOF_UNITY_CLASS.RECTTRANSFORM)
|
|
local rect = rectTransform.rect
|
|
local localToWorldMatrix = rectTransform.localToWorldMatrix
|
|
local tarCornerMid = localToWorldMatrix:MultiplyPoint3x4(BF.Vector3((rect.xMax + rect.x) / 2, (rect.yMax + rect.y) / 2, 0))
|
|
local screenPos = UIManager:getUICameraComponent():WorldToScreenPoint(tarCornerMid)
|
|
local anchoredPosition = CS.BF.Utils.RectTransformScreenPointToLocalPointInRectangle(self.root:getTransform(), screenPos.x, screenPos.y, UIManager:getUICameraComponent())
|
|
return anchoredPosition
|
|
end
|
|
|
|
function MainCityUI:getCenterPropertyID()
|
|
if not self._tutorialMatCenterId then
|
|
self._tutorialMatCenterId = CS.UnityEngine.Shader.PropertyToID("_Center")
|
|
end
|
|
return self._tutorialMatCenterId
|
|
end
|
|
|
|
function MainCityUI:getEllipsePropertyID()
|
|
if not self._tutorialMatEllipseId then
|
|
self._tutorialMatEllipseId = CS.UnityEngine.Shader.PropertyToID("_Ellipse")
|
|
end
|
|
return self._tutorialMatEllipseId
|
|
end
|
|
|
|
function MainCityUI:getRectXPropertyID()
|
|
if not self._tutorialMatRectXId then
|
|
self._tutorialMatRectXId = CS.UnityEngine.Shader.PropertyToID("_Rect_X")
|
|
end
|
|
return self._tutorialMatRectXId
|
|
end
|
|
|
|
function MainCityUI:getRectYPropertyID()
|
|
if not self._tutorialMatRectYId then
|
|
self._tutorialMatRectYId = CS.UnityEngine.Shader.PropertyToID("_Rect_Y")
|
|
end
|
|
return self._tutorialMatRectYId
|
|
end
|
|
|
|
function MainCityUI:hideTutorialTaskNode()
|
|
if not self.uiMap then
|
|
return
|
|
end
|
|
self.uiMap["main_ui.tutorial_task_node"]:setVisible(false)
|
|
if self.showingTutorialTaskNode then
|
|
ModuleManager.BattleManager:resumeFightByTutorial()
|
|
end
|
|
self.showingTutorialTaskNode = false
|
|
end
|
|
|
|
---- end 引导任务强制领取
|
|
|
|
function MainCityUI:onClose()
|
|
if self.sideBarCells then
|
|
for k, cell in pairs(self.sideBarCells) do
|
|
self.sideBarCells[k] = nil
|
|
cell.baseObject:destroy()
|
|
end
|
|
end
|
|
if self.loadingSideBarCells then
|
|
for k, _ in pairs(self.loadingSideBarCells) do
|
|
self.loadingSideBarCells[k] = false
|
|
end
|
|
end
|
|
DataManager:unregisterCrossDayFunc("crossDay")
|
|
end
|
|
|
|
return MainCityUI |