delayed_sprite.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "delayed_sprite.h"
  2. #include "../../engine/game_manager.h"
  3. #include "../../game.h"
  4. void
  5. delayed_sprite_init(Entity* entity,
  6. GameManager* manager,
  7. Vector pos,
  8. float delay,
  9. const char* sprite_name)
  10. {
  11. DelayedSpriteContext* entity_context = entity_context_get(entity);
  12. entity_pos_set(entity, pos);
  13. entity_context->delay = delay;
  14. entity_context->time = 0;
  15. entity_context->sprite = game_manager_sprite_load(manager, sprite_name);
  16. }
  17. static void
  18. delayed_sprite_update(Entity* self, GameManager* manager, void* _entity_context)
  19. {
  20. UNUSED(self);
  21. UNUSED(manager);
  22. DelayedSpriteContext* entity_context = _entity_context;
  23. if (entity_context->time < entity_context->delay) {
  24. entity_context->time += 1.0f;
  25. }
  26. }
  27. static void
  28. delayed_sprite_render(Entity* self,
  29. GameManager* manager,
  30. Canvas* canvas,
  31. void* _entity_context)
  32. {
  33. UNUSED(manager);
  34. DelayedSpriteContext* entity_context = _entity_context;
  35. if (entity_context->time >= entity_context->delay) {
  36. Vector pos = entity_pos_get(self);
  37. canvas_draw_sprite(canvas, entity_context->sprite, pos.x, pos.y);
  38. }
  39. }
  40. static void
  41. delayed_sprite_event(Entity* self,
  42. GameManager* manager,
  43. EntityEvent event,
  44. void* _entity_context)
  45. {
  46. UNUSED(self);
  47. UNUSED(manager);
  48. DelayedSpriteContext* entity_context = _entity_context;
  49. if (event.type == GameEventStopAnimation) {
  50. entity_context->time = entity_context->delay;
  51. }
  52. }
  53. const EntityDescription delayed_sprite_description = {
  54. .start = NULL,
  55. .stop = NULL,
  56. .update = delayed_sprite_update,
  57. .render = delayed_sprite_render,
  58. .collision = NULL,
  59. .event = delayed_sprite_event,
  60. .context_size = sizeof(DelayedSpriteContext),
  61. };