result_screen.c 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "result_screen.h"
  2. #include "../../game_state.h"
  3. #include "../util/helpers.h"
  4. #include <dolphin/dolphin.h>
  5. #include <notification/notification_messages.h>
  6. static int hours, minutes, seconds;
  7. static bool isStarted = false;
  8. static char timeString[24];
  9. static const NotificationSequence sequence_cheer = {
  10. &message_note_c4,
  11. &message_delay_100,
  12. &message_note_e4,
  13. &message_delay_100,
  14. &message_note_g4,
  15. &message_delay_100,
  16. &message_note_a4,
  17. &message_delay_100,
  18. &message_sound_off,
  19. NULL,
  20. };
  21. void start_result_screen(void* data) {
  22. GameState* state = (GameState*)data;
  23. dolphin_deed(DolphinDeedPluginGameWin);
  24. size_t diff = (state->game_end - state->game_start) / furi_kernel_get_tick_frequency();
  25. hours = (int)(diff / 3600);
  26. minutes = (int)(diff % 3600) / 60;
  27. seconds = (int)(diff % 60);
  28. state->lateRender = true;
  29. state->isDirty = true;
  30. state->clearBuffer = false;
  31. isStarted = false;
  32. notification_message(state->notification_app, (const NotificationSequence*)&sequence_cheer);
  33. }
  34. void render_result_screen(void* data) {
  35. GameState* state = (GameState*)data;
  36. canvas_set_color(state->canvas, ColorWhite);
  37. canvas_draw_box(state->canvas, 22, 14, 85, 30);
  38. canvas_set_color(state->canvas, ColorBlack);
  39. canvas_draw_frame(state->canvas, 21, 13, 87, 32);
  40. canvas_set_font(state->canvas, FontPrimary);
  41. canvas_draw_str_aligned(state->canvas, 64, 15, AlignCenter, AlignTop, "Congratulations!");
  42. canvas_set_font(state->canvas, FontSecondary);
  43. canvas_draw_str_aligned(state->canvas, 64, 26, AlignCenter, AlignTop, "Solve time:");
  44. if(hours > 0)
  45. snprintf(timeString, sizeof(timeString), "%02d:%02d:%02d", hours, minutes, seconds);
  46. else
  47. snprintf(timeString, sizeof(timeString), "%02d:%02d", minutes, seconds);
  48. canvas_set_font(state->canvas, FontSecondary);
  49. canvas_draw_str_aligned(state->canvas, 64, 35, AlignCenter, AlignTop, timeString);
  50. }
  51. void update_result_screen(void* data) {
  52. GameState* state = (GameState*)data;
  53. state->clearBuffer = false;
  54. state->lateRender = true;
  55. if(!isStarted) {
  56. state->isDirty = true;
  57. isStarted = true;
  58. }
  59. }
  60. void input_result_screen(void* data, InputKey key, InputType type) {
  61. GameState* state = (GameState*)data;
  62. if(key == InputKeyOk && type == InputTypePress) {
  63. state->scene_switch = 1;
  64. }
  65. }