--[[ * @ClassName OperatingPanel * @Description 等级特权面板 * @Date 2019/5/27 11:14 * @Author MagicianJoker, fengliudianshao@outlook.com * @Copyright Copyright (c) 2019, MagicianJoker --]] ---@class VipPanel local VipPanel = quick_class("VipPanel", BasePanel) local this = VipPanel local orginLayer local maxVipLevel = 15 local curChooseLevel = 0 -- 当前选中的礼包内容 local giftData = {} -- 避免多次点击按钮 local btnBg = { [1] = "r_hero_button_001", -- 未激活, 已领取 [2] = "t_tequan_lingqu", -- 领取 } -- 按钮选中的颜色 local btnColor = { [1] = {nameColor = "#dca074FF", descColor = "#b6815bFF", img = "r_tequan_te_anniu01"}, -- 未选中 [2] = {nameColor = "#930f0fFF", descColor = "#60271bFF", img = "r_tequan_te_anniu02"}, -- 选中 } -- 上一个选择的按钮 local lastChoose = 0 local vipLevelConfig = ConfigManager.GetConfig(ConfigName.VipLevelConfig) function VipPanel:InitComponent() this.spLoader = SpriteLoader.New() orginLayer = 0 maxVipLevel = VipManager.GetMaxVipLevel() --self.bg = Util.GetGameObject(self.transform, "bg") --if Screen.width / Screen.height < 1080 / 1920 then -- screenAdapte(self.bg) --end self.BtnBack = Util.GetGameObject(self.transform, "btnBack") this.helpBtn = Util.GetGameObject(self.gameObject, "frame/helpBtn") this.helpPosition=this.helpBtn:GetComponent("RectTransform").localPosition --topPart self.topPart = Util.GetGameObject(self.transform, "frame/topPart") self.effect = Util.GetGameObject(self.topPart, "UI_Effect_VipPanel") effectAdapte(self.effect) -- 充值信息 self.chargeTip = Util.GetGameObject(self.topPart, "VipInfoPart/textGrid") self.moneyNeed = Util.GetGameObject(self.topPart, "VipInfoPart/textGrid/num"):GetComponent("Text") self.vipNextLevel = Util.GetGameObject(self.topPart, "VipInfoPart/textGrid/end"):GetComponent("Text") self.moneyIcon = Util.GetGameObject(self.topPart, "VipInfoPart/textGrid/icon/Image"):GetComponent("Image") self.rewardInfo = Util.GetGameObject(self.topPart, "VipInfoPart/reward/Text"):GetComponent("Image") self.vipCurLevel = Util.GetGameObject(self.topPart, "VipInfoPart/vipIcon/num"):GetComponent("Text") -- 充值进度信息 self.progressValue = Util.GetGameObject(self.topPart, "VipInfoPart/Slider/fill"):GetComponent("Image") self.progressText = Util.GetGameObject(self.topPart, "VipInfoPart/Slider/value"):GetComponent("Text") -- 购买月卡 self.monthRewardList = {} self.monthRewardGrid = Util.GetGameObject(self.topPart, "dailyGift/grid") self.dailyReward = {} for i = 1, 2 do self.dailyReward[i] = SubUIManager.Open(SubUIConfig.ItemView, self.monthRewardGrid.transform) self.dailyReward[i].gameObject:SetActive(false) end self.btnGetReward = Util.GetGameObject(self.topPart, "dailyGift/btnGet") self.btnText = Util.GetGameObject(self.btnGetReward, "Text"):GetComponent("Text") -- 领取按钮红点 self.redReward = Util.GetGameObject(self.btnGetReward, "redPoint") --midPart self.midPart = Util.GetGameObject(self.gameObject, "frame/midPart/privilegeRoot") self.moneyNeedTotal = Util.GetGameObject(self.midPart, "chargeTip/num"):GetComponent("Text") self.moneyIconTotal = Util.GetGameObject(self.midPart, "chargeTip/icon/Image"):GetComponent("Image") self.btnMidPart = Util.GetGameObject(self.gameObject, "frame/midPart") -- 增益描述 self.privilegeTitle = Util.GetGameObject(self.midPart, "imgTitle/title"):GetComponent("Text") self.privilegeContent = Util.GetGameObject(self.midPart, "privilegeList/viewPort/content") self.privilegeItem = Util.GetGameObject(self.privilegeContent, "itemPro") self.privilegeItem.gameObject:SetActive(false) self.privilegeList = {} -- 当前等级的特权礼包 self.giftGrid = Util.GetGameObject(self.midPart, "gfitContent/Scroll/grid") self.vipGfitList = {} -- 缓存6项 for i = 1, 6 do self.vipGfitList[i] = SubUIManager.Open(SubUIConfig.ItemView, self.giftGrid.transform) self.vipGfitList[i].gameObject:SetActive(false) end self.giftText = Util.GetGameObject(self.midPart, "gfitContent/orginPrice/price"):GetComponent("Text") self.giftIcon = Util.GetGameObject(self.midPart, "gfitContent/orginPrice/icon"):GetComponent("Image") self.discountLine = Util.GetGameObject(self.midPart, "gfitContent/orginPrice/line") self.btnGiftBuy = Util.GetGameObject(self.midPart, "gfitContent/btnBuy") self.buyIcon = Util.GetGameObject(self.midPart, "gfitContent/icon"):GetComponent("Image") self.buyText = Util.GetGameObject(self.midPart, "gfitContent/Text"):GetComponent("Text") -- 那一排的滑动按钮 self.levelBtnList = {} self.btnRedPointList = {} self.btnGrid = Util.GetGameObject(self.midPart, "btnScroll/grid") self.btnPre = Util.GetGameObject(self.midPart, "btnScroll/btnVipInfo") for i = 1, maxVipLevel + 1 do self.levelBtnList[i] = newObjToParent(self.btnPre, self.btnGrid) self.btnRedPointList[i] = Util.GetGameObject(self.levelBtnList[i], "redPoint") end this.UpView = SubUIManager.Open(SubUIConfig.UpView, self.transform) end function VipPanel:BindEvent() ----帮助按钮 Util.AddClick(this.helpBtn, function() UIManager.OpenPanel(UIName.HelpPopup, HELP_TYPE.VIP, this.helpPosition.x,this.helpPosition.y) end) Util.AddClick(self.BtnBack, function() PlaySoundWithoutClick(SoundConfig.Sound_UICancel) self:ClosePanel() end) for i = 1, maxVipLevel + 1 do Util.AddClick(self.levelBtnList[i], function () self:RefreshPanelStatus(i - 1) -- 刷新按钮红点状态 if VipManager.GetBuyBtnRedState(i - 1) == 0 and self.vipLevel >= i - 1 then VipManager.SetBuyBtnRed(i - 1, 1) CheckRedPointStatus(RedPointType.VIP_SHOP_DETAIL) CheckRedPointStatus(RedPointType.VipPrivilege) end self:SetBtnRedState(i-1) end) end --点击中间部分,设置为目前VIP等级的增益描述 -- Util.AddClick(self.btnMidPart, function () -- if curChooseLevel ~= self.vipLevel then -- self:RefreshPanelStatus(self.vipLevel) -- end -- end) Util.AddClick(self.btnGetReward, function () self:BtnRewardClick() end) Util.AddClick(self.btnGiftBuy, function () self:BuyVipGift() end) end --待功能扩展(试图打开某个状态) function VipPanel:OnOpen() this.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.Main }) end function VipPanel:OnSortingOrderChange() Util.AddParticleSortLayer(self.effect, self.sortingOrder - orginLayer) orginLayer = self.sortingOrder end function VipPanel:OnShow() ---- 临时使用活动的充值数量 self.chargedNum = VipManager.GetChargedNum() self.vipLevel = VipManager.GetVipLevel() Log("当前Vip等级" .. self.vipLevel) self.nextLevel = self.vipLevel + 1 self.nextLevel = self.nextLevel > maxVipLevel and maxVipLevel or self.nextLevel -- 设置充值信息 self:SetChargeInfo() --豪华礼包奖励信息 self:MonthGift() -- 滑动的特权按钮 self:SetBtnListState() self:InitAllRedBtn() -- 设置增益描述 lastChoose = self.vipLevel self:RefreshPanelStatus(self.vipLevel) end -- 刷新系统界面 function VipPanel:RefreshPanelStatus(curLevel) if lastChoose ~= curLevel then -- 重置 local bg = self.levelBtnList[lastChoose + 1]:GetComponent("Image") local name = Util.GetGameObject(self.levelBtnList[lastChoose + 1], "level"):GetComponent("Text") local desc = Util.GetGameObject(self.levelBtnList[lastChoose + 1], "info"):GetComponent("Text") bg.sprite = this.spLoader:LoadSprite(btnColor[1].img) local nameText = Language[11944] .. lastChoose local descTex = VipManager.GetFirstNameByLevel(lastChoose) name.text = string.format("%s", btnColor[1].nameColor, nameText) desc.text = string.format("%s", btnColor[1].descColor, descTex) end curChooseLevel = curLevel lastChoose = curChooseLevel local bg1 = self.levelBtnList[curChooseLevel + 1]:GetComponent("Image") local nameText1 = Language[11944] .. curChooseLevel local descTex1 = VipManager.GetFirstNameByLevel(curChooseLevel) local name1 = Util.GetGameObject(self.levelBtnList[curChooseLevel + 1], "level"):GetComponent("Text") local desc1 = Util.GetGameObject(self.levelBtnList[curChooseLevel + 1], "info"):GetComponent("Text") bg1.sprite = this.spLoader:LoadSprite(btnColor[2].img) name1.text = string.format("%s", btnColor[2].nameColor, nameText1) desc1.text = string.format("%s", btnColor[2].descColor, descTex1) self.privilegeTitle.text = string.format(Language[11945], curLevel) self.moneyNeedTotal.text = VipManager.CurLevelMoneyNeed(curLevel) self.moneyIconTotal.sprite = SetIcon(this.spLoader, 15) local VipLvConfig = vipLevelConfig[curLevel] assert(VipLvConfig, string.format("ConfigName.VipLevelConfig not find VipLevel:%s", curLevel)) self:SetVipPrivileges(curLevel) -- 刷新礼包内容 self:RefreshVipGift(curLevel) end -- 初始化刷新所有按钮红点状态 function VipPanel:InitAllRedBtn() for i = 1, maxVipLevel + 1 do VipPanel:SetBtnRedState(i - 1) end end function VipPanel:SetBtnRedState(level) local isShow = false isShow = VipManager.GetBtnListRed(level) self.btnRedPointList[level + 1]:SetActive(isShow) end ----------------------------- 特权信息显示 -------------------------------------- function VipPanel:SetChargeInfo() local maxLevelNeed = VipManager.CurLevelMoneyNeed(maxVipLevel) local need, nextLevelNeed = VipManager.GetNextLevelNeed() self.moneyNeed.text = need --self.chargeTip:SetActive(self.chargedNum < maxLevelNeed) self.vipNextLevel.text = self.nextLevel self.moneyIcon.sprite = SetIcon(this.spLoader, 15) self.rewardInfo.sprite = this.spLoader:LoadSprite(VIP_LEVEL_REWARD[self.nextLevel]) self.rewardInfo:SetNativeSize() self.vipCurLevel.text = self.vipLevel self.progressValue.fillAmount = self.chargedNum / nextLevelNeed self.progressText.text = self.chargedNum .. "/" .. nextLevelNeed self:RefreshBtnState() end function VipPanel:AddListener() Game.GlobalEvent:AddEvent(GameEvent.Vip.OnVipDailyRewardStatusChanged, self.OnVipDailyRewardStatusChanged, self) end function VipPanel:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.Vip.OnVipDailyRewardStatusChanged, self.OnVipDailyRewardStatusChanged, self) end -- 点击领取按钮 function VipPanel:BtnRewardClick() -- 豪华月卡的激活状态 local isActive = MonthCardManager.GetMonthCardIsOpen(MONTH_CARD_TYPE.LUXURYMONTHCARD)--VipManager.GetMonthCardOpenState() local getState = VipManager.GetRewardState() if not isActive then JumpManager.GoJump(36004) else if getState < 1 then -- 发送领取请求 NetManager.GetVipDailyReward(function(respond) VipManager.SetRewardVipLevel(self.vipLevel) UIManager.OpenPanel(UIName.RewardItemPopup, respond.drop, 1, function () self:RefreshBtnState() CheckRedPointStatus(RedPointType.VIP_SHOP_DETAIL) CheckRedPointStatus(RedPointType.VipPrivilege) end) end) else -- 设置为不可领取 PopupTipPanel.ShowTip(Language[11946]) end end end -- 设置领取按钮显示状态 function VipPanel:RefreshBtnState() local isActive = MonthCardManager.GetMonthCardIsOpen(MONTH_CARD_TYPE.LUXURYMONTHCARD)--VipManager.GetMonthCardOpenState() Log("豪华月卡是否激活 -- " .. tostring(isActive)) local getState = VipManager.GetRewardState() local str = "" if not isActive then str = Language[11947] else if getState < 1 then str = Language[11948] else str = Language[10101] end end -- 设置红点 self.redReward:SetActive(isActive and getState < 1) self.btnText.text = str end -- 5点刷新数据 function VipPanel:OnVipDailyRewardStatusChanged() self:RefreshBtnState() self:MonthGift() self:InitAllRedBtn() end ----------------------------- 豪华月卡每日礼包显示 -------------------------------- function VipPanel:MonthGift() local level = 0 local getState = VipManager.GetRewardState() local isLevelUp = self:IsLevelUped() --Log("升级结果 -- " .. tostring(isLevelUp)) --Log("getState" .. getState) if isLevelUp and getState > 0 then -- 升级过又领取了奖励 level = VipManager.GetRewardVipLevel() else level = VipManager.GetVipLevel() end Log("显示等级 " .. level .. "的礼包内容") local rewardData = vipLevelConfig[level].VipBoxDailyReward if not rewardData then Log(Language[11949]) return end for i = 1, 2 do this.dailyReward[i].gameObject:SetActive(i <= #rewardData) if rewardData[i] then this.dailyReward[i]:OnOpen(false, {rewardData[i][1],rewardData[i][2]}, 0.9) end end end function VipPanel:SetBtnListState() for i = 1, maxVipLevel + 1 do local btn = self.levelBtnList[i] Util.GetGameObject(btn, "level"):GetComponent("Text").text = Language[11944] .. i - 1 Util.GetGameObject(btn, "info"):GetComponent("Text").text = VipManager.GetFirstNameByLevel(i - 1) end end ------------------------------- 特权增益 -------------------------------------- --特权增益描述 function VipPanel:SetVipPrivileges(curVipLevel) if self.priThread then coroutine.stop(self.priThread) self.priThread = nil end table.walk(self.privilegeList, function(privilegeItem) privilegeItem:SetActive(false) end) local curVipData = PrivilegeManager.GetTipsByVipLv(curVipLevel) local tempNumber = 0 self.priThread = coroutine.start(function() for _, privilegeInfo in ipairs(curVipData) do if privilegeInfo.value == "" or privilegeInfo.value > 0 then tempNumber = tempNumber + 1 local item = self:GetPrivilegeItem(tempNumber) item:SetActive(false) -- local str = " " -- str = string.format("%s", privilegeInfo.value) if privilegeInfo.id==1 then --特权关卡挂机加成百分比 Util.GetGameObject(item, "title"):GetComponent("Text").text = privilegeInfo.content ..Language[11950]..(privilegeInfo.value*100-100).."%" else Util.GetGameObject(item, "title"):GetComponent("Text").text = privilegeInfo.content .. privilegeInfo.value end PlayUIAnim(Util.GetGameObject(item, "content")) coroutine.wait(0.03) --加成为0就别丢人现眼了 if privilegeInfo.id==1 and (privilegeInfo.value*100-100)==0 then item:SetActive(false) else item:SetActive(true) end end end end) end function VipPanel:GetPrivilegeItem(index) if self.privilegeList[index] then return self.privilegeList[index] else local newItem = newObjToParent(self.privilegeItem, self.privilegeContent) table.insert(self.privilegeList, newItem) return newItem end end ----------------------------------------------------------------------- --------------------------特权礼包购买 ---------------------------------- function VipPanel:RefreshVipGift(curLevel) local shopData = VipManager.vipShopData[curLevel + 1] if not shopData then Log("未能找到Vip等级为 " .. curLevel .. "的商店数据") return end local curGoodData = shopData.Goods for i = 1, 6 do self.vipGfitList[i].gameObject:SetActive(i <= #curGoodData) if curGoodData[i] then self.vipGfitList[i]:OnOpen(false, {curGoodData[i][1],curGoodData[i][2]}, 0.75) end end giftData = {} -- 设置购买按钮状态 local itemId = shopData.Id local costId, finalCost, orignalCost = ShopManager.calculateBuyCost(SHOP_TYPE.VIP_GIFT, itemId, 1) self.giftText.text = orignalCost self.giftIcon.sprite = SetIcon(this.spLoader, costId) self.buyIcon.sprite = SetIcon(this.spLoader, costId) giftData.shopType = SHOP_TYPE.VIP_GIFT giftData.shopItemId = itemId giftData.num = 1 giftData.costId = costId giftData.costNum = finalCost VipPanel:FreshBuyBtnState(giftData.costNum) end --购买礼包处理 function VipPanel:BuyVipGift() -- 你有资格买吗 if curChooseLevel > self.vipLevel then PopupTipPanel.ShowTip(Language[11951] .. curChooseLevel .. Language[11952]) return end -- 商品的剩余购买次数 local leftNum = ShopManager.GetShopItemRemainBuyTimes(giftData.shopType, giftData.shopItemId) if leftNum < 1 and leftNum ~= -1 then PopupTipPanel.ShowTip(Language[11953]) return end -- 钱钱是不是不够,找麻麻要吧 local haveNum = BagManager.GetItemCountById(giftData.costId) if haveNum < giftData.costNum then UIManager.OpenPanel(UIName.QuickPurchasePanel, { type = UpViewRechargeType.DemonCrystal }) return end ShopManager.RequestBuyShopItem(giftData.shopType, giftData.shopItemId, 1, function () VipPanel:FreshBuyBtnState(giftData.costNum) end) end -- 刷新购买按钮显示状态 function VipPanel:FreshBuyBtnState(costNum) -- 检测剩余购买次数 local leftNum = ShopManager.GetShopItemRemainBuyTimes(giftData.shopType, giftData.shopItemId) local canBuy = false if leftNum < 1 and leftNum ~= -1 then self.buyText.text = Language[11954] canBuy = false Util.SetGray(self.btnGiftBuy, true) else self.buyText.text = costNum canBuy = true Util.SetGray(self.btnGiftBuy, false) end end -- 判断出去面板后,是否升过级 function VipPanel:IsLevelUped() local isUp = false -- 今日领取奖励时的等级 local rewardLevel = VipManager.GetRewardVipLevel() if rewardLevel > 0 and rewardLevel ~= self.vipLevel then isUp = true else isUp = false end return isUp end -------------------------------------------------------------------- --跳转显示新手提示圈 function this.ShowGuideGo() JumpManager.ShowGuide(UIName.VipPanel, this.taskItemList[1].dealBtn) end function VipPanel:OnClose() if self.priThread then coroutine.stop(self.priThread) self.priThread = nil end if self.taskThread then coroutine.stop(self.taskThread) self.taskThread = nil end -- 目前的选择 local bg = self.levelBtnList[curChooseLevel + 1]:GetComponent("Image") local name = Util.GetGameObject(self.levelBtnList[curChooseLevel + 1], "level"):GetComponent("Text") local desc = Util.GetGameObject(self.levelBtnList[curChooseLevel + 1], "info"):GetComponent("Text") bg.sprite = this.spLoader:LoadSprite(btnColor[1].img) local namaText = Language[11944] .. curChooseLevel + 1 local descTex = VipManager.GetFirstNameByLevel(curChooseLevel) name.text = string.format("%s", btnColor[1].nameColor, namaText) desc.text = string.format("%s", btnColor[1].descColor, descTex) end function VipPanel:OnDestroy() this.spLoader:Destroy() SubUIManager.Close(this.UpView) end return VipPanel return VipPanel