local SheJiDaDian = quick_class("SheJiDaDian") local this = SheJiDaDian local orginLayer = 0 local parent local actReward={}--奖励数据 local activityId--活动Id local ActInfo={}--活动数据 local curRankType = RANK_TYPE.GOLD_EXPER local canGetRewardList = {} --可领取的宝箱 local isPressed = false--是否按下 local isShortPress = false--点击捐献 local trigger = false --道具不足的trigger local t = 20 --用来区分长按和点击的临界值 local curItemIndex = nil local numCount = 1 --用于计算按下的时长(长按的捐献个数 = 用于计算按下的时长 - t) local curScore = 0 local myRank local itemData = {--捐献道具id--三个按钮的数字显示--三个按钮的图片--三个trigger [1] = { id = 50000 , num = nil , leftNum = nil , donImg = nil , trigger = nil , value = 1}, [2] = { id = 50001 , num = nil , leftNum = nil , donImg = nil , trigger = nil , value = 2}, [3] = { id = 50002 , num = nil , leftNum = nil , donImg = nil , trigger = nil , value = 10} } function this:ctor(mainPanel, gameObject) this.mainPanel = mainPanel.transform this.gameObject = gameObject this:InitComponent(gameObject) this:BindEvent() end function this:InitComponent(gameObject) --down this.tabList = Util.GetGameObject(this.mainPanel,"bg/tabbox") this.btnBack = Util.GetGameObject(this.mainPanel,"bg/btnBack") this.bottomBar = Util.GetGameObject(this.mainPanel,"bg/bottomBar") --leftUp this.leftUp = Util.GetGameObject(this.mainPanel,"leftUp") this.firstName = Util.GetGameObject(this.leftUp,"text/first"):GetComponent("Text") this.secendName = Util.GetGameObject(this.leftUp,"text/secend"):GetComponent("Text") this.thirdName = Util.GetGameObject(this.leftUp,"text/third"):GetComponent("Text") this.myScoreText = Util.GetGameObject(this.leftUp,"myScore") this.guildScoreText = Util.GetGameObject(this.leftUp,"guildScore") this.score = Util.GetGameObject(this.leftUp,"text/score"):GetComponent("Text") this.btnDetail = Util.GetGameObject(this.leftUp,"btnDetail") this.btnTeamRank = Util.GetGameObject(this.leftUp,"teamRank") this.btnPersonRank = Util.GetGameObject(this.leftUp,"personRank") --rightUp this.btnHelp= Util.GetGameObject(this.gameObject,"btnHelp") this.helpPosition=this.btnHelp:GetComponent("RectTransform").localPosition this.rightUp = Util.GetGameObject(this.gameObject,"rightUp") this.btnStore = Util.GetGameObject(this.rightUp,"store") this.btnRewardList = Util.GetGameObject(this.rightUp,"reward") --center this.centerTime = Util.GetGameObject(this.gameObject,"center/time/num"):GetComponent("Text") this.btnGet = Util.GetGameObject(this.gameObject,"center/btnGet") --leftTime this.leftTime = Util.GetGameObject(this.gameObject,"limitdi/limit"):GetComponent("Text") --shop this.shop = Util.GetGameObject(this.gameObject,"shop") this.shopBack = Util.GetGameObject(this.shop,"shopBack/btnBack") this.content = Util.GetGameObject(this.shop,"content") this.livename=nil this.live = Util.GetGameObject(this.shop,"live") --bottomArea this.bottom = Util.GetGameObject(this.gameObject,"bottom") this.slider = Util.GetGameObject(this.bottom,"slider") this.value = Util.GetGameObject(this.slider,"Slider"):GetComponent("Slider") this.level = Util.GetGameObject(this.slider,"level"):GetComponent("Text") this.btnBox = Util.GetGameObject(this.slider,"reward/box") this.scoreText = Util.GetGameObject(this.bottom,"score"):GetComponent("Text") this.boxEffect = Util.GetGameObject(this.slider,"reward/box/UI_Effect_BaoXiang_KeKaiQi") this.items = Util.GetGameObject(this.bottom,"items") this.btnAdd = Util.GetGameObject(this.items,"item3/btnAdd") for i = 1, 3 do itemData[i].num = Util.GetGameObject(this.items,"item"..i.."/text/num"):GetComponent("Text") itemData[i].donImg = Util.GetGameObject(this.items,"item"..i.."/Image") itemData[i].trigger = Util.GetEventTriggerListener(itemData[i].donImg) itemData[i].trigger.onPointerDown = itemData[i].trigger.onPointerDown + function(go, data) this.OnPointerDown(go, data, i) end itemData[i].trigger.onPointerUp = itemData[i].trigger.onPointerUp + this.OnPointerUp end end function SheJiDaDian:BindEvent() Util.AddClick(this.btnHelp,function() UIManager.OpenPanel(UIName.HelpPopup,HELP_TYPE.Celebration,this.helpPosition.x,this.helpPosition.y) end) Util.AddClick(this.btnGet,function() ActInfo = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.Celebration)--活动数据 NetManager.GetSheJiRewardRequest(activityId,function (_drop) UIManager.OpenPanel(UIName.RewardItemPopup, _drop.drop,1,function() this:Refresh() end) end) end) Util.AddClick(this.btnRewardList,function() UIManager.OpenPanel(UIName.GeneralRankRewardPanel,2,myRank,activityId)--需要活动id,和我的排名 end) Util.AddClick(this.btnStore,function() -- this.effect:SetActive(false)--特效还没加,加好后放开 this.shop:SetActive(true) this.btnBack:SetActive(false) this.tabList:SetActive(false) this.bottomBar:SetActive(false) this.livename = "live2d_ui_h_52_xx_pf1" this.liveNode = poolManager:LoadLive(this.livename, this.live.transform, Vector3.New(0.25,0.25,0.25), Vector3.New(123,214,0)) this:StoreShow()--商店 end) Util.AddClick(this.shopBack,function() -- this.effect:SetActive(true)--特效还没加,加好后放开 this.shop:SetActive(false) this.btnBack:SetActive(true) this.tabList:SetActive(true) this.bottomBar:SetActive(true) poolManager:UnLoadLive(this.livename, this.liveNode) this.livename = nil end) Util.AddClick(this.btnDetail,function() if curRankType == RANK_TYPE.GOLD_EXPER then--个人排行 UIManager.OpenPanel(UIName.RankingSingleListPanel,rankKingList[13]) elseif curRankType == RANK_TYPE.CELEBRATION_GUILD then--工会排行 UIManager.OpenPanel(UIName.RankingSingleListPanel,rankKingList[14]) end end) Util.AddClick(this.btnTeamRank,function() curRankType = RANK_TYPE.CELEBRATION_GUILD this:LeftUpShow(curRankType) this.btnTeamRank:GetComponent("Image").sprite = Util.LoadSprite("r_guanka_sheji_zhenyinganniudi_01") this.btnPersonRank:GetComponent("Image").sprite = Util.LoadSprite("r_guanka_sheji_zhenyinganniudi_02") end) Util.AddClick(this.btnPersonRank,function() curRankType = RANK_TYPE.GOLD_EXPER this:LeftUpShow(curRankType) this.btnTeamRank:GetComponent("Image").sprite = Util.LoadSprite("r_guanka_sheji_zhenyinganniudi_02") this.btnPersonRank:GetComponent("Image").sprite = Util.LoadSprite("r_guanka_sheji_zhenyinganniudi_01") end) Util.AddOnceClick(this.btnAdd,function () UIManager.OpenPanel(UIName.DynamicActivityPanel,14) end) Util.AddOnceClick(this.btnBox,function () DynamicActivityManager.SetCurLevel(math.floor(curScore/(actReward[1].Values[2][1]))) UIManager.OpenPanel(UIName.GeneralRewardPopup,1,ActivityTypeDef.Celebration,activityId) end) end function this:OnShow(sortingOrder,_parent) parent = _parent orginLayer = sortingOrder FixedUpdateBeat:Add(this.OnUpdate, this)--长按方法注册 this:Refresh() this:CheckGuild() end --检查是否有公会 function this:CheckGuild() if PlayerManager.familyId == 0 then UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.SheJiCheckGuild) end end --刷新整个页面 function this:Refresh() trigger = false ActInfo = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.Celebration)--活动数据 activityId = ActInfo.activityId actReward = ConfigManager.GetAllConfigsDataByKey(ConfigName.ActivityRewardConfig,"ActivityId",activityId) -- Util.AddParticleSortLayer(this.effect, sortingOrder - orginLayer) this:RefreshItemsData() this:TimeCountDown()--时间 this:LeftUpShow() this:RefreshBottom()--刷新下部数字 this:RefreshRewardBox()--刷新奖励宝箱数据 end --刷新物品剩余数量和当前积分 function this:RefreshItemsData() for i = 1, 3 do itemData[i].leftNum = BagManager.GetItemCountById(itemData[i].id) end curScore = ActInfo.mission[1].progress end function this:RefreshRewardBox() canGetRewardList={} this.boxEffect:SetActive(false) this.btnBox:GetComponent("Image").enabled = true for i = 1, #ActInfo.mission do local curLevel = curScore/actReward[1].Values[2][1] if ActInfo.mission[i].state == 0 and curLevel >= i then table.insert(canGetRewardList,ActInfo.mission[i]) end end if #canGetRewardList > 0 then this.boxEffect:SetActive(true) this.btnBox:GetComponent("Image").enabled = false end end --点击或长按处理升级处理 function this.OnPointerDown(Pointgo,data,i)--按下 if PlayerManager.level < 50 then PopupTipPanel.ShowTip("本活动需玩家等级达到五十级!") return end if PlayerManager.familyId == 0 then PopupTipPanel.ShowTip("请先加入公会!") return end curItemIndex = i numCount = 1 isPressed = true end function this.OnPointerUp(Pointgo,data)--抬起 if PlayerManager.level < 50 or PlayerManager.familyId == 0 then return end if isShortPress then numCount = 1 this:RefreshBottom(numCount) this:RequestDonate(numCount) else if itemData[curItemIndex].leftNum > 0 then this:RequestDonate(numCount-t) end end isPressed = false isShortPress = false end function this.OnUpdate() if isPressed then numCount = numCount + 1 if numCount > t then isShortPress = false this:RefreshBottom(numCount-t) else if not isShortPress then isShortPress = true end end end end --发送捐献请求 function this:RequestDonate(numCount) if numCount <= 0 then PopupTipPanel.ShowTip(Language[11197]) return end if trigger and numCount == 1 then trigger = false this:Refresh() else NetManager.SheJiDonateItemRequest(itemData[curItemIndex].id,numCount,function() PopupTipPanel.ShowTip("成功献出"..(itemData[curItemIndex].value * numCount).."点贡献!") trigger = false this:Refresh() CheckRedPointStatus(RedPointType.Celebration) end) end end --刷新左上排行版 function this:LeftUpShow(_curRankType) if _curRankType then curRankType = _curRankType else curRankType = RANK_TYPE.GOLD_EXPER end this.myScoreText:SetActive(curRankType == RANK_TYPE.GOLD_EXPER) this.guildScoreText:SetActive(curRankType ~= RANK_TYPE.GOLD_EXPER) DynamicActivityManager.SheJiGetRankData(curRankType,ActInfo.activityId,function(allRankData,myRankData) if curRankType == RANK_TYPE.GOLD_EXPER then this.firstName.text = allRankData[1] and allRankData[1].userName or Language[11073] this.secendName.text = allRankData[2] and allRankData[2].userName or Language[11073] this.thirdName.text = allRankData[3] and allRankData[3].userName or Language[11073] else this.firstName.text = allRankData[1] and allRankData[1].guildName or Language[11073] this.secendName.text = allRankData[2] and allRankData[2].guildName or Language[11073] this.thirdName.text = allRankData[3] and allRankData[3].guildName or Language[11073] end local t = myRankData.param1 > 0 and myRankData.param1 or 0 -- LogPink("t:"..t) -- LogPink("ActInfo.mission[1].progress :"..ActInfo.mission[1].progress ) this.score.text = curRankType == RANK_TYPE.GOLD_EXPER and t or ActInfo.mission[1].progress myRank = myRankData.rank end) end --刷新进度条和剩余数量 function this:RefreshBottom(num) local score = 0 if num == nil then--初始、刷新进度条显示 num = 0 for i = 1, 3 do itemData[i].num.text = itemData[i].leftNum end this.scoreText.text = (curScore%(actReward[1].Values[2][1])).."/"..actReward[1].Values[2][1] else--实时更新进度条 --要判断是否还有道具进行捐献 if itemData[curItemIndex].leftNum - num < 0 then this:RequestDonate(num - 1) trigger = true isPressed = false -- return end itemData[curItemIndex].num.text = itemData[curItemIndex].leftNum - num score = itemData[curItemIndex].value * num this.scoreText.text = ((curScore + score)%(actReward[1].Values[2][1])).."/"..actReward[1].Values[2][1] end this.value.value = (((curScore + score))%(actReward[1].Values[2][1]))/actReward[1].Values[2][1] this.level.text = math.floor((curScore + score)/(actReward[1].Values[2][1])) .. Language[10072] end --商店 function this:StoreShow() if not this.shopView then this.shopView = SubUIManager.Open(SubUIConfig.ShopView, this.content.transform) end this.shopView:ShowShop(SHOP_TYPE.CELEBRATION_SHOP,orginLayer) end --时间 function this:TimeCountDown() local setting = ConfigManager.GetConfigDataByKey(ConfigName.GodSacrificeSetting,"ActivityId",activityId) --活动结束时间 local canGet = false local actTime = ActInfo.endTime - GetTimeStamp() this.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]) LogGreen("dao 12 dian:"..t1) LogGreen("dao 20 dian:"..t2) LogGreen("ActInfo.value:"..ActInfo.value) LogGreen("GetTimeStamp():"..GetTimeStamp()) LogGreen("GetTimeStamp() - ActInfo.value"..(GetTimeStamp() - ActInfo.value)) LogGreen("giftTime:"..giftTime) if 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() - ActInfo.value) < 1800 then canGet = false else canGet = true end else canGet = false end end -- LogGreen("canGet:"..tostring(canGet)) this.centerTime.text = canGet == false and TimeToFelaxible(giftTime) or Language[12183] if this.timer1 then this.timer1:Stop() this.timer1 = nil end this.timer1 = Timer.New(function() this.leftTime.text = Language[10028]..TimeToFelaxible(actTime) this.centerTime.text = canGet == false and TimeToFelaxible(giftTime) or Language[12183] if actTime < 1 then this.timer1:Stop() this.timer1 = nil parent:ClosePanel() return end if giftTime < 0 then this:Refresh() end actTime = actTime -1 giftTime = giftTime - 1 end, 1, -1, true) this.timer1:Start() end function this:OnSortingOrderChange(_sortingOrder) orginLayer = _sortingOrder end function this:OnHide() FixedUpdateBeat:Remove(this.OnUpdate, this) if this.timer1 then this.timer1:Stop() this.timer1 = nil end if this.shopView then this.shopView = SubUIManager.Close(this.shopView) this.shopView = nil end end --添加事件监听(用于子类重写) function this:AddListener() Game.GlobalEvent:AddEvent(GameEvent.DynamicTask.OnGetReward, this.Refresh) end --移除事件监听(用于子类重写) function this:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.DynamicTask.OnGetReward, this.Refresh) end return this