start_screen_scene.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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, MineSweeperSceneStartScreenExitEvent);
  15. } else {
  16. consumed = scene_manager_handle_custom_event(
  17. app->scene_manager, MineSweeperSceneStartScreenContinueEvent);
  18. }
  19. return consumed;
  20. }
  21. void minesweeper_scene_start_screen_secondary_draw_callback(Canvas* canvas, void* _model) {
  22. furi_assert(canvas);
  23. furi_assert(_model);
  24. UNUSED(_model);
  25. UNUSED(canvas);
  26. }
  27. void minesweeper_scene_start_screen_on_enter(void* context) {
  28. furi_assert(context);
  29. MineSweeperApp* app = context;
  30. furi_assert(app->start_screen);
  31. start_screen_set_context(app->start_screen, app);
  32. start_screen_set_input_callback(
  33. app->start_screen, minesweeper_scene_start_screen_input_callback);
  34. start_screen_set_secondary_draw_callback(
  35. app->start_screen, minesweeper_scene_start_screen_secondary_draw_callback);
  36. start_screen_set_icon_animation(app->start_screen, 0, 0, &A_StartScreen_128x64);
  37. view_dispatcher_switch_to_view(app->view_dispatcher, MineSweeperStartScreenView);
  38. }
  39. bool minesweeper_scene_start_screen_on_event(void* context, SceneManagerEvent event) {
  40. furi_assert(context);
  41. MineSweeperApp* app = context;
  42. bool consumed = false;
  43. if(event.type == SceneManagerEventTypeCustom) {
  44. if(event.event == MineSweeperSceneStartScreenContinueEvent) {
  45. mine_sweeper_game_screen_reset_clock(app->game_screen);
  46. scene_manager_next_scene(app->scene_manager, MineSweeperSceneGameScreen);
  47. consumed = true;
  48. } else if(event.event == MineSweeperSceneStartScreenExitEvent) {
  49. // Exit app
  50. scene_manager_stop(app->scene_manager);
  51. view_dispatcher_stop(app->view_dispatcher);
  52. consumed = true;
  53. }
  54. }
  55. return consumed;
  56. }
  57. void minesweeper_scene_start_screen_on_exit(void* context) {
  58. furi_assert(context);
  59. MineSweeperApp* app = context;
  60. start_screen_reset(app->start_screen);
  61. }