level.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #pragma once
  2. #include <stddef.h>
  3. #include "entity.h"
  4. #ifdef __cplusplus
  5. extern "C"
  6. {
  7. #endif
  8. typedef struct GameManager GameManager;
  9. typedef struct
  10. {
  11. void (*alloc)(Level *level, GameManager *manager, void *context);
  12. void (*free)(Level *level, GameManager *manager, void *context);
  13. void (*start)(Level *level, GameManager *manager, void *context);
  14. void (*stop)(Level *level, GameManager *manager, void *context);
  15. size_t context_size;
  16. } LevelBehaviour;
  17. /**
  18. * @brief Remove all entities from the level
  19. *
  20. * @param level level instance
  21. */
  22. void level_clear(Level *level);
  23. /**
  24. * @brief Add an entity to the level
  25. *
  26. * @param level level instance
  27. * @param behaviour entity behaviour
  28. * @return Entity*
  29. */
  30. Entity *level_add_entity(Level *level, const EntityDescription *behaviour);
  31. /**
  32. * @brief Remove an entity from the level
  33. *
  34. * @param level level instance
  35. * @param entity entity to remove
  36. */
  37. void level_remove_entity(Level *level, Entity *entity);
  38. /**
  39. * @brief Send an event to all entities of a certain type in the level
  40. *
  41. * @param level level instance
  42. * @param sender entity that sends the event
  43. * @param receiver_desc entity description that will receive the event, NULL for all entities
  44. * @param type event type
  45. * @param value event value
  46. */
  47. void level_send_event(
  48. Level *level,
  49. Entity *sender,
  50. const EntityDescription *receiver_desc,
  51. uint32_t type,
  52. EntityEventValue value);
  53. #ifdef __cplusplus
  54. }
  55. #endif