Skip to content

Commit 2e5255b

Browse files
author
Sabine Lim
authored
Allow events to be registered on elements without parents (#83)
1 parent 5d682d1 commit 2e5255b

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

Basalt/objects/Container.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ return function(name, basalt)
5959
table.insert(elements, {element = element, zIndex = zIndex, objId = objId})
6060
sorted = false
6161
element:setParent(self, true)
62+
for event, _ in pairs(element:getRegisteredEvents()) do
63+
self:addEvent(event, element)
64+
end
6265
if(element.init~=nil)then element:init() end
6366
if(element.load~=nil)then element:load() end
6467
if(element.draw~=nil)then element:draw() end
@@ -96,6 +99,7 @@ return function(name, basalt)
9699
return true
97100
end
98101
end
102+
self:removeEvents(element)
99103
sorted = false
100104
end
101105

Basalt/objects/Object.lua

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ return function(name, basalt)
1313
local isEnabled,initialized = true,false
1414

1515
local eventSystem = basaltEvent()
16+
local registeredEvents = {}
1617
local activeEvents = {}
1718

1819
local parent
@@ -113,7 +114,6 @@ return function(name, basalt)
113114
remove = function(self)
114115
if (parent ~= nil) then
115116
parent:removeObject(self)
116-
parent:removeEvents(self)
117117
end
118118
self:updateDraw()
119119
return self
@@ -139,11 +139,19 @@ return function(name, basalt)
139139
return eventSystem
140140
end,
141141

142+
getRegisteredEvents = function(self)
143+
return registeredEvents
144+
end,
145+
142146
registerEvent = function(self, event, func)
143147
if(parent~=nil)then
144148
parent:addEvent(event, self)
145149
end
146-
return eventSystem:registerEvent(event, func)
150+
eventSystem:registerEvent(event, func)
151+
if (registeredEvents[event] == nil) then
152+
registeredEvents[event] = {}
153+
end
154+
table.insert(registeredEvents[event], func)
147155
end,
148156

149157
removeEvent = function(self, event, index)
@@ -152,7 +160,13 @@ return function(name, basalt)
152160
parent:removeEvent(event, self)
153161
end
154162
end
155-
return eventSystem:removeEvent(event, index)
163+
eventSystem:removeEvent(event, index)
164+
if (registeredEvents[event] ~= nil) then
165+
table.remove(registeredEvents[event], index)
166+
if (#registeredEvents[event] == 0) then
167+
registeredEvents[event] = nil
168+
end
169+
end
156170
end,
157171

158172
eventHandler = function(self, event, ...)
@@ -262,7 +276,7 @@ return function(name, basalt)
262276
end
263277
return self
264278
end,
265-
}
279+
}
266280

267281
object.__index = object
268282
return object

0 commit comments

Comments
 (0)