c1_lua/lua/app/ui/main_city/component/chapter_comp.lua
2023-06-09 18:46:22 +08:00

180 lines
6.1 KiB
Lua

local MainCompBaseCell = require "app/ui/main_city/component/main_comp_base_cell"
local ChapterComp = class("ChapterComp", MainCompBaseCell)
local CHAPTER_PATH = "assets/arts/textures/background/chapter/%s.png"
local BOX_ICON = {
"common_chest_1",
"common_chest_4"
}
function ChapterComp:getIsOpen()
return true
end
function ChapterComp:getEntranceName()
return I18N:getGlobalText(I18N.GlobalConst.MAIN_CHAPTER)
end
function ChapterComp:getEntranceIcon()
return GConst.ATLAS_PATH.COMMON,"common_dec_1"
end
function ChapterComp:getHpCost()
return DataManager.ChapterData:getFightCost()
end
function ChapterComp:onClickFight()
ModuleManager.ChapterManager:startFight()
end
function ChapterComp:init()
self.uiMap = self:getBaseObject():genAllChildren()
self:initChapter()
end
function ChapterComp:initChapter()
self.chapterImg = self.uiMap["chapter.img"]
self.chapterNameTx = self.uiMap["chapter.name_tx"]
self.chapterWavetx = self.uiMap["chapter.record_tx"]
self.leftArrow = self.uiMap["chapter.left_arrow"]
local leftArrowBtn = self.uiMap["chapter.left_arrow.btn"]
leftArrowBtn:addClickListener(function()
if DataManager.ChapterData:goLastChapter() then
self:refresh()
end
end)
self.rightArrow = self.uiMap["chapter.right_arrow"]
local rightArrowBtn = self.uiMap["chapter.right_arrow.btn"]
rightArrowBtn:addClickListener(function()
if DataManager.ChapterData:goNextChapter() then
self:refresh()
end
end)
self.uiMap["chapter.effect_node.ui_spine_obj"]:playAnim("idle", true, false)
end
function ChapterComp:refresh()
self:refreshChapter()
end
function ChapterComp:refreshChapter(force)
local chapterId = DataManager.ChapterData:getChapterId()
if self.currChapterId ~= chapterId or force then
if DataManager.ChapterData:getIsFirstChapter(chapterId) then -- 第一章不需要左箭头
self.leftArrow:setVisible(false)
self.rightArrow:setVisible(DataManager.ChapterData:getMaxChapterId() >= 1)
elseif chapterId == DataManager.ChapterData:getMaxChapterId() + 1 then -- 只能看打的最远的关卡
self.leftArrow:setVisible(true)
self.rightArrow:setVisible(false)
else
self.leftArrow:setVisible(true)
self.rightArrow:setVisible(not DataManager.ChapterData:isFinalChapter(chapterId))
end
self.currChapterId = chapterId
local chapterInfo = ConfigManager:getConfig("chapter")[chapterId]
local chapterI18NInfo = I18N:getConfig("chapter")[chapterId]
if chapterInfo then
self.chapterImg:setTexture(string.format(CHAPTER_PATH, chapterInfo.icon))
end
if chapterI18NInfo then
self.chapterNameTx:setText(chapterI18NInfo.name)
end
self.chapterWavetx:setText(I18N:getGlobalText(I18N.GlobalConst.CHAPTER_DESC_1, DataManager.ChapterData:getChapterMaxWave()))
local slider = self.uiMap["chapter.progress_bg.slider"]
if not self.boxObjs then
self.boxObjs = {}
for i = 1, 3 do
self.boxObjs[i] = {
box = self.uiMap["chapter.progress_bg.box_" .. i],
desc = self.uiMap["chapter.progress_bg.box_desc_" .. i],
spineObj = self.uiMap["chapter.progress_bg.spine_node.ui_spine_obj_" .. i],
boxIcon = self.uiMap["chapter.progress_bg.box_" .. i .. ".box_icon"]
}
end
end
local mysteryBoxCount = DataManager.ChapterData:getChapterMysteryBoxRewardCount(chapterId)
local mysteryBoxBg = self.uiMap["chapter_comp.img.bg"]
mysteryBoxBg:setVisible(mysteryBoxCount > 0)
local mysteryBoxIcon = self.uiMap["chapter.img.mystery_box_icon"]
mysteryBoxIcon:setVisible(mysteryBoxCount > 0)
if mysteryBoxCount > 0 then
local gotCount = DataManager.ChapterData:getChapterMysteryBoxGotCount(chapterId)
local desc = I18N:getGlobalText(I18N.GlobalConst.CHAPTER_DESC_2, gotCount, mysteryBoxCount)
self.uiMap["chapter.img.mystery_box_icon.desc"]:setText(desc)
end
local rewardChapterId = DataManager.ChapterData:getIsHaveRewardsMinId()
if rewardChapterId > chapterId then
rewardChapterId = chapterId
end
local curMaxWave = DataManager.ChapterData:getChapterMaxWave(rewardChapterId)
local boxCount = DataManager.ChapterData:getChapterBoxCount(rewardChapterId)
local unitValue = 1 / boxCount
local sliderValue = 0
local lastValue = 0
for i = 1, boxCount do
if curMaxWave < lastValue then
break
end
local maxWave = DataManager.ChapterData:getChapterBoxNum(rewardChapterId, i)
local wave = math.min(curMaxWave, maxWave)
sliderValue = sliderValue + unitValue * (wave - lastValue) / (maxWave - lastValue)
lastValue = maxWave
end
slider:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = sliderValue
for index, objs in ipairs(self.boxObjs) do
local show = boxCount >= index
objs.box:setActive(show)
objs.desc:setActive(show)
objs.spineObj:setVisible(false)
if show then
local needWave = DataManager.ChapterData:getChapterBoxNum(rewardChapterId, index)
local x = 370 * (index / boxCount)
local rewards = DataManager.ChapterData:getChapterBoxRewards(rewardChapterId, index)
local num = DataManager.ChapterData:getChapterBoxNum(rewardChapterId, index)
local rewardGot = DataManager.ChapterData:getChapterBoxRewardGot(rewardChapterId, index)
local icon = BOX_ICON[1]
if rewardGot then
icon = BOX_ICON[2]
end
objs.box:addClickListener(function()
if needWave <= curMaxWave and not rewardGot then
objs.spineObj:setVisible(true)
objs.spineObj:playAnimComplete("open", false, false, function()
ModuleManager.ChapterManager:openBox(rewardChapterId, index)
end)
else
ModuleManager.TipsManager:showRewardsTips(rewards, nil, objs.box)
end
end)
objs.boxIcon:setSprite(GConst.ATLAS_PATH.COMMON, icon)
objs.box:setAnchoredPositionX(x)
if needWave <= curMaxWave and not rewardGot then
objs.spineObj:setVisible(true)
objs.spineObj:playAnim("idle", true, false)
objs.spineObj:setAnchoredPositionX(x)
objs.boxIcon:setVisible(false)
else
objs.spineObj:setVisible(false)
objs.boxIcon:setVisible(true)
end
objs.desc:setAnchoredPositionX(x)
if boxCount == index then
objs.desc:setText(I18N:getGlobalText(I18N.GlobalConst.MAIN_DESC_1, rewardChapterId))
else
objs.desc:setText(num)
end
end
end
self:refreshFightBtn()
end
end
return ChapterComp