summaryrefslogtreecommitdiff
path: root/honey
diff options
context:
space:
mode:
Diffstat (limited to 'honey')
-rw-r--r--honey/ecs/ecs.lua25
-rw-r--r--honey/ecs/node.lua12
2 files changed, 33 insertions, 4 deletions
diff --git a/honey/ecs/ecs.lua b/honey/ecs/ecs.lua
index b0409e4..301ed36 100644
--- a/honey/ecs/ecs.lua
+++ b/honey/ecs/ecs.lua
@@ -271,4 +271,29 @@ function SystemDb.removeSystem(self, id)
end
+--===== Access helper =====--
+
+
+function Accessor(db, id)
+ local tbl = {
+ __db = db,
+ __id = id,
+ }
+
+ setmetatable(tbl, {
+ __index=function(self, key)
+ return self.__db:getComponent(self.__id, key)
+ end,
+ __newindex=function(self, key, value)
+ self.__db:addComponent(self.__id, key, value)
+ end,
+ __tostring=function(self)
+ return string.format("Accessor<%s>", self.__id)
+ end,
+ })
+
+ return tbl
+end
+
+
return module
diff --git a/honey/ecs/node.lua b/honey/ecs/node.lua
index 39f1898..645946c 100644
--- a/honey/ecs/node.lua
+++ b/honey/ecs/node.lua
@@ -18,7 +18,7 @@ system = function(params)
end
-- helper function
- local function recursiveTransform(node)
+ local function recursiveTransform(id, node)
if node._visited then
return node._matrix
end
@@ -26,9 +26,13 @@ system = function(params)
if not node.parent then
node._matrix = node.matrix
else
- local parentTransform = self.db:getComponent(node.parent, "node")
- local parentMatrix = recursiveTransform(parentTransform)
+ local parentNode = self.db:getComponent(node.parent, "node")
+ local parentMatrix = recursiveTransform(node.parent, parentNode)
node._matrix = parentMatrix * node.matrix
+ if node.name then
+ if not parentNode._child then parentNode._child = {} end
+ parentNode._child[node.name] = honey.ecs.Accessor(self.db, id)
+ end
end
node._visited = true
return node._matrix
@@ -36,7 +40,7 @@ system = function(params)
-- compute nodes
for id, node in pairs(nodes) do
- recursiveTransform(node)
+ recursiveTransform(id, node)
end
end,
}