local DailyChallengeUI = class("DailyChallengeUI", BaseUI)
function DailyChallengeUI:isFullScreen()
return false
end
function DailyChallengeUI:getCurrencyParams()
if self.currencyParams == nil then
self.currencyParams = {
itemIds = {
GConst.ItemConst.ITEM_ID_GOLD,
GConst.ItemConst.ITEM_ID_GEM,
GConst.ItemConst.ITEM_ID_VIT
},
showType = GConst.CURRENCY_TYPE.HORIZONTAL
}
end
return self.currencyParams
end
function DailyChallengeUI:getPrefabPath()
return "assets/prefabs/ui/daily_challenge/daily_challenge_ui.prefab"
end
function DailyChallengeUI:ctor()
ModuleManager.DailyChallengeManager:checkDayChange()
end
function DailyChallengeUI:onLoadRootComplete()
local uiMap = self.root:genAllChildren()
uiMap["daily_challenge_ui.close_btn"]:addClickListener(function ()
self:closeUI()
end)
uiMap["daily_challenge_ui.title.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE))
uiMap["daily_challenge_ui.record_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.CHAPTER_DESC_1, DataManager.DailyChallengeData:getMaxWave()))
uiMap["daily_challenge_ui.up_diff_btn.text"]:setText(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_2))
uiMap["daily_challenge_ui.down_diff_btn.text"]:setText(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_7))
self.tasks = GFunc.getTable()
table.insert(self.tasks, uiMap["daily_challenge_ui.task.icon_task1"])
table.insert(self.tasks, uiMap["daily_challenge_ui.task.icon_task2"])
table.insert(self.tasks, uiMap["daily_challenge_ui.task.icon_task3"])
self.taskMasks = GFunc.getTable()
table.insert(self.taskMasks, uiMap["daily_challenge_ui.task.icon_task1.mask"])
table.insert(self.taskMasks, uiMap["daily_challenge_ui.task.icon_task2.mask"])
table.insert(self.taskMasks, uiMap["daily_challenge_ui.task.icon_task3.mask"])
self.buffBtn = uiMap["daily_challenge_ui.buffs.buff"]
self.debuffBtn = uiMap["daily_challenge_ui.buffs.debuff"]
self.bossSpine = uiMap["daily_challenge_ui.spine_node"]
self.countdownTx = uiMap["daily_challenge_ui.countdown.time_tx"]
self.fightBtn = uiMap["daily_challenge_ui.fight_btn"]
-- 体力消耗
self.fightCost = uiMap["daily_challenge_ui.fight_btn.cost"]
self.costTxDesc = uiMap["daily_challenge_ui.fight_btn.cost.tx_desc"]
self.costTxCost = uiMap["daily_challenge_ui.fight_btn.cost.tx_cost"]
-- 剩余次数
self.countTxNum = uiMap["daily_challenge_ui.fight_btn.tx_count"]
-- 按钮文本
self.txFight = uiMap["daily_challenge_ui.fight_btn.tx_desc"]
self.upDiffBtn = uiMap["daily_challenge_ui.up_diff_btn"]
self.upDiffBtnDescTx = uiMap["daily_challenge_ui.up_diff_btn.desc_tx"]
self.downDiffBtn = uiMap["daily_challenge_ui.down_diff_btn"]
self.fightBtn:addClickListener(function ()
ModuleManager.DailyChallengeManager:startChallenge()
end)
self.upDiffBtn:addClickListener(function ()
if DataManager.DailyChallengeData:canGetReward() then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_6))
return
end
local diffChapter = DataManager.DailyChallengeData:getDiffLv()
local maxChapter = DataManager.DailyChallengeData:getMaxDiffLv()
if diffChapter == maxChapter then
return
else
local cfg = DataManager.DailyChallengeData:getDifficultyCfg(diffChapter + 1)
local chapterId = DataManager.ChapterData:getMaxChapterId()
if cfg.max_chapter <= chapterId then
local params = {
content = I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_4),
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK_CANCEL,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
cancelText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_CANCEL),
okFunc = function()
ModuleManager.DailyChallengeManager:onChapterDailyChallengeLevelReq(diffChapter + 1)
end,
}
GFunc.showMessageBox(params)
end
end
end)
self.downDiffBtn:addClickListener(function ()
if DataManager.DailyChallengeData:canGetReward() then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_6))
return
end
local diffChapter = DataManager.DailyChallengeData:getDiffLv()
if diffChapter == 1 then
return
else
local params = {
content = I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_5),
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK_CANCEL,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
cancelText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_CANCEL),
okFunc = function()
ModuleManager.DailyChallengeManager:onChapterDailyChallengeLevelReq(diffChapter - 1)
end,
}
GFunc.showMessageBox(params)
end
end)
self:bind(DataManager.DailyChallengeData, "isDirty", function()
self:onRefresh()
end)
end
function DailyChallengeUI:updateTime()
ModuleManager.DailyChallengeManager:checkDayChange()
local remainTime = Time:getTodaySurplusTime()
self.countdownTx:setText(GFunc.getTimeStrWithHMS(remainTime))
end
function DailyChallengeUI:onRefresh()
self:refreshTask()
self:refreshBuff()
self:refreshBoss()
self:updateTime()
self:refreshFightBtn()
self:refreshDiffBtn()
if DataManager.DailyChallengeData:getIsPopTask() then
ModuleManager.DailyChallengeManager:showBattleTaskUI()
end
end
function DailyChallengeUI:refreshTask()
local tasksData = DataManager.DailyChallengeData:getTasks()
for i = 1, #self.tasks do
local taskObj = self.tasks[i]
if DataManager.DailyChallengeData:canClaimTask(i) then
-- 任务奖励可领取
taskObj:addRedPoint(30, 30, 1)
-- taskObj:setSprite(GConst.ATLAS_PATH.DAILY_CHALLENGE, "daily_task_1")
self.taskMasks[i]:setActive(false)
else
-- 任务奖励不可领取
taskObj:removeRedPoint()
if not DataManager.DailyChallengeData:isTaskFinish(i) then
-- taskObj:setSprite(GConst.ATLAS_PATH.DAILY_CHALLENGE, "daily_task_1")
self.taskMasks[i]:setActive(false)
else
-- taskObj:setSprite(GConst.ATLAS_PATH.DAILY_CHALLENGE, "daily_task_2")
self.taskMasks[i]:setActive(true)
end
end
taskObj:addClickListener(function()
if DataManager.DailyChallengeData:canClaimTask(i) then
ModuleManager.DailyChallengeManager:getTaskReward(i)
else
local rewards = DataManager.DailyChallengeData:getTaskRewards(tasksData[i].task_id)
local desc = DataManager.DailyChallengeData:getTaskDesc(tasksData[i].task_id)
ModuleManager.TipsManager:showRewardsTips(rewards, desc, taskObj, nil, nil, false, ModuleManager.TipsManager.REWARDS_TIPS_TYPE.TASK)
end
end)
end
end
function DailyChallengeUI:refreshBuff()
local buffIds = DataManager.DailyChallengeData:getTodayBuffIds()
self.buffBtn:addClickListener(function()
ModuleManager.TipsManager:showDescTips(DataManager.DailyChallengeData:getBuffDesc(buffIds[1]), self.buffBtn)
end)
self.debuffBtn:addClickListener(function()
ModuleManager.TipsManager:showDescTips(DataManager.DailyChallengeData:getBuffDesc(buffIds[2]), self.debuffBtn)
end)
end
function DailyChallengeUI:refreshBoss()
local curBossInfo = DataManager.DailyChallengeData:getFinalBossInfo()
if not curBossInfo then
return
end
if self.curModelId == curBossInfo.model_id then
return
end
if self.spineBoss then
self.spineBoss:destroy()
self.spineBoss = nil
self.curModelId = nil
end
self.curModelId = curBossInfo.model_id
SpineManager:loadHeroAsync(self.curModelId, self.bossSpine, function(spineObject)
self.spineBoss = spineObject
self.spineBoss:setDefaultMix(0)
self.spineBoss:setLocalScale(curBossInfo.model_ui, curBossInfo.model_ui, curBossInfo.model_ui)
self.spineBoss:playAnimation(GConst.BattleConst.SPINE_ANIMATION_NAME.IDLE, true, false)
end)
end
function DailyChallengeUI:refreshFightBtn()
local isShowFight = false
-- 体力消耗
local cost = DataManager.DailyChallengeData:getChallengeHpCost()
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 = DataManager.DailyChallengeData:getTodayRemainLimitCount()
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
if isShowFight then
self.fightBtn:setActive(true)
else
self.fightBtn:setActive(false)
end
end
function DailyChallengeUI:refreshDiffBtn()
local diffChapter = DataManager.DailyChallengeData:getDiffLv()
local maxChapter = DataManager.DailyChallengeData:getMaxDiffLv()
if diffChapter == maxChapter then
self.upDiffBtn:setActive(false)
else
self.upDiffBtn:setActive(true)
local cfg = DataManager.DailyChallengeData:getDifficultyCfg(diffChapter + 1)
local chapterId = DataManager.ChapterData:getMaxChapterId()
local chapterPage = DataManager.ChapterData:getChapterPage(diffChapter + 1)
local chapterStage = DataManager.ChapterData:getChapterStage(diffChapter + 1)
local str
if cfg.max_chapter <= chapterId then
str = I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_3, chapterPage, chapterStage, "(" .. I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_8) .. ")")
else
str = I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_3, chapterPage, chapterStage, "(" .. I18N:getGlobalText(I18N.GlobalConst.CHAPTER_WAVE_REAWRD_1) .. ")")
end
self.upDiffBtnDescTx:setText(str)
end
self.downDiffBtn:setActive(diffChapter > 1)
end
return DailyChallengeUI