from retail

This commit is contained in:
NoM0Re
2025-01-14 02:10:45 +01:00
parent 74cc0c7ee8
commit 9d6005c82f
7 changed files with 189 additions and 90 deletions
+14
View File
@@ -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