summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsanine-a <sanine.not@pm.me>2023-04-13 10:07:04 -0500
committersanine-a <sanine.not@pm.me>2023-04-13 10:07:04 -0500
commitc09372fa140308194d2615ed97864a4ded54d626 (patch)
tree8bc9990734b9ce107b4bafe94b9ec19201320275
parent20494a0fe10011601c7573e6a7fa53bd891b1bc0 (diff)
don't shallow copy component tables
-rw-r--r--honey/ecs.lua23
-rw-r--r--main.lua2
2 files changed, 8 insertions, 17 deletions
diff --git a/honey/ecs.lua b/honey/ecs.lua
index ef5d6cb..69feb12 100644
--- a/honey/ecs.lua
+++ b/honey/ecs.lua
@@ -60,27 +60,18 @@ function EntityDb.addComponent(self, id, name, value)
-- create the relevant component table if it doesn't exist
if not self.components[name] then
- self.components[name] = { count=0 }
+ self.components[name] = { count=0, data={} }
end
local component = self.components[name]
- component[id] = value
+ component.data[id] = value
component.count = component.count + 1
end
-local function shallowCopy(tbl)
- local copy = {}
- for k, v in pairs(tbl) do copy[k] = v end
- return copy
-end
-
-
-- get all entities with a given component
function EntityDb.queryComponent(self, name)
- local query = shallowCopy(self.components[name])
- query.count = nil
- return query
+ return self.components[name].data
end
@@ -89,7 +80,7 @@ function EntityDb.queryEntity(self, id)
self:checkIsValid(id)
local query = {}
for name, component in pairs(self.components) do
- query[name] = component[id]
+ query[name] = component.data[id]
end
return query
end
@@ -98,7 +89,7 @@ end
-- get a specific component from an entity
function EntityDb.getComponent(self, id, name)
self:checkIsValid(id)
- return self.components[name][id]
+ return self.components[name].data[id]
end
@@ -106,8 +97,8 @@ end
function EntityDb.removeComponent(self, id, name)
self:checkIsValid(id)
local component = self.components[name]
- if component[id] ~= nil then
- component[id] = nil
+ if component.data[id] ~= nil then
+ component.data[id] = nil
component.count = component.count - 1
if component.count == 0 then
self.components[name] = nil
diff --git a/main.lua b/main.lua
index eda08f7..f5512b0 100644
--- a/main.lua
+++ b/main.lua
@@ -44,7 +44,7 @@ package.loaded['baseRotationScript'] = function(db, id, dt)
end
package.loaded['cameraRotationScript'] = function(db, id, dt)
local transform = db:getComponent(id, "transform")
- transform.matrix:translate(Vec3{0, 0, -0.2*math.sin(math.pi * glfw.GetTime())})
+ transform.matrix:identity():translate(Vec3{0, 0, -6 + math.sin(math.pi * glfw.GetTime())})
end