forked from endernon/PGRData
95 lines
2.5 KiB
Lua
95 lines
2.5 KiB
Lua
|
local XFunctionTime = XClass(nil, "XFunctionTime")
|
||
|
|
||
|
local Default = {
|
||
|
TimeId = 0,
|
||
|
StartTime = 0,
|
||
|
EndTime = 0,
|
||
|
Timer = nil,
|
||
|
}
|
||
|
|
||
|
function XFunctionTime:Ctor(timeId)
|
||
|
for key, v in pairs(Default) do
|
||
|
self[key] = v
|
||
|
end
|
||
|
|
||
|
self.TimeId = timeId
|
||
|
end
|
||
|
|
||
|
function XFunctionTime:CreateTimer()
|
||
|
if self.Timer then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if self:NotOpen() then
|
||
|
self.Timer = XScheduleManager.ScheduleAtTimestamp(function()
|
||
|
XEventManager.DispatchEvent(XEventId.EVENT_TIMEID_BOUND_PREFIX .. self.TimeId, XFunctionManager.TimeState.Start, self.TimeId)
|
||
|
self.Timer = self:CreateExitTimer()
|
||
|
end, self.StartTime)
|
||
|
elseif self:IsEnd() then
|
||
|
XEventManager.DispatchEvent(XEventId.EVENT_TIMEID_BOUND_PREFIX .. self.TimeId, XFunctionManager.TimeState.End, self.TimeId)
|
||
|
else
|
||
|
XEventManager.DispatchEvent(XEventId.EVENT_TIMEID_BOUND_PREFIX .. self.TimeId, XFunctionManager.TimeState.Start, self.TimeId)
|
||
|
self.Timer = self:CreateExitTimer()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XFunctionTime:CreateExitTimer()
|
||
|
return XScheduleManager.ScheduleAtTimestamp(function()
|
||
|
XEventManager.DispatchEvent(XEventId.EVENT_TIMEID_BOUND_PREFIX .. self.TimeId, XFunctionManager.TimeState.End, self.TimeId)
|
||
|
self.Timer = nil
|
||
|
end, self.EndTime)
|
||
|
end
|
||
|
|
||
|
function XFunctionTime:UpdateData(data)
|
||
|
self.StartTime = data.StartTime or 0
|
||
|
self.EndTime = data.EndTime or 0
|
||
|
if self.Timer then
|
||
|
XScheduleManager.UnSchedule(self.Timer)
|
||
|
self.Timer = nil
|
||
|
self:CreateTimer()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XFunctionTime:GetStartTime()
|
||
|
return self.StartTime
|
||
|
end
|
||
|
|
||
|
function XFunctionTime:GetEndTime()
|
||
|
return self.EndTime
|
||
|
end
|
||
|
|
||
|
function XFunctionTime:NotOpen()
|
||
|
local nowTime = XTime.GetServerNowTimestamp()
|
||
|
local startTime = self:GetStartTime()
|
||
|
if startTime > 0 and nowTime < startTime then
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XFunctionTime:IsEnd()
|
||
|
local nowTime = XTime.GetServerNowTimestamp()
|
||
|
local endTime = self:GetEndTime()
|
||
|
if endTime > 0 and nowTime >= endTime then
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XFunctionTime:IsInTime()
|
||
|
local nowTime = XTime.GetServerNowTimestamp()
|
||
|
|
||
|
--startTime未配置默认无开启时间限制
|
||
|
local startTime = self:GetStartTime()
|
||
|
if startTime > 0 and nowTime < startTime then
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
--endTime未配置默认无结束时间限制
|
||
|
local endTime = self:GetEndTime()
|
||
|
if endTime > 0 and nowTime >= endTime then
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
return XFunctionTime
|