entity.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include "game_engine.h"
  3. #include <stdlib.h>
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. typedef struct Entity Entity;
  8. typedef struct Level Level;
  9. typedef struct {
  10. float x;
  11. float y;
  12. } Vector;
  13. #define VECTOR_ZERO ((Vector){0, 0})
  14. typedef union {
  15. uint32_t value;
  16. void* pointer;
  17. } EntityEventValue;
  18. typedef struct {
  19. uint32_t type;
  20. Entity* sender;
  21. EntityEventValue value;
  22. } EntityEvent;
  23. typedef struct Level Level;
  24. typedef struct GameManager GameManager;
  25. typedef struct {
  26. void (*start)(Entity* self, Level* level, void* context);
  27. void (*stop)(Entity* self, Level* level, void* context);
  28. void (*update)(Entity* self, GameManager* manager, void* context);
  29. void (*render)(Entity* self, GameManager* manager, Canvas* canvas, void* context);
  30. void (*collision)(Entity* self, Entity* other, GameManager* manager, void* context);
  31. void (*event)(Entity* self, GameManager* manager, EntityEvent event, void* context);
  32. size_t context_size;
  33. } EntityDescription;
  34. const EntityDescription* entity_description_get(Entity* entity);
  35. Vector entity_pos_get(Entity* entity);
  36. void entity_pos_set(Entity* entity, Vector position);
  37. void* entity_context_get(Entity* entity);
  38. void entity_collider_add_circle(Entity* entity, float radius);
  39. void entity_collider_add_rect(Entity* entity, float width, float height);
  40. void entity_collider_offset_set(Entity* entity, Vector offset);
  41. Vector entity_collider_offset_get(Entity* entity);
  42. void entity_send_event(Entity* entity, uint32_t type, EntityEventValue value);
  43. #ifdef __cplusplus
  44. }
  45. #endif