From 02247e743b83669e2d799111fc10a4772de66dfc Mon Sep 17 00:00:00 2001 From: sanine-a Date: Tue, 9 May 2023 12:24:28 -0500 Subject: add ecs.Accessor helper and node _child hierarchy --- honey/ecs/ecs.lua | 25 +++++++++++++++++++++++++ honey/ecs/node.lua | 12 ++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) (limited to 'honey') 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, } -- cgit v1.2.1