Components.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef CORE_COMPONENTS_H
  2. #define CORE_COMPONENTS_H
  3. #include "core/HashMap.h"
  4. #include "core/List.h"
  5. typedef size_t CoreEntity;
  6. typedef struct {
  7. CoreHashMap entityToIndex;
  8. CoreList indexToEntity;
  9. CoreList components;
  10. } CoreComponents;
  11. typedef struct {
  12. CoreEntity entity;
  13. void* component;
  14. } CoreComponentNode;
  15. typedef struct {
  16. const CoreEntity* indexToEntity;
  17. const CoreEntity* indexToEntityEnd;
  18. void* component;
  19. void* componentEnd;
  20. size_t componentSize;
  21. CoreComponentNode node;
  22. } CoreComponentIterator;
  23. void coreInitComponents(CoreComponents* c, size_t componentSize);
  24. void coreDestroyComponents(CoreComponents* c);
  25. void* coreGetOrAddComponent(CoreComponents* c, CoreEntity e);
  26. void* coreSearchComponent(CoreComponents* c, CoreEntity e);
  27. bool coreRemoveComponent(CoreComponents* c, CoreEntity e);
  28. void coreInitComponentIterator(CoreComponentIterator* ci, CoreComponents* c);
  29. bool coreHasNextComponentNode(CoreComponentIterator* ci);
  30. CoreComponentNode* coreNextComponentNode(CoreComponentIterator* ci);
  31. void* coreGetComponentsStart(CoreComponents* c);
  32. void* coreGetComponentsEnd(CoreComponents* c);
  33. #ifdef IMPORT_CORE
  34. #define Entity CoreEntity
  35. #define Components CoreComponents
  36. #define ComponentNode CoreComponentNode
  37. #define ComponentIterator CoreComponentIterator
  38. #define initComponents coreInitComponents
  39. #define destroyComponents coreDestroyComponents
  40. #define getOrAddComponent coreGetOrAddComponent
  41. #define searchComponent coreSearchComponent
  42. #define removeComponent coreRemoveComponent
  43. #define initComponentIterator coreInitComponentIterator
  44. #define hasNextComponentNode coreHasNextComponentNode
  45. #define nextComponentNode coreNextComponentNode
  46. #define getComponentsStart coreGetComponentsStart
  47. #define getComponentsEnd coreGetComponentsEnd
  48. #endif
  49. #endif