level_message.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include <gui/elements.h>
  2. #include "level_message.h"
  3. static void message_update(Entity* self, GameManager* manager, void* context) {
  4. UNUSED(self);
  5. UNUSED(context);
  6. InputState input = game_manager_input_get(manager);
  7. if(input.pressed & GameKeyOk || input.pressed & GameKeyBack) {
  8. GameContext* ctx = game_manager_game_context_get(manager);
  9. game_manager_next_level_set(manager, ctx->levels.menu);
  10. }
  11. }
  12. static void message_render(Entity* self, GameManager* manager, Canvas* canvas, void* context) {
  13. UNUSED(self);
  14. UNUSED(manager);
  15. UNUSED(context);
  16. GameContext* game_ctx = game_manager_game_context_get(manager);
  17. LevelMessageContext* ctx = level_context_get(game_ctx->levels.message);
  18. canvas_set_font(canvas, FontPrimary);
  19. canvas_draw_str_aligned(
  20. canvas, 64, 30, AlignCenter, AlignTop, furi_string_get_cstr(ctx->message));
  21. canvas_set_font(canvas, FontSecondary);
  22. }
  23. static const EntityDescription message_desc = {
  24. .start = NULL,
  25. .stop = NULL,
  26. .update = message_update,
  27. .render = message_render,
  28. .collision = NULL,
  29. .event = NULL,
  30. .context_size = 0,
  31. };
  32. static void level_alloc(Level* level, GameManager* manager, void* ctx) {
  33. UNUSED(level);
  34. UNUSED(manager);
  35. LevelMessageContext* context = ctx;
  36. context->message = furi_string_alloc();
  37. level_add_entity(level, &message_desc);
  38. }
  39. static void level_free(Level* level, GameManager* manager, void* context) {
  40. UNUSED(level);
  41. UNUSED(manager);
  42. LevelMessageContext* ctx = context;
  43. furi_string_free(ctx->message);
  44. }
  45. const LevelBehaviour level_message = {
  46. .alloc = level_alloc,
  47. .free = level_free,
  48. .start = NULL,
  49. .stop = NULL,
  50. .context_size = sizeof(LevelMessageContext),
  51. };