local SheJiDaDian = {} local sortingOrder = 0 local globalActive = ConfigManager.GetConfig(ConfigName.GlobalActivity) local t = 3 --用来区分长按和点击的临界值 function SheJiDaDian:New(gameObject) local b = {} b.gameObject = gameObject b.transform = gameObject.transform setmetatable(b, { __index = SheJiDaDian }) return b end local itemDataList = {--捐献道具id--三个按钮的数字显示--三个按钮的图片--三个trigger [1] = { id = 50000 , leftNum = nil , value = 1}, [2] = { id = 50001 , leftNum = nil , value = 2}, [3] = { id = 50002 , leftNum = nil , value = 10} } --初始化组件(用于子类重写) function SheJiDaDian:InitComponent() self.spLoader = SpriteLoader.New() --leftUp self.leftUp = Util.GetGameObject(self.gameObject,"leftUp") self.rankPre = Util.GetGameObject(self.leftUp,"rank") self.rankGrid = Util.GetGameObject(self.leftUp,"grid") self.rankList = {} for i = 1 ,self.rankGrid.transform.childCount do self.rankList[i] = {} self.rankList[i].go = self.rankGrid.transform:GetChild(i-1).gameObject self.rankList[i].Ima = Util.GetGameObject(self.rankList[i].go,"Image"):GetComponent("Image") self.rankList[i].Ima.sprite = self.spLoader:LoadSprite("r_playerrumble_paiming_0"..i) self.rankList[i].textCom = Util.GetGameObject(self.rankList[i].go,"Text"):GetComponent("Text") end self.myScoreText = Util.GetGameObject(self.leftUp,"score/myScore") self.guildScoreText = Util.GetGameObject(self.leftUp,"score/guildScore") self.score = Util.GetGameObject(self.leftUp,"score/score"):GetComponent("Text") self.btnDetail = Util.GetGameObject(self.leftUp,"btnDetail") self.btnTeamRank = Util.GetGameObject(self.leftUp,"teamRank") self.btnPersonRank = Util.GetGameObject(self.leftUp,"personRank") self.select = Util.GetGameObject(self.leftUp,"select") --rightUp self.btnHelp= Util.GetGameObject(self.gameObject,"btnHelp") self.helpPosition=self.btnHelp:GetComponent("RectTransform").localPosition self.rightUp = Util.GetGameObject(self.gameObject,"rightUp") self.btnStore = Util.GetGameObject(self.rightUp,"store") self.btnRewardList = Util.GetGameObject(self.rightUp,"reward") self.zhenqibaogeBtn = Util.GetGameObject(self.rightUp,"zhenqibaogeBtn") self.zhenqibaogeBtn:GetComponent("Image").sprite = self.spLoader:LoadSprite("r_zhenqibaohe_zh") --center self.centerTime = Util.GetGameObject(self.gameObject,"center/time/num"):GetComponent("Text") self.btnGet = Util.GetGameObject(self.gameObject,"center/btnGet") self.effect = Util.GetGameObject(self.gameObject,"center/DynamicActivityPanel_daiji") self.effect2 = Util.GetGameObject(self.gameObject,"center/DynamicActivityPanel_dakai") self.leftTime = Util.GetGameObject(self.gameObject,"center/limitdi/limit"):GetComponent("Text") --bottomArea self.bottom = Util.GetGameObject(self.gameObject,"bottom") self.slider = Util.GetGameObject(self.bottom,"slider") self.sliderComp = Util.GetGameObject(self.slider,"Slider"):GetComponent("Slider") self.level = Util.GetGameObject(self.slider,"level"):GetComponent("Text") self.btnBox = Util.GetGameObject(self.slider,"reward/box") self.scoreText = Util.GetGameObject(self.slider,"score"):GetComponent("Text") self.boxEffect = Util.GetGameObject(self.btnBox,"UI_Effect_BaoXiang_KeKaiQi") self.items = Util.GetGameObject(self.bottom,"items") self.btnAdd = Util.GetGameObject(self.items,"item3/btnAdd") self.itemData = {} for i = 1, self.items.transform.childCount do self.itemData[i] = {} self.itemData[i].go = self.items.transform:GetChild(i-1).gameObject self.itemData[i].num = Util.GetGameObject(self.itemData[i].go,"text/num"):GetComponent("Text") self.itemData[i].donImg = Util.GetGameObject(self.itemData[i].go,"Image") self.itemData[i].trigger = Util.GetEventTriggerListener(self.itemData[i].donImg) self.itemData[i].OnPointerDo = function(go, data) self:OnPointerDown(go, data, i) end self.itemData[i].OnPointerUp = function(go, data) self:OnPointerUp(go,data) end self.itemData[i].trigger.onPointerDown = self.itemData[i].trigger.onPointerDown + self.itemData[i].OnPointerDo self.itemData[i].trigger.onPointerUp = self.itemData[i].trigger.onPointerUp + self.itemData[i].OnPointerUp end end function SheJiDaDian:OnPointerUp(Pointgo,data)--抬起 if PlayerManager.level < 50 or PlayerManager.familyId == 0 then return end if self.isPressed then LogGreen("111111111111111111111111111111111111111111111111") self.isPressed = false self:RefreshBottom(true) end end --点击或长按处理升级处理 function SheJiDaDian:OnPointerDown(Pointgo,data,i)--按下 if PlayerManager.level < 50 then PopupTipPanel.ShowTip("本活动需玩家等级达到五十级!") return end if PlayerManager.familyId == 0 then PopupTipPanel.ShowTip("请先加入公会!") return end self.curItemIndex = i if itemDataList[i].leftNum == 0 then PopupTipPanel.ShowTip("道具不足,请先获取道具") return end self.isPressed = true end --绑定事件(用于子类重写) function SheJiDaDian:BindEvent() Util.AddOnceClick(self.zhenqibaogeBtn, function() JumpManager.GoJump(40011) end) Util.AddOnceClick(self.btnHelp,function() UIManager.OpenPanel(UIName.HelpPopup,self.actConfig.HelpId,self.helpPosition.x,self.helpPosition.y) end) Util.AddOnceClick(self.btnGet,function() NetManager.GetSheJiRewardRequest(self.actId,function (_drop) self.effect2:SetActive(true) Timer.New(function() UIManager.OpenPanel(UIName.RewardItemPopup, _drop.drop,1,function() self:Refresh() end) end,0.5):Start() end) end) Util.AddOnceClick(self.btnRewardList,function() UIManager.OpenPanel(UIName.GeneralRankRewardPanel,2,self.myRank,self.actId)--需要活动id,和我的排名 end) Util.AddOnceClick(self.btnStore,function() JumpManager.GoJump(40018) end) Util.AddOnceClick(self.btnDetail,function() if self.curRankType == RANK_TYPE.GOLD_EXPER then--个人排行 UIManager.OpenPanel(UIName.RankingSingleListPanel,rankKingList[13]) elseif self.curRankType == RANK_TYPE.CELEBRATION_GUILD then--工会排行 UIManager.OpenPanel(UIName.RankingSingleListPanel,rankKingList[14]) end end) Util.AddOnceClick(self.btnTeamRank,function() self.curRankType = RANK_TYPE.CELEBRATION_GUILD self:LeftUpShow(self.curRankType) end) Util.AddOnceClick(self.btnPersonRank,function() self.curRankType = RANK_TYPE.GOLD_EXPER self:LeftUpShow(self.curRankType) end) Util.AddOnceClick(self.btnAdd,function () JumpManager.GoJump(40011) end) Util.AddOnceClick(self.btnBox,function () -- DynamicActivityManager.SetCurLevel(math.floor(self.curScore/(self.actReward[1].Values[2][1]))) UIManager.OpenPanel(UIName.GeneralRewardPopup,1,self.actType,self.actId) end) end --添加事件监听(用于子类重写) function SheJiDaDian:AddListener() Game.GlobalEvent:AddEvent(GameEvent.DynamicTask.OnGetReward, self.Refresh) end --移除事件监听(用于子类重写) function SheJiDaDian:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.DynamicTask.OnGetReward, self.Refresh) end --界面打开时调用(用于子类重写) function SheJiDaDian:OnOpen(_activityConfig,_index,parent) self.actConfig = _activityConfig self.pageIndex = _index self.parent = parent end function SheJiDaDian:OnSortingOrderChange(_sortingOrder) Util.SetParticleSortLayer(self.effect, _sortingOrder + 1) Util.SetParticleSortLayer(self.effect2, _sortingOrder + 1) end -- 打开,重新打开时回调 function SheJiDaDian:OnShow(_sortingOrder) self.gameObject:SetActive(true) -- Util.AddParticleSortLayer(self.effect, _sortingOrder - sortingOrder) -- Util.AddParticleSortLayer(self.effect2, _sortingOrder - sortingOrder) Util.SetParticleSortLayer(self.effect, _sortingOrder + 1) Util.SetParticleSortLayer(self.effect2, _sortingOrder + 1) sortingOrder = _sortingOrder self.actId = self.actConfig.ActId self.actType = self.actConfig.ActiveType > 0 and self.actConfig.ActiveType or self.actConfig.FunType if self.actConfig.IfBack == 1 then if self.actConfig.ActiveType > 0 then local id = ActivityGiftManager.IsActivityTypeOpen(self.actConfig.ActiveType) LogGreen("id:"..id) if id and id > 0 then self.actId = id local config = ConfigManager.TryGetConfigDataByThreeKey(ConfigName.ActivityGroups,"PageType",self.actConfig.PageType,"ActiveType",self.actConfig.ActiveType,"ActId",id) if config then self.actConfig = config end end end end FixedUpdateBeat:Add(self.OnUpdate, self)--长按方法注册 self:Refresh() self:CheckGuild() end --检查是否有公会 function SheJiDaDian:CheckGuild() if PlayerManager.familyId == 0 then UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.SheJiCheckGuild,function() self.parent.OnPageTabChange(1) end) end end --刷新整个页面 function SheJiDaDian:Refresh() self.curItemIndex = 0 self.numCount = 0 self.num = 0 self.isPressed = false self.isShortPress = false self.effect:SetActive(true) self.effect2:SetActive(false) self.ActInfo = ActivityGiftManager.GetActivityTypeInfo(self.actType)--活动数据 self.actReward = ConfigManager.GetAllConfigsDataByKey(ConfigName.ActivityRewardConfig,"ActivityId",self.actId) self:RefreshItemsData() self:TimeCountDown()--时间 self:LeftUpShow() self:RefreshRewardBox()--刷新奖励宝箱数据 end --刷新物品剩余数量和当前积分 function SheJiDaDian:RefreshItemsData() for i = 1, 3 do itemDataList[i].leftNum = BagManager.GetItemCountById(itemDataList[i].id) self.itemData[i].num.text = itemDataList[i].leftNum end self.curScore = self.ActInfo.mission[1].progress self.scoreText.text = ((self.curScore)%(self.actReward[1].Values[2][1])).."/"..self.actReward[1].Values[2][1] self.sliderComp.value = (((self.curScore))%(self.actReward[1].Values[2][1]))/self.actReward[1].Values[2][1] self.level.text = math.floor((self.curScore)/(self.actReward[1].Values[2][1])) .. "级" end function SheJiDaDian:RefreshRewardBox() self.canGetRewardList={} self.boxEffect:SetActive(false) self.btnBox:GetComponent("Image").enabled = true for i = 1, #self.ActInfo.mission do local curLevel = self.curScore/self.actReward[1].Values[2][1] if self.ActInfo.mission[i].state == 0 and curLevel >= i then table.insert(self.canGetRewardList,self.ActInfo.mission[i]) end end if #self.canGetRewardList > 0 then self.boxEffect:SetActive(true) self.btnBox:GetComponent("Image").enabled = false end end function SheJiDaDian:OnUpdate() if self.isPressed then if self.numCount > t then self.isShortPress = false self:RefreshBottom(false) self.numCount = 0 else self.isShortPress = true end self.numCount = self.numCount + 1 end end --发送捐献请求 function SheJiDaDian:RequestDonate(numCount) if numCount <= 0 then PopupTipPanel.ShowTip("道具不足,请先获取道具") return end NetManager.SheJiDonateItemRequest(itemDataList[self.curItemIndex].id,numCount,function() PopupTipPanel.ShowTip("成功献出"..(itemDataList[self.curItemIndex].value * numCount).."点贡献!") self:Refresh() CheckRedPointStatus(RedPointType.Celebration) end) end --刷新左上排行版 function SheJiDaDian:LeftUpShow(_curRankType) if _curRankType then self.curRankType = _curRankType else if not self.curRankType or self.curRankType == 0 then self.curRankType = RANK_TYPE.GOLD_EXPER end end self.myScoreText:SetActive(self.curRankType == RANK_TYPE.GOLD_EXPER) self.guildScoreText:SetActive(self.curRankType ~= RANK_TYPE.GOLD_EXPER) self.select.transform:SetParent(self.curRankType == RANK_TYPE.GOLD_EXPER and self.btnPersonRank.transform or self.btnTeamRank.transform) self.select.transform:SetSiblingIndex(1) self.select.transform.localPosition = Vector3.zero self.select.transform.localScale = Vector3.one DynamicActivityManager.SheJiGetRankData(self.curRankType,self.actId,function(allRankData,myRankData) for i = 1 ,#self.rankList do self.rankList[i].textCom.text = (self.curRankType == RANK_TYPE.GOLD_EXPER) and (allRankData[i] and allRankData[i].userName or "虚位以待") or (allRankData[i] and allRankData[i].guildName or "虚位以待") end local guildScore = myRankData.param1 > 0 and myRankData.param1 or 0 self.score.text = self.curRankType == RANK_TYPE.GOLD_EXPER and guildScore or self.ActInfo.mission[1].progress self.myRank = myRankData.rank end) end --刷新一次 function SheJiDaDian:RefreshBottom(isSend) if isSend then self.isPressed = false self.isShortPress = false if self.num < 1 then self.num = 1 end self:RequestDonate(self.num) else self.num = self.num + 1 itemDataList[self.curItemIndex].leftNum = itemDataList[self.curItemIndex].leftNum - 1 if itemDataList[self.curItemIndex].leftNum < 1 then self.isPressed = false self:RefreshBottom(true) return end self.itemData[self.curItemIndex].num.text = itemDataList[self.curItemIndex].leftNum self.curScore = self.curScore + itemDataList[self.curItemIndex].value self.scoreText.text = ((self.curScore)%(self.actReward[1].Values[2][1])).."/"..self.actReward[1].Values[2][1] self.sliderComp.value = (((self.curScore))%(self.actReward[1].Values[2][1]))/self.actReward[1].Values[2][1] self.level.text = math.floor((self.curScore)/(self.actReward[1].Values[2][1])) .. "级" end end --商店 function SheJiDaDian:StoreShow() if not self.shopView then self.shopView = SubUIManager.Open(SubUIConfig.ShopView, self.content.transform) end self.shopView:ShowShop(SHOP_TYPE.CELEBRATION_SHOP,sortingOrder) end --时间 function SheJiDaDian:TimeCountDown() local setting = ConfigManager.GetConfigDataByKey(ConfigName.GodSacrificeSetting,"ActivityId",self.actId) --活动结束时间 local canGet = false local actTime = self.ActInfo.endTime - GetTimeStamp() self.leftTime.text = Language[10028]..TimeToFelaxible(actTime) --宝箱领取重置时间 local timeOne = Today_N_OClockTimeStamp(setting.TimePointList[1]) - GetTimeStamp() local leftTimeOne = timeOne > 0 and timeOne or timeOne + 86400--距离下一个十二点的时间 local timeTwo = Today_N_OClockTimeStamp(setting.TimePointList[2]) - GetTimeStamp() local leftTimeTwo = timeTwo > 0 and timeTwo or timeTwo + 86400--距离下一个二十点的时间 local giftTime = leftTimeOne < leftTimeTwo and leftTimeOne or leftTimeTwo--取小的 local t1 = GetTimeStamp() - Today_N_OClockTimeStamp(setting.TimePointList[1]) local t2 = GetTimeStamp() - Today_N_OClockTimeStamp(setting.TimePointList[2]) if self.ActInfo.value == 0 then if (t1 > 0 and t1 < 1800) or (t2 > 0 and t2 < 1800) then canGet = true else canGet = false end else if (t1 > 0 and t1 < 1800) or (t2 > 0 and t2 < 1800) then if (GetTimeStamp() - self.ActInfo.value) < 1800 then canGet = false else canGet = true end else canGet = false end end self.centerTime.text = canGet == false and TimeToFelaxible(giftTime) or "奖励可领取" if self.timer1 then self.timer1:Stop() self.timer1 = nil end self.timer1 = Timer.New(function() self.leftTime.text = "剩余时间:"..TimeToFelaxible(actTime) self.centerTime.text = canGet == false and TimeToFelaxible(giftTime) or "奖励可领取" if actTime < 1 then self.timer1:Stop() self.timer1 = nil parent:ClosePanel() return end if giftTime < 0 then self:Refresh() end actTime = actTime -1 giftTime = giftTime - 1 end, 1, -1, true) self.timer1:Start() end --界面关闭时调用(用于子类重写) function SheJiDaDian:OnClose() self.gameObject:SetActive(false) if self.timer1 then self.timer1:Stop() self.timer1 = nil end end --界面销毁时调用(用于子类重写) function SheJiDaDian:OnDestroy() self.spLoader:Destroy() FixedUpdateBeat:Remove(self.OnUpdate, self) if self.timer1 then self.timer1:Stop() self.timer1 = nil end end return SheJiDaDian