mirror of
https://github.com/Keyslam-Group/Concord.git
synced 2025-09-02 12:24:11 -04:00
Allowed for entities to be in multiple systems. Fixed the removal issue.
This commit is contained in:
parent
c750ea119f
commit
100d6320c7
5 changed files with 28 additions and 10 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
local PATH = (...):gsub('%.[^%.]+$', '')
|
||||||
|
|
||||||
|
local List = require(PATH..".list")
|
||||||
|
|
||||||
local Entity = {}
|
local Entity = {}
|
||||||
Entity.__index = Entity
|
Entity.__index = Entity
|
||||||
|
|
||||||
|
@ -6,7 +10,8 @@ Entity.__index = Entity
|
||||||
function Entity.new()
|
function Entity.new()
|
||||||
local e = setmetatable({
|
local e = setmetatable({
|
||||||
components = {},
|
components = {},
|
||||||
instance = nil,
|
removed = {},
|
||||||
|
instances = List(),
|
||||||
}, Entity)
|
}, Entity)
|
||||||
|
|
||||||
return e
|
return e
|
||||||
|
@ -26,15 +31,27 @@ end
|
||||||
-- @param component The Component to remove
|
-- @param component The Component to remove
|
||||||
-- @return self
|
-- @return self
|
||||||
function Entity:remove(component)
|
function Entity:remove(component)
|
||||||
self.components[component] = nil
|
self.removed[component] = true
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Entity:destroy()
|
||||||
|
for i = 1, self.instances.size do
|
||||||
|
self.instances:get(i):removeEntity(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--- Checks the Entity against the pools again.
|
--- Checks the Entity against the pools again.
|
||||||
-- @return self
|
-- @return self
|
||||||
function Entity:check()
|
function Entity:apply()
|
||||||
self.instance:checkEntity(self)
|
for i = 1, self.instances.size do
|
||||||
|
self.instances:get(i):checkEntity(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, component in pairs(self.removed) do
|
||||||
|
self.components[component] = nil
|
||||||
|
end
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,7 +19,7 @@ function Instance.new()
|
||||||
end
|
end
|
||||||
|
|
||||||
function Instance:addEntity(e)
|
function Instance:addEntity(e)
|
||||||
e.instance = self
|
e.instances:add(self)
|
||||||
self.entities:add(e)
|
self.entities:add(e)
|
||||||
self:checkEntity(e)
|
self:checkEntity(e)
|
||||||
end
|
end
|
||||||
|
@ -31,6 +31,7 @@ function Instance:checkEntity(e)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Instance:removeEntity(e)
|
function Instance:removeEntity(e)
|
||||||
|
e.instances:remove(self)
|
||||||
self.entities:remove(e)
|
self.entities:remove(e)
|
||||||
|
|
||||||
for _, system in ipairs(self.systems) do
|
for _, system in ipairs(self.systems) do
|
||||||
|
|
|
@ -16,7 +16,7 @@ end
|
||||||
|
|
||||||
function Pool:eligible(e)
|
function Pool:eligible(e)
|
||||||
for _, component in ipairs(self.filter) do
|
for _, component in ipairs(self.filter) do
|
||||||
if not e.components[component] then
|
if not e.components[component] or e.removed[component] then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -86,7 +86,7 @@ function System:__tryAdd(e)
|
||||||
self.__all[e] = self.__all[e] + 1
|
self.__all[e] = self.__all[e] + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
function System:__tryRemove()
|
function System:__tryRemove(e)
|
||||||
if self:__has(e) then
|
if self:__has(e) then
|
||||||
self.__all[e] = self.__all[e] - 1
|
self.__all[e] = self.__all[e] - 1
|
||||||
|
|
||||||
|
|
4
main.lua
4
main.lua
|
@ -76,13 +76,13 @@ end
|
||||||
function RandomRemover:update(dt)
|
function RandomRemover:update(dt)
|
||||||
self.time = self.time + dt
|
self.time = self.time + dt
|
||||||
|
|
||||||
if self.time >= 0.5 then
|
if self.time >= 0.25 then
|
||||||
self.time = 0
|
self.time = 0
|
||||||
|
|
||||||
if self.pool.size > 0 then
|
if self.pool.size > 0 then
|
||||||
local i = love.math.random(1, self.pool.size)
|
local i = love.math.random(1, self.pool.size)
|
||||||
|
|
||||||
Game:removeEntity(self.pool.objects[i])
|
self.pool:get(i):destroy()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue