miduo_client/Assets/ManagedResources/~Lua/Modules/DynamicActivity/SheJiDaDian.lua

443 lines
17 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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