| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 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)
- ECS.N_ENTITIES = 100
- function ECS:init()
- self.entities = ffi.new("entity_t[?]", ECS.N_ENTITIES)
- -- Making sure that everything is set
- for i=0,ECS.N_ENTITIES-1 do
- self.entities[i] = false
- end
- self.components = {}
- self.components_classes = {}
- self.n_components = 0
- end
- 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
- self.components[name] = new_component:new_array(ECS.N_ENTITIES)
- self.n_components = self.n_components + 1
- 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
- return ECS
|