local MainComp = class("MainComp", LuaComponent) local BG_PREFIX = "assets/arts/textures/background/chapter/%s.png" local PATTERN_ICON = { [GConst.StageConst.CHAPTER_PATTERN.HARD] = {"common_menu_6", "common_decoration_16"}, [GConst.StageConst.CHAPTER_PATTERN.NORMAL] = {"common_menu_7", "common_decoration_15"} } function MainComp:refresh(childPage) self.childPage = childPage self.showLeftRed = false self.showRightRed = false self.showLeftSideBar = true self.showRightSideBar = true -- self:_display() self:_addListeners() end function MainComp:_display() local uiMap = self:getBaseObject():genAllChildren() self.rightSideBarBg = uiMap["main_comp.right_node"] self.leftSideBarBg = uiMap["main_comp.left_node"] self.leftArrow = uiMap["main_comp.left_node.arrow"] self.rightArrow = uiMap["main_comp.right_node.arrow"] -- 宝箱相关 self.boxImg = uiMap["main_comp.box_touch_1"] self.boxImgShadow = uiMap["main_comp.box_touch_1_shadow"] self.boxShakeImg = uiMap["main_comp.box_touch_1.box_shakeImg"] self.boxTx = uiMap["main_comp.box_tx"] self.boxImgShadow:setActive(false) self.boxImgShadow:setLocalScale(0.8,0.8,0.8) self:refreshBoxShakeEff(true) self.btnGM = uiMap["main_comp.gm_btn"] self.btnGM:setVisible(not Platform:getIsPublishChannel(),2) self.btnGM:addClickListener(function() ModuleManager.DevToolManager:showOrHideDevListUI() end) -- self:refreshChapter() -- self:refreshRedPoint() end function MainComp:_addListeners() local uiMap = self:getBaseObject():genAllChildren() -- 战斗按钮 uiMap["main_comp.hang_up_node.fight_btn"]:addClickListener(function() self:onFightBtnClick() end) end function MainComp:onFightBtnClick() ModuleManager.BattleManager:playBattle(nil, GConst.BattleConst.BATTLE_TYPE.STAGE) end function MainComp:onClickPattern() local chapterId = DataManager.StageData:getChapterId() local pattern = DataManager.StageData:getChapterPattern(chapterId) if self.childPage then pattern = self.childPage self.childPage = nil elseif pattern == GConst.StageConst.CHAPTER_PATTERN.HARD then pattern = GConst.StageConst.CHAPTER_PATTERN.NORMAL else pattern = GConst.StageConst.CHAPTER_PATTERN.HARD end local maxId = DataManager.StageData:getMaxChapterId(pattern) local maxCfg = ConfigManager:getConfig("chapter")[maxId] if maxCfg and maxCfg.next_chapter then maxId = maxCfg.next_chapter elseif not maxCfg and pattern == GConst.StageConst.CHAPTER_PATTERN.HARD then maxId = DataManager.StageData:getDefaultHardId() elseif not maxCfg then maxId = DataManager.StageData:getDefaultId() end DataManager.StageData:changeChapterId(maxId) self:_display() end function MainComp:refreshChapter() local curId = DataManager.StageData:getChapterId() local pattern = DataManager.StageData:getChapterPattern(curId) local cfg = ConfigManager:getConfig("chapter")[curId] local uiMap = self:getBaseObject():genAllChildren() self:initHardChapterUI(uiMap, pattern, cfg) self:initFightBtn(uiMap, cfg.cost) self:setChapterTxtUI(uiMap, curId) uiMap["main_comp.box_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.CHAPTER_BOX_TITLE)) uiMap["main_comp.chapter_img"]:setTexture(string.format(BG_PREFIX, cfg.scenes.."_main")) self:refreshBoxShakeEff() end --endregion --region UI初始化 function MainComp:refreshBoxShakeEff(onlyKill) self.boxShakeImg:setLocalRotation(0,0,0) -- GFunc.getShakeSeqRotate(self.boxShakeImg,nil) end function MainComp:initFightBtn(uiMap,cost) local btnTx = I18N:getGlobalText(I18N.GlobalConst.CONTINUE_DESC) uiMap["main_comp.hang_up_node.fight_btn.desc"]:setText(btnTx) uiMap["main_comp.hang_up_node.fight_btn.desc_2"]:setText(cost) end function MainComp:initHardChapterUI(uiMap, pattern, cfg) --暂时屏蔽困难按钮 if true then uiMap["main_comp.hard_btn"]:setVisible(false) return end local hardBtn = uiMap["main_comp.hard_btn"] local atmosphereNode = uiMap["main_comp.atmosphere_node"] atmosphereNode:setVisible(false) if ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.HARD_STAGE, true) then hardBtn:setVisible(true) local text = uiMap["main_comp.hard_btn.desc"] local kulou = uiMap["main_comp.hard_btn.kulo_img"] if pattern == GConst.StageConst.CHAPTER_PATTERN.NORMAL then atmosphereNode:setVisible(false) text:setText(I18N:getGlobalText(I18N.GlobalConst.HARD_DESC)) elseif pattern == GConst.StageConst.CHAPTER_PATTERN.HARD then atmosphereNode:setVisible(true) text:setText(I18N:getGlobalText(I18N.GlobalConst.SIMPLY_DESC)) if cfg and cfg.scenes_a then uiMap["main_comp.atmosphere_node.top"]:setTexture("assets/arts/textures/background/main/" .. cfg.scenes_a .. ".png") end end if PATTERN_ICON[pattern] then hardBtn:setSprite(GConst.ATLAS_PATH.COMMON, PATTERN_ICON[pattern][1]) kulou:setSprite(GConst.ATLAS_PATH.COMMON, PATTERN_ICON[pattern][2]) end else hardBtn:setVisible(false) end end function MainComp:setChapterTxtUI(uiMap,curChapterId) uiMap["main_comp.chapter_name"]:setText(I18N:getConfig("chapter")[curChapterId].name) local chapterPassedTx = uiMap["main_comp.chapter_passed"] local info = DataManager.StageData:getChapterInfo(curChapterId) local content = "" if info.passed then content = I18N:getGlobalText(I18N.GlobalConst.ALREADY_PASS_DESC) else local wave = info.bestWave or 0 content = I18N:getGlobalText(I18N.GlobalConst.PASS_DESC_2, wave.."/"..self:getMaxWave()) end chapterPassedTx:setText(content) end function MainComp:getMaxWave() local chapterId = DataManager.StageData:getChapterId() self.generateSteps = DataManager.StageData:getChapterGenMonsterSteps(chapterId) or GConst.EMPTY_TABLE self.generateChapterCfg = ConfigManager:getConfig("chapter")[chapterId] self.generateStageCfg = ConfigManager:getConfig("story_stage") local maxWave = 0 for i,v in ipairs(self.generateChapterCfg.stage) do local stageCfg = self.generateStageCfg[v] if stageCfg and stageCfg.wave_type ~= GConst.BattleConst.STEP_TYPE.ROUGE and not stageCfg.is_tutorial then maxWave = maxWave + 1 end end return maxWave end function MainComp:calcLeftBarIconPos(leftNum) local maxColumnNum = self:getMaxColumnNum() local w = 104 local h = 0 local showArrow = false--leftNum > 2 if leftNum <= maxColumnNum then if showArrow then h = 104 * leftNum + 84 else h = 104 * leftNum + 28 end else w = 208 h = 104 * maxColumnNum end self.leftArrow:removeRedPoint() if not self.showLeftSideBar then if leftNum > 2 then h = 104 + 84 else h = 104 + 28 end if self.showLeftRed then self.leftArrow:addRedPoint(12, 8, 0.5) end end self.leftArrow:setAnchoredPositionX(47) if leftNum <= maxColumnNum or not self.showLeftSideBar then self.leftArrow:setAnchoredPositionX(0) end self.leftArrow:setActive(showArrow) self.leftSideBarBg:setSizeDelta(w, h) if leftNum <= 0 then self.leftSideBarBg:setVisible(false) else self.leftSideBarBg:setVisible(true) end end function MainComp:calcRightBarIconPos(rightNum) local maxColumnNum = self:getMaxColumnNum() local w = 104 local h = 0 local showArrow = false--rightNum > 2 if rightNum <= maxColumnNum then if showArrow then h = 104 * rightNum + 84 else h = 104 * rightNum + 28 end else w = 208 h = 104 * maxColumnNum end self.rightArrow:removeRedPoint() if not self.showRightSideBar then w = 104 if rightNum > 2 then h = 104 + 84 else h = 104 + 28 end if self.showRightRed then self.rightArrow:addRedPoint(12, 8, 0.5) end end self.rightArrow:setAnchoredPositionX(-47) if rightNum <= maxColumnNum or not self.showRightSideBar then self.rightArrow:setAnchoredPositionX(0) end self.rightArrow:setVisible(showArrow) self.rightSideBarBg:setSizeDelta(w, h) if rightNum <= 0 then self.rightSideBarBg:setVisible(false) else self.rightSideBarBg:setVisible(true) end end function MainComp:getMaxColumnNum() if not self.maxColumnNum then local screenOffsetY = GFunc.calculateFitSizeY() self.maxColumnNum = 5 + screenOffsetY // 104 end return self.maxColumnNum end function MainComp:getSideBtnPos(btnNum, offsetY, isRight) local x = 0 local y = offsetY local maxColumnNum = self:getMaxColumnNum() btnNum = btnNum + 1 if btnNum < maxColumnNum then offsetY = offsetY - 104 else local num = btnNum - maxColumnNum if num > 0 then if not isRight then x = 99 else x = -99 end end offsetY = -47.5 - num * 104 end return offsetY, btnNum, x, y end function MainComp:initFirstRechargeUI(offsetLy, leftNum, x, y) -- 首充礼包 if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.FIRST_CHARGE, true) or DataManager.ActivityGiftData:isFirstGiftClaimed() then GFunc.getShakeSeq(self.firstRechargeBtn, true) self.firstRechargeBtn:setVisible(false) else if (not DataManager.ActivityGiftData:getCheckUI(GConst.ActivityConst.CHECK_UI.firstRecharge)) and self.showLeftSideBar then GFunc.getShakeSeq(self.firstRechargeBtn, nil, 1, true) else GFunc.getShakeSeq(self.firstRechargeBtn, true) end offsetLy, leftNum, x, y = self:getSideBtnPos(leftNum, offsetLy) self.firstRechargeBtn:setVisible(true) if (not self.showLeftSideBar) and leftNum > 1 then self.firstRechargeBtn:setVisible(false) end self.firstRechargeBtn:setAnchoredPosition(x, y) end return offsetLy, leftNum, x, y end function MainComp:initDcBtnUI(offsetLy, leftNum, x, y) if CS.BF.BFMain.IsShenhe then return offsetLy, leftNum, x, y end offsetLy, leftNum, x, y = self:getSideBtnPos(leftNum, offsetLy) self.dcBtn:setVisible(true) if (not self.showLeftSideBar) and leftNum > 1 then GFunc.getShakeSeqRotate(self.dcIcon,true) self.dcBtn:setVisible(false) else GFunc.getShakeSeqRotate(self.dcIcon,nil, true) end self.dcBtn:setAnchoredPosition(x, y) return offsetLy, leftNum, x, y end --endregion --region 右侧按钮排版 function MainComp:initLvCardUI(offsetY, rightNum, x, y) -- 成长基金 if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ACT_LEVEL_GIFT, true) or DataManager.ActivityGiftData:isLvGiftFinish() then GFunc.getShakeSeq(self.lvGiftBtn, true) self.lvGiftBtn:setVisible(false) else if (not DataManager.ActivityGiftData:isLvGiftOpen()) and self.showRightSideBar then if not DataManager.ActivityGiftData:getCheckUI(GConst.ActivityConst.CHECK_UI.lvGift) then GFunc.getShakeSeq(self.lvGiftBtn, nil, 1, true) else GFunc.getShakeSeq(self.lvGiftBtn, true) end else if DataManager.ActivityGiftData:showLvGiftRedPoint() and self.showRightSideBar then GFunc.getShakeSeq(self.lvGiftBtn, nil, 1, true) else GFunc.getShakeSeq(self.lvGiftBtn, true) end end offsetY, rightNum, x, y = self:getSideBtnPos(rightNum, offsetY, true) self.lvGiftBtn:setVisible(true) if (not self.showRightSideBar) and rightNum > 1 then self.lvGiftBtn:setVisible(false) end self.lvGiftBtn:setAnchoredPosition(x, y) end return offsetY, rightNum, x, y end function MainComp:initTaskUI(offsetY, rightNum, x, y) if CS.BF.BFMain.IsShenhe then self.taskBtn:setActive(false) self.boxImg:setAnchoredPositionX(0) self.boxTx:setAnchoredPositionX(0) self.boxImgShadow:setAnchoredPositionX(0) return offsetY, rightNum, x, y end -- 任务 : 开启后常驻 if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.TASK, true) then GFunc.getShakeSeq(self.taskBtn, true) self.taskBtn:setVisible(false) else if DataManager.TaskData:showRedPoint() and self.showRightSideBar then GFunc.getShakeSeq(self.taskBtn, nil, 1, true) else GFunc.getShakeSeq(self.taskBtn, true) end offsetY, rightNum, x, y = self:getSideBtnPos(rightNum, offsetY, true) self.taskBtn:setVisible(true) if (not self.showRightSideBar) and rightNum > 1 then self.taskBtn:setVisible(false) end self.taskBtn:setAnchoredPosition(x, y) end return offsetY, rightNum, x, y end function MainComp:initPopGiftUI(offsetY, rightNum, x, y) if #self.popData <= 0 then GFunc.getShakeSeq(self.popGiftBtn, true) self.popGiftBtn:setVisible(false) else self.popGiftBtn:setVisible(true) self.popGiftBtn:setAnchoredPositionY(offsetY) if #self.popData > 0 then GFunc.getShakeSeq(self.popGiftBtn, nil, 1, true) else GFunc.getShakeSeq(self.popGiftBtn, true) end offsetY, rightNum, x, y = self:getSideBtnPos(rightNum, offsetY, true) end return offsetY, rightNum, x, y end function MainComp:updateTime() self:refreshPopUI() self:refreshRedPoint() end function MainComp:refreshPopUI() if self.popData and #self.popData > 0 then local data = self.popData[1] local nowTime = Time:getServerTime() local endTime = data.endTime or 0 if nowTime > endTime then self.popData = DataManager.ActivityGiftData:getPopGiftData() self.popGiftCd:setText("") return end self.popGiftCd:setText(GFunc.getTimeStrWithHMS(endTime - nowTime)) end end --region 红点 function MainComp:refreshRedPoint() -- self.boxRedPoint = self:chapterBoxRedPoint() -- -- 两侧按钮 -- self.showLeftRed = self:showLeftRedPoint() -- self.showRightRed = self:showRightRedPoint() end function MainComp:getIsShowRedPoint() return self.boxRedPoint or self.showLeftRed or self.showRightRed end function MainComp:showLeftRedPoint() local sevenDayRed = self:showSevenDayRedPoint() local rechargeRed = self:refreshFirstRechargeRedPoint() return sevenDayRed or rechargeRed end function MainComp:showRightRedPoint() local lvGiftRedPoint = self:refreshLvGiftRedPoint() local taskRedPoint = self:refreshTaskRedPoint() return lvGiftRedPoint or taskRedPoint end function MainComp:showSevenDayRedPoint() if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ACT_SEVENDAY, true) then return false end return DataManager.SevenDayData:getRedPoint() end function MainComp:chapterBoxRedPoint() -- local showRedPoint = DataManager.StageData:showMainCompRedPoint() -- if showRedPoint then -- self.boxImg:addRedPoint(58, 46, 0.8) -- GFunc.getShakeSeqRotate(self.boxShakeImg,nil, true) -- else -- self.boxImg:removeRedPoint() -- GFunc.getShakeSeqRotate(self.boxShakeImg,true) -- end -- return showRedPoint end function MainComp:refreshLvGiftRedPoint() if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.ACT_LEVEL_GIFT, true) then return false end local giftHallNeedRp = false if DataManager.ActivityGiftData:showLvGiftRedPoint() then self.lvGiftBtn:addRedPoint(30, 30, 0.6) giftHallNeedRp = true else self.lvGiftBtn:removeRedPoint() end return giftHallNeedRp end function MainComp:refreshFirstRechargeRedPoint() if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.FIRST_CHARGE, true) then return false end if DataManager.ActivityGiftData:canClaimFirstGift() then self.firstRechargeBtn:addRedPoint(30, 30, 0.6) return true else self.firstRechargeBtn:removeRedPoint() end end function MainComp:refreshTaskRedPoint() if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.TASK, true) then return false end if DataManager.TaskData:showRedPoint() then self.taskBtn:addRedPoint(30, 30, 0.6) return true else self.taskBtn:removeRedPoint() end return false end --endregion return MainComp