ECS.lua 922 B

12345678910111213141516171819202122232425262728293031323334
  1. local ffi = require("ffi")
  2. local class, object = require("class"), require("class.object")
  3. local fficlass = require("class.fficlass")
  4. require("ecs")
  5. local ECS = class(object)
  6. ECS.N_ENTITIES = 100
  7. function ECS:init()
  8. self.entities = ffi.new("entity_t[?]", ECS.N_ENTITIES)
  9. -- Making sure that everything is set
  10. for i=0,ECS.N_ENTITIES-1 do
  11. self.entities[i] = false
  12. end
  13. self.components = {}
  14. self.components_classes = {}
  15. self.n_components = 0
  16. end
  17. function ECS:create_component(name, structdef)
  18. assert(not self.components_classes[name])
  19. local new_component = fficlass("bool _alive;"..structdef)
  20. self.components_classes[name] = new_component
  21. self.components[name] = new_component:new_array(ECS.N_ENTITIES)
  22. self.n_components = self.n_components + 1
  23. return new_component
  24. end
  25. function ECS:get_component(name, id)
  26. return self.components[name][id]
  27. end
  28. return ECS