mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
58 lines
1.1 KiB
Lua
58 lines
1.1 KiB
Lua
|
local ReceiverBase = require("core:erm.ReceiverBase")
|
||
|
local TM = ReceiverBase:new()
|
||
|
local bit = bit
|
||
|
local band, bor, bxor = bit.band, bit.bor, bit.bxor
|
||
|
local ALL_PLAYERS = 0xFF
|
||
|
|
||
|
local DATA = DATA
|
||
|
DATA.ERM.timers = DATA.ERM.timers or {}
|
||
|
|
||
|
local timers = DATA.ERM.timers
|
||
|
|
||
|
local function newTimer(timerId)
|
||
|
return
|
||
|
{
|
||
|
id = timerId,
|
||
|
dayFirst = 1,
|
||
|
dayLast = 1,
|
||
|
interval = 0,
|
||
|
players = 0
|
||
|
}
|
||
|
end
|
||
|
|
||
|
local function getTimer(timerId)
|
||
|
timerId = tostring(timerId)
|
||
|
timers[timerId] = timers[timerId] or newTimer(timerId)
|
||
|
return timers[timerId]
|
||
|
end
|
||
|
|
||
|
function TM:new(ERM, timerId)
|
||
|
assert(timerId ~= nil, "!!TM requires timer identifier")
|
||
|
return ReceiverBase.new(self,
|
||
|
{
|
||
|
timerId = timerId,
|
||
|
timer = getTimer(timerId),
|
||
|
ERM = ERM
|
||
|
})
|
||
|
end
|
||
|
|
||
|
function TM:D(x, playerMask)
|
||
|
--disable by mask
|
||
|
self.timer.players = band(self.timer.players, bnot(playerMask), ALL_PLAYERS)
|
||
|
end
|
||
|
|
||
|
function TM:E(x, playerMask)
|
||
|
--enable by mask
|
||
|
self.timer.players = bor(self.timer.players, playerMask)
|
||
|
end
|
||
|
|
||
|
function TM:S(x, dayFirst, dayLast, interval, playerMask)
|
||
|
local t = self.timer
|
||
|
t.dayFirst = dayFirst
|
||
|
t.dayLast = dayLast
|
||
|
t.interval = interval
|
||
|
t.players = playerMask
|
||
|
end
|
||
|
|
||
|
return TM
|