From e3c97214828007c2e55d9c21e0f114d7c20f5c85 Mon Sep 17 00:00:00 2001 From: Timothy Date: Thu, 5 Sep 2024 21:40:08 -0400 Subject: [PATCH] register lambdas --- lib/node_types/node.lua | 4 +++- lib/registry.lua | 12 +++++++---- spec/functional/registry_spec.lua | 35 +++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 spec/functional/registry_spec.lua diff --git a/lib/node_types/node.lua b/lib/node_types/node.lua index 9fc4f17..c77a5a8 100644 --- a/lib/node_types/node.lua +++ b/lib/node_types/node.lua @@ -10,7 +10,9 @@ function Node:initialize(config) end if self.name ~= nil then - Registry.register(self.name, self) + Registry.register(self.name, function() + return Node:new(config) + end) end end diff --git a/lib/registry.lua b/lib/registry.lua index 73ed64c..c2da345 100644 --- a/lib/registry.lua +++ b/lib/registry.lua @@ -1,14 +1,18 @@ -local registeredNodes = {} - local Registry = {} +Registry.registeredNodes = {} function Registry.register(name, node) - registeredNodes[name] = node; + Registry.registeredNodes[name] = node; end function Registry.getNode(name) if type(name) == 'string' then - return registeredNodes[name] + local node = Registry.registeredNodes[name] + if type(node) == "function" then + return node() + else + return node + end else return name end diff --git a/spec/functional/registry_spec.lua b/spec/functional/registry_spec.lua new file mode 100644 index 0000000..7e6d597 --- /dev/null +++ b/spec/functional/registry_spec.lua @@ -0,0 +1,35 @@ +local BehaviourTree = require 'lib/behaviour_tree' +local Registry = require 'lib/registry' +local Task = BehaviourTree.Task + +describe('Registry', function() + local subject, task1 + before_each(function() + subject = Registry + task1 = BehaviourTree.Task:new() + Registry.register('node', task1) + Registry.register('func', function() return BehaviourTree.Task:new() end) + subject = Registry + end) + + teardown(function() + Registry.registeredNodes = {} + end) + + it('should be able to return a simple node', function() + assert.has_no.errors(function() subject:getNode('node')) + end) + it('should return the same simple node each time', function() + local node1 = subject:getNode('node') + local node2 = subject:getNode('node') + assert.are_equals(node1, node2) + end) + it('should be able to return a func node', function() + assert.has_no.errors(function() subject:getNode('func')) + end) + it('should return new instances of func nodes', function() + local node1 = subject:getNode('func') + local node2 = subject:getNode('func') + assert.are_not.equals(node1, node2) + end) +end)