|
|
@@ -1,6 +1,7 @@
|
|
|
local ffi = require("ffi")
|
|
|
local class, object = require("class"), require("class.object")
|
|
|
local fficlass = require("class.fficlass")
|
|
|
+local LuaComponent = require("ecs.LuaComponent")
|
|
|
require("ecs")
|
|
|
|
|
|
local ECS = class(object)
|
|
|
@@ -18,7 +19,7 @@ function ECS:init()
|
|
|
self.n_components = 0
|
|
|
end
|
|
|
|
|
|
-function ECS:create_component(name, structdef)
|
|
|
+function ECS:create_ffi_component(name, structdef)
|
|
|
assert(not self.components_classes[name])
|
|
|
local new_component = fficlass("bool _alive;"..structdef)
|
|
|
self.components_classes[name] = new_component
|
|
|
@@ -27,6 +28,18 @@ function ECS:create_component(name, structdef)
|
|
|
return new_component
|
|
|
end
|
|
|
|
|
|
+function ECS:create_lua_component(name, ...)
|
|
|
+ assert(not self.components_classes[name])
|
|
|
+ local new_component = class(... or LuaComponent)
|
|
|
+ self.components_classes[name] = new_component
|
|
|
+ self.components[name] = {}
|
|
|
+ for i=0,ECS.N_ENTITIES-1 do
|
|
|
+ self.components[name][i] = self.components_classes[name]:new()
|
|
|
+ end
|
|
|
+ self.n_components = self.n_components + 1
|
|
|
+ return new_component
|
|
|
+end
|
|
|
+
|
|
|
function ECS:get_component(name, id)
|
|
|
return self.components[name][id]
|
|
|
end
|