entity.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "entity.h"
  2. #include "entity_i.h"
  3. #include <stdlib.h>
  4. #include <furi.h>
  5. struct Entity {
  6. Vector position;
  7. EntityBehaviour behaviour;
  8. void* context;
  9. };
  10. Entity* entity_alloc() {
  11. Entity* entity = malloc(sizeof(Entity));
  12. entity->position = VECTOR_ZERO;
  13. entity->behaviour = ENTITY_BEHAVIOUR_EMPTY;
  14. entity->context = NULL;
  15. FURI_LOG_D("Entity", "Allocated entity at %p", entity);
  16. return entity;
  17. }
  18. void entity_free(Entity* entity) {
  19. FURI_LOG_D("Entity", "Freeing entity at %p", entity);
  20. free(entity);
  21. }
  22. void entity_behaviour_set(Entity* entity, EntityBehaviour behaviour) {
  23. entity->behaviour = behaviour;
  24. }
  25. void entity_context_set(Entity* entity, void* context) {
  26. entity->context = context;
  27. }
  28. Vector entity_pos_get(Entity* entity) {
  29. return entity->position;
  30. }
  31. void entity_pos_set(Entity* entity, Vector position) {
  32. entity->position = position;
  33. }
  34. void entity_pos_add(Entity* entity, Vector delta) {
  35. entity->position.x += delta.x;
  36. entity->position.y += delta.y;
  37. }
  38. void* entity_context_get(Entity* entity) {
  39. return entity->context;
  40. }
  41. void entity_call_start(Entity* entity) {
  42. if(entity->behaviour.start) {
  43. entity->behaviour.start(entity);
  44. }
  45. }
  46. void entity_call_stop(Entity* entity) {
  47. if(entity->behaviour.stop) {
  48. entity->behaviour.stop(entity->context);
  49. }
  50. }
  51. void entity_call_update(Entity* entity, Director* director) {
  52. if(entity->behaviour.update) {
  53. entity->behaviour.update(entity, director, entity->context);
  54. }
  55. }
  56. void entity_call_render(Entity* entity, Director* director, Canvas* canvas) {
  57. if(entity->behaviour.render) {
  58. entity->behaviour.render(entity, director, canvas, entity->context);
  59. }
  60. }