summaryrefslogtreecommitdiff
path: root/honey/ecs/script.lua
diff options
context:
space:
mode:
Diffstat (limited to 'honey/ecs/script.lua')
-rw-r--r--honey/ecs/script.lua44
1 files changed, 44 insertions, 0 deletions
diff --git a/honey/ecs/script.lua b/honey/ecs/script.lua
new file mode 100644
index 0000000..9ae7d72
--- /dev/null
+++ b/honey/ecs/script.lua
@@ -0,0 +1,44 @@
+local module = {}
+setmetatable(module, {__index=_G})
+setfenv(1, module)
+
+
+-- helper function for retrieving script functions
+getFunction = function(script)
+ local f = require(script.script)
+ if script.func then
+ return f[script.func]
+ else
+ return f
+ end
+end
+
+
+--===== dispatch messages to handlers =====--
+
+dispatch = function(entities, msg, data)
+ local query = entities:queryComponent(msg)
+ for id, handler in pairs(query) do
+ local f = getFunction(handler)
+ f(entities, id, data)
+ end
+end
+
+--===== script system =====--
+
+system = function(params)
+ return {
+ db=params.db,
+ update=function(self, dt)
+ local entities = self.db:queryComponent("script")
+ for id, script in pairs(entities) do
+ local f = getFunction(script)
+ f(self.db, id, dt)
+ end
+ end
+ }
+end
+
+
+
+return module