| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- local ActivityLimitRechargeItem = class('ActivityLimitRechargeItem', require('Activities/ActivityTypeItem'))
- function ActivityLimitRechargeItem:ctor()
- self.activeitesMap = {}
- self.activeitesList = {}
- self.needOpen = false
- end
- function ActivityLimitRechargeItem:SyncSrvData(datas, init)
- if not datas then
- return
- end
- --datas = {
- -- {
- -- activities_id = 1,
- -- start_time = int64.new('1603185150303'),
- -- end_time = int64.new('1603267780000'),
- -- },
- -- {
- -- activities_id = 2,
- -- start_time = int64.new('1603185150303'),
- -- end_time = int64.new('1603267780000'),
- -- }
- --}
- local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
- local cloneMap = clone(self.activeitesMap)
- self.activeitesMap = {}
- self.activeitesList = {}
- local needDisplayState = false
- for _,v in pairs(datas) do
- if curTime <= v.end_time then
- if not self.activeitesMap[v.activities_id] then
- local data = {}
- data.activitiesId = v.activities_id
- data.startTime = v.start_time
- data.endTime = v.end_time
- --data.rpState = false
- if data.endTime > 0 then
- data.remainTime = ManagerContainer.LuaTimerMgr:GetRemainSecondsWithUInt64(data.endTime)
- end
- local cfgData = ManagerContainer.CfgMgr:GetActivitiesDiscountsCfgById(data.activitiesId)
- if cfgData then
- self.activeitesMap[data.activitiesId] = data
- self.activeitesList[#self.activeitesList + 1] = data
-
- if not cloneMap[v.activities_id] then
- if not init then
- if cfgData.PopupWindow == 1 then
- self.needOpen = true
- end
- data.rpState = true
- self:SaveLocalRPState(data.activitiesId, data.rpState)
- else
- local state = self:GetLocalRPState(data.activitiesId)
- data.rpState = state
- end
-
- if cfgData.TriggeringCondition then
- if cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.BaseLevel
- or cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.PayAmount
- or cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.HeroStrength
- or cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.HeroLevel
- or cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.SkillLevelUp
- then
- needDisplayState = true
- end
- end
- else
- data.rpState = cloneMap[v.activities_id].rpState
- end
- end
- else
- local data = self.activeitesMap[v.activities_id]
- data.activitiesId = v.activities_id
- data.startTime = v.start_time
- data.endTime = v.end_time
- data.rpState = false
- self:SaveLocalRPState(data.activitiesId, data.rpState)
- if data.endTime > 0 then
- data.remainTime = ManagerContainer.LuaTimerMgr:GetRemainSecondsWithUInt64(data.endTime)
- end
- end
- end
- end
- CommonUtil.ArraySortSelections(self.activeitesList, Enum.TableSortRule.Up, "startTime")
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.LIMIT_RECHARGE_OPEN_NTF)
- if needDisplayState then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.LIMIT_RECHARGE_OPEN_UI_NTF)
- end
- self:RefreshLimitRechargeRPState()
- self:StopTimer()
- if #self.activeitesList > 0 then
- self.updateTimer = Timer.New(function()
- self:UpdateActivitiesTime()
- end, 1, -1)
- self.updateTimer:Start()
- end
- end
- function ActivityLimitRechargeItem:SaveLocalRPState(id, state)
- local uid = ManagerContainer.DataMgr.UserData:GetUserId()
- UnityEngine.PlayerPrefs.SetInt(tostring(uid).."_ActivityLimitRecharge_"..tostring(id), state and 1 or 0)
- end
- function ActivityLimitRechargeItem:GetLocalRPState(id)
- local uid = ManagerContainer.DataMgr.UserData:GetUserId()
- local state = UnityEngine.PlayerPrefs.GetInt(tostring(uid).."_ActivityLimitRecharge_"..tostring(id))
- return state == 1
- end
- function ActivityLimitRechargeItem:UpdateActivitiesTime()
- local removed = false
- for i = #self.activeitesList, 1, -1 do
- local data = self.activeitesList[i]
- data.remainTime = data.remainTime - 1
- if data.remainTime <= 0 then
- self.activeitesMap[data.activitiesId] = nil
- table.remove(self.activeitesList, i)
- removed = true
- end
- end
- if removed then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.LIMIT_RECHARGE_OPEN_NTF)
- end
- if #self.activeitesList == 0 then
- self:StopTimer()
- end
- end
- function ActivityLimitRechargeItem:StopTimer()
- if self.updateTimer then
- self.updateTimer:Stop()
- self.updateTimer = nil
- end
- end
- function ActivityLimitRechargeItem:GetRemainTime(id)
- if not self.activeitesMap[id] then return 0 end
- return FormatTime2(self.activeitesMap[id].remainTime)
- end
- function ActivityLimitRechargeItem:RemoveEndTimeActivity(id)
- for i = 1, #self.activeitesList do
- if self.activeitesList[i].activitiesId == id then
- self.activeitesMap[self.activeitesList[i].activitiesId] = nil
- table.remove(self.activeitesList, i)
- return
- end
- end
- end
- function ActivityLimitRechargeItem:RefreshRemainTime(id)
- if not self.activeitesMap[id] then return 0 end
- if self.activeitesMap[id].remainTime <= 0 then return end
- self.activeitesMap[id].remainTime = self.activeitesMap[id].remainTime - 1
- return FormatTime2(self.activeitesMap[id].remainTime)
- end
- function ActivityLimitRechargeItem:HasOpened(id)
- self.needOpen = false
- if self.activeitesMap[id] then
- self.activeitesMap[id].rpState = false
- self:SaveLocalRPState(id, false)
- end
- self:RefreshLimitRechargeRPState()
- end
- function ActivityLimitRechargeItem:GetCount()
- return #self.activeitesList
- end
- function ActivityLimitRechargeItem:RefreshLimitRechargeRPState()
- for _,v in pairs(self.activeitesMap) do
- if v.rpState then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.LimitRecharge, true)
- return
- end
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.LimitRecharge, false)
- end
- function ActivityLimitRechargeItem:AutoGetOpenActivityId()
- if #self.activeitesList == 0 then return end
- for i = #self.activeitesList, 1, -1 do
- local data = self.activeitesList[i]
- if data.rpState then
- return data.activitiesId, i
- end
- end
- return self.activeitesList[1].activitiesId, 1
- end
- function ActivityLimitRechargeItem:GetIdxById(id)
- for i = #self.activeitesList, 1, -1 do
- local data = self.activeitesList[i]
- if data.activitiesId == id then
- return i
- end
- end
- return
- end
- function ActivityLimitRechargeItem:GetIdByIdx(idx)
- for i = #self.activeitesList, 1, -1 do
- local data = self.activeitesList[i]
- if i == idx then
- return data.activitiesId
- end
- end
- return
- end
- function ActivityLimitRechargeItem:GetLimitDataByIdx(idx)
- return self.activeitesList[idx]
- end
- function ActivityLimitRechargeItem:IsLimitRechargeExist()
- if #self.activeitesList == 0 then return false end
- local result = false
- local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
- for _,v in pairs(self.activeitesMap) do
- if v.endTime > 0 and curTime < v.endTime then
- result = true
- break
- end
- end
- return result
- end
- return ActivityLimitRechargeItem
|