from retail
This commit is contained in:
@@ -8,6 +8,7 @@ local SubscribableObject =
|
||||
{
|
||||
ClearSubscribers = function(self)
|
||||
self.events = {}
|
||||
self.subscribers = {}
|
||||
end,
|
||||
|
||||
ClearCallbacks = function(self)
|
||||
@@ -21,6 +22,12 @@ local SubscribableObject =
|
||||
end
|
||||
|
||||
self.events[event] = self.events[event] or {}
|
||||
self.subscribers[event] = self.subscribers[event] or {}
|
||||
if self.subscribers[event][subscriber] then
|
||||
-- Already subscribed, just return
|
||||
return
|
||||
end
|
||||
self.subscribers[event][subscriber] = true
|
||||
local pos = highPriority and 1 or (#self.events[event] + 1)
|
||||
if TableHasAnyEntries(self.events[event]) then
|
||||
tinsert(self.events[event], pos, subscriber)
|
||||
@@ -34,6 +41,12 @@ local SubscribableObject =
|
||||
|
||||
RemoveSubscriber = function(self, event, subscriber)
|
||||
if self.events[event] then
|
||||
if not self.subscribers[event][subscriber] then
|
||||
-- Not subscribed
|
||||
return
|
||||
end
|
||||
|
||||
self.subscribers[event][subscriber] = nil
|
||||
local index = tIndexOf(self.events[event], subscriber)
|
||||
if index then
|
||||
tremove(self.events[event], index)
|
||||
@@ -68,6 +81,7 @@ function Private.CreateSubscribableObject()
|
||||
for f, func in pairs(SubscribableObject) do
|
||||
system[f] = func
|
||||
system.events = {}
|
||||
system.subscribers = {}
|
||||
system.callbacks = {}
|
||||
end
|
||||
return system
|
||||
|
||||
Reference in New Issue
Block a user