flipchess_scene_settings.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "../flipchess.h"
  2. #include "../helpers/flipchess_voice.h"
  3. #include <lib/toolbox/value_index.h>
  4. #define TEXT_LABEL_ON "ON"
  5. #define TEXT_LABEL_OFF "OFF"
  6. const char* const haptic_text[2] = {
  7. TEXT_LABEL_OFF,
  8. TEXT_LABEL_ON,
  9. };
  10. const uint32_t haptic_value[2] = {
  11. FlipChessHapticOff,
  12. FlipChessHapticOn,
  13. };
  14. const char* const player_mode_text[4] = {
  15. "Human",
  16. "CPU 1",
  17. "CPU 2",
  18. "CPU 3",
  19. };
  20. const uint32_t player_mode_value[4] = {
  21. FlipChessPlayerHuman,
  22. FlipChessPlayerAI1,
  23. FlipChessPlayerAI2,
  24. FlipChessPlayerAI3,
  25. };
  26. static void flipchess_scene_settings_set_haptic(VariableItem* item) {
  27. FlipChess* app = variable_item_get_context(item);
  28. uint8_t index = variable_item_get_current_value_index(item);
  29. variable_item_set_current_value_text(item, haptic_text[index]);
  30. app->haptic = haptic_value[index];
  31. }
  32. static void flipchess_scene_settings_set_white_mode(VariableItem* item) {
  33. FlipChess* app = variable_item_get_context(item);
  34. uint8_t index = variable_item_get_current_value_index(item);
  35. variable_item_set_current_value_text(item, player_mode_text[index]);
  36. app->white_mode = player_mode_value[index];
  37. }
  38. static void flipchess_scene_settings_set_black_mode(VariableItem* item) {
  39. FlipChess* app = variable_item_get_context(item);
  40. uint8_t index = variable_item_get_current_value_index(item);
  41. variable_item_set_current_value_text(item, player_mode_text[index]);
  42. app->black_mode = player_mode_value[index];
  43. }
  44. void flipchess_scene_settings_submenu_callback(void* context, uint32_t index) {
  45. FlipChess* app = context;
  46. view_dispatcher_send_custom_event(app->view_dispatcher, index);
  47. }
  48. void flipchess_scene_settings_on_enter(void* context) {
  49. FlipChess* app = context;
  50. VariableItem* item;
  51. uint8_t value_index;
  52. if(app->sound == 1) {
  53. flipchess_voice_which_side();
  54. }
  55. // White mode
  56. item = variable_item_list_add(
  57. app->variable_item_list, "White:", 4, flipchess_scene_settings_set_white_mode, app);
  58. value_index = value_index_uint32(app->white_mode, player_mode_value, 4);
  59. variable_item_set_current_value_index(item, value_index);
  60. variable_item_set_current_value_text(item, player_mode_text[value_index]);
  61. // Black mode
  62. item = variable_item_list_add(
  63. app->variable_item_list, "Black:", 4, flipchess_scene_settings_set_black_mode, app);
  64. value_index = value_index_uint32(app->black_mode, player_mode_value, 4);
  65. variable_item_set_current_value_index(item, value_index);
  66. variable_item_set_current_value_text(item, player_mode_text[value_index]);
  67. // Vibro on/off
  68. item = variable_item_list_add(
  69. app->variable_item_list, "Vibro/Haptic:", 2, flipchess_scene_settings_set_haptic, app);
  70. value_index = value_index_uint32(app->haptic, haptic_value, 2);
  71. variable_item_set_current_value_index(item, value_index);
  72. variable_item_set_current_value_text(item, haptic_text[value_index]);
  73. view_dispatcher_switch_to_view(app->view_dispatcher, FlipChessViewIdSettings);
  74. }
  75. bool flipchess_scene_settings_on_event(void* context, SceneManagerEvent event) {
  76. FlipChess* app = context;
  77. UNUSED(app);
  78. bool consumed = false;
  79. if(event.type == SceneManagerEventTypeCustom) {
  80. }
  81. return consumed;
  82. }
  83. void flipchess_scene_settings_on_exit(void* context) {
  84. FlipChess* app = context;
  85. variable_item_list_set_selected_item(app->variable_item_list, 0);
  86. variable_item_list_reset(app->variable_item_list);
  87. }