local module = {} setmetatable(module, {__index=_G}) setfenv(1, module) --===== transform cascading =====-- system = function(params) return { db = params.db, priority = 2, update = function(self, dt) local nodes = self.db:queryComponent("node") -- prepare nodes for id, node in pairs(nodes) do node._visited = false end -- helper function local function recursiveTransform(id, node) if node._visited then return node._matrix end if not node.parent then node._matrix = node.matrix else 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 end -- compute nodes for id, node in pairs(nodes) do recursiveTransform(id, node) end end, } end return module