start_screen_scene.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "../minesweeper.h"
  2. typedef enum {
  3. MineSweeperSceneStartScreenExitEvent,
  4. MineSweeperSceneStartScreenContinueEvent,
  5. } MineSweeperSceneStartScreenEvent;
  6. bool minesweeper_scene_start_screen_input_callback(InputEvent* event, void* context) {
  7. furi_assert(event);
  8. furi_assert(context);
  9. MineSweeperApp* app = context;
  10. bool consumed = false;
  11. // Right now we continue if back is not pressed
  12. if (event->key == InputKeyBack) {
  13. consumed = scene_manager_handle_custom_event(
  14. app->scene_manager,
  15. MineSweeperSceneStartScreenExitEvent);
  16. } else {
  17. consumed = scene_manager_handle_custom_event(
  18. app->scene_manager,
  19. MineSweeperSceneStartScreenContinueEvent);
  20. }
  21. return consumed;
  22. }
  23. void minesweeper_scene_start_screen_secondary_draw_callback(Canvas* canvas, void* _model) {
  24. furi_assert(canvas);
  25. furi_assert(_model);
  26. UNUSED(_model);
  27. UNUSED(canvas);
  28. }
  29. void minesweeper_scene_start_screen_on_enter(void* context) {
  30. furi_assert(context);
  31. MineSweeperApp* app = context;
  32. furi_assert(app->start_screen);
  33. start_screen_set_context(app->start_screen, app);
  34. start_screen_set_input_callback(
  35. app->start_screen,
  36. minesweeper_scene_start_screen_input_callback);
  37. start_screen_set_secondary_draw_callback(
  38. app->start_screen,
  39. minesweeper_scene_start_screen_secondary_draw_callback);
  40. start_screen_set_icon_animation(app->start_screen, 0, 0, &A_StartScreen_128x64);
  41. view_dispatcher_switch_to_view(app->view_dispatcher, MineSweeperStartScreenView);
  42. }
  43. bool minesweeper_scene_start_screen_on_event(void* context, SceneManagerEvent event) {
  44. furi_assert(context);
  45. MineSweeperApp* app = context;
  46. bool consumed = false;
  47. if (event.type == SceneManagerEventTypeCustom) {
  48. if (event.event == MineSweeperSceneStartScreenContinueEvent) {
  49. mine_sweeper_game_screen_reset_clock(app->game_screen);
  50. scene_manager_next_scene(app->scene_manager, MineSweeperSceneGameScreen);
  51. consumed = true;
  52. } else if (event.event == MineSweeperSceneStartScreenExitEvent) {
  53. // Exit app
  54. scene_manager_stop(app->scene_manager);
  55. view_dispatcher_stop(app->view_dispatcher);
  56. consumed = true;
  57. }
  58. }
  59. return consumed;
  60. }
  61. void minesweeper_scene_start_screen_on_exit(void* context) {
  62. furi_assert(context);
  63. MineSweeperApp* app = context;
  64. start_screen_reset(app->start_screen);
  65. }