game.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "game.h"
  2. #include "game_settings.h"
  3. #include "levels/level_menu.h"
  4. #include "levels/level_game.h"
  5. #include "levels/level_settings.h"
  6. #include "levels/level_message.h"
  7. const NotificationSequence sequence_sound_blip = {
  8. &message_note_c7,
  9. &message_delay_50,
  10. &message_sound_off,
  11. NULL,
  12. };
  13. const NotificationSequence sequence_sound_menu = {
  14. &message_note_c6,
  15. &message_delay_10,
  16. &message_sound_off,
  17. NULL,
  18. };
  19. void game_start(GameManager* game_manager, void* ctx) {
  20. GameContext* context = ctx;
  21. context->imu = imu_alloc();
  22. context->imu_present = imu_present(context->imu);
  23. context->levels.menu = game_manager_add_level(game_manager, &level_menu);
  24. context->levels.settings = game_manager_add_level(game_manager, &level_settings);
  25. context->levels.game = game_manager_add_level(game_manager, &level_game);
  26. context->levels.message = game_manager_add_level(game_manager, &level_message);
  27. if(!game_settings_load(&context->settings)) {
  28. context->settings.sound = true;
  29. context->settings.show_fps = false;
  30. }
  31. context->app = furi_record_open(RECORD_NOTIFICATION);
  32. context->game_manager = game_manager;
  33. game_manager_show_fps_set(context->game_manager, context->settings.show_fps);
  34. }
  35. void game_stop(void* ctx) {
  36. GameContext* context = ctx;
  37. imu_free(context->imu);
  38. furi_record_close(RECORD_NOTIFICATION);
  39. }
  40. const Game game = {
  41. .target_fps = 30,
  42. .show_fps = false,
  43. .always_backlight = true,
  44. .start = game_start,
  45. .stop = game_stop,
  46. .context_size = sizeof(GameContext),
  47. };
  48. void game_switch_sound(GameContext* context) {
  49. context->settings.sound = !context->settings.sound;
  50. game_settings_save(&context->settings);
  51. }
  52. void game_switch_show_fps(GameContext* context) {
  53. context->settings.show_fps = !context->settings.show_fps;
  54. game_manager_show_fps_set(context->game_manager, context->settings.show_fps);
  55. game_settings_save(&context->settings);
  56. }
  57. void game_sound_play(GameContext* context, const NotificationSequence* sequence) {
  58. if(context->settings.sound) {
  59. notification_message(context->app, sequence);
  60. }
  61. }