2022-09-18 14:57:23 +00:00
|
|
|
|
|
|
|
--- A 3-dimensional vector.
|
|
|
|
-- @class
|
|
|
|
local EventEmitter = {}
|
|
|
|
EventEmitter.__index = EventEmitter
|
|
|
|
EventEmitter.__name = "EventEmitter" -- A hack to allow identification in wea.inspect
|
|
|
|
|
|
|
|
|
2022-09-18 15:06:23 +00:00
|
|
|
function EventEmitter.new(tbl)
|
|
|
|
if not tbl then tbl = {} end
|
|
|
|
tbl.events = {}
|
|
|
|
setmetatable(tbl, EventEmitter)
|
|
|
|
return tbl
|
2022-09-18 14:57:23 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function EventEmitter.addEventListener(this, event_name, func)
|
|
|
|
if this.events[event_name] == nil then this.events[event_name] = {} end
|
|
|
|
table.insert(this.events[event_name], func)
|
|
|
|
end
|
|
|
|
function EventEmitter.on(this, event_name, func)
|
|
|
|
return EventEmitter.addEventListener(this, event_name, func)
|
|
|
|
end
|
|
|
|
|
|
|
|
function EventEmitter.removeEventListener(this, event_name, func)
|
|
|
|
if this.events[event_name] == nil then return false end
|
|
|
|
for index, next_func in ipairs(this.events[event_name]) do
|
|
|
|
if next_func == func then
|
|
|
|
table.remove(this.events[event_name], index)
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function EventEmitter.off(this, event_name, func)
|
|
|
|
return EventEmitter.removeEventListener(this, event_name, func)
|
|
|
|
end
|
|
|
|
|
|
|
|
function EventEmitter.emit(this, event_name, args)
|
|
|
|
if this.events[event_name] == nil then return end
|
|
|
|
for index,next_func in ipairs(this.events[event_name]) do
|
|
|
|
next_func(args) -- TODO: Move unpack compat to wea_c
|
|
|
|
end
|
|
|
|
-- TODO: Monitor execution time, log if it's slow? We'll need to move WEA utils over to wea_c first though...
|
|
|
|
end
|
|
|
|
|
|
|
|
function EventEmitter.clear(this, event_name)
|
|
|
|
this.events[event_name] = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
return EventEmitter
|