mirror of
https://github.com/Keyslam-Group/Concord.git
synced 2025-09-02 12:24:11 -04:00
Fixed removal
This commit is contained in:
parent
7053d91c80
commit
eeadfc8817
3 changed files with 41 additions and 9 deletions
|
@ -12,6 +12,7 @@ function Instance.new()
|
||||||
entities = List(),
|
entities = List(),
|
||||||
systems = List(),
|
systems = List(),
|
||||||
events = {},
|
events = {},
|
||||||
|
removed = {},
|
||||||
}, Instance)
|
}, Instance)
|
||||||
|
|
||||||
return instance
|
return instance
|
||||||
|
@ -39,16 +40,30 @@ function Instance:checkEntity(e)
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Removes an Entity from the Instance.
|
--- Marks an Entity as removed from the Instance.
|
||||||
-- @param e The Entity to remove
|
-- @param e The Entity to mark
|
||||||
-- @return self
|
-- @return self
|
||||||
function Instance:removeEntity(e)
|
function Instance:removeEntity(e)
|
||||||
|
self.removed[#self.removed + 1] = e
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
--- completely removes all marked Entities in the Instance.
|
||||||
|
-- @return self
|
||||||
|
function Instance:flush()
|
||||||
|
for i = 1, #self.removed do
|
||||||
|
local e = self.removed[i]
|
||||||
|
|
||||||
e.instances:remove(self)
|
e.instances:remove(self)
|
||||||
self.entities:remove(e)
|
self.entities:remove(e)
|
||||||
|
|
||||||
for i = 1, self.systems.size do
|
for i = 1, self.systems.size do
|
||||||
self.systems:get(i):__remove(e)
|
self.systems:get(i):__remove(e)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
self.removed = {}
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,7 +7,10 @@ function List.new()
|
||||||
return setmetatable({
|
return setmetatable({
|
||||||
objects = {},
|
objects = {},
|
||||||
pointers = {},
|
pointers = {},
|
||||||
|
removed = {},
|
||||||
|
|
||||||
size = 0,
|
size = 0,
|
||||||
|
removeSize = 0,
|
||||||
}, mt)
|
}, mt)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -16,7 +19,10 @@ end
|
||||||
function List:clear()
|
function List:clear()
|
||||||
self.objects = {}
|
self.objects = {}
|
||||||
self.pointers = {}
|
self.pointers = {}
|
||||||
|
self.removed = {}
|
||||||
|
|
||||||
self.size = 0
|
self.size = 0
|
||||||
|
self.removeSize = 0
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
@ -34,7 +40,7 @@ function List:add(obj)
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Removes an object from the List.
|
--- Removed an object from the List.
|
||||||
-- @param obj The object to remove
|
-- @param obj The object to remove
|
||||||
-- @return self
|
-- @return self
|
||||||
function List:remove(obj)
|
function List:remove(obj)
|
||||||
|
|
11
main.lua
11
main.lua
|
@ -89,10 +89,21 @@ function RandomRemover:update(dt)
|
||||||
love.window.setTitle(love.timer.getFPS())
|
love.window.setTitle(love.timer.getFPS())
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local RemovalSystem = System({})
|
||||||
|
function RemovalSystem:init(instance)
|
||||||
|
self.instance = instance
|
||||||
|
end
|
||||||
|
|
||||||
|
function RemovalSystem:update()
|
||||||
|
self.instance:flush()
|
||||||
|
end
|
||||||
|
|
||||||
Game:addSystem(RandomRemover(), "update")
|
Game:addSystem(RandomRemover(), "update")
|
||||||
Game:addSystem(RectangleRenderer(), "draw")
|
Game:addSystem(RectangleRenderer(), "draw")
|
||||||
Game:addSystem(CircleRenderer(), "draw")
|
Game:addSystem(CircleRenderer(), "draw")
|
||||||
|
|
||||||
|
Game:addSystem(RemovalSystem(Game), "update", false)
|
||||||
|
|
||||||
for i = 1, 100 do
|
for i = 1, 100 do
|
||||||
local e = Entity()
|
local e = Entity()
|
||||||
e:give(Position, love.math.random(0, 700), love.math.random(0, 700))
|
e:give(Position, love.math.random(0, 700), love.math.random(0, 700))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue