pokemon_item.c 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include <gui/modules/submenu.h>
  2. #include <gui/scene_manager.h>
  3. #include <stdio.h>
  4. #include <named_list.h>
  5. #include "../pokemon_app.h"
  6. #include "../pokemon_data.h"
  7. #include "pokemon_menu.h"
  8. static void select_item_selected_callback(void* context, uint32_t index) {
  9. PokemonFap* pokemon_fap = (PokemonFap*)context;
  10. uint32_t item = scene_manager_get_scene_state(pokemon_fap->scene_manager, SelectItemSetScene);
  11. pokemon_stat_set(pokemon_fap->pdata, STAT_HELD_ITEM, item, index);
  12. FURI_LOG_D(
  13. TAG,
  14. "[item] Set item %s",
  15. namedlist_name_get_index(
  16. pokemon_fap->pdata->item_list,
  17. pokemon_stat_get(pokemon_fap->pdata, STAT_HELD_ITEM, item)));
  18. /* Move back to Gen menu. This assumes this submenu is only ever used in Gen II */
  19. scene_manager_search_and_switch_to_previous_scene(pokemon_fap->scene_manager, GenIITradeScene);
  20. }
  21. static void select_item_index_callback(void* context, uint32_t index) {
  22. PokemonFap* pokemon_fap = (PokemonFap*)context;
  23. /* Move to next scene */
  24. scene_manager_set_scene_state(pokemon_fap->scene_manager, SelectItemSetScene, index);
  25. scene_manager_next_scene(pokemon_fap->scene_manager, SelectItemSetScene);
  26. }
  27. void select_item_scene_on_enter(void* context) {
  28. furi_assert(context);
  29. PokemonFap* pokemon_fap = (PokemonFap*)context;
  30. int i;
  31. const char* name;
  32. char letter[2] = {'\0'};
  33. submenu_reset(pokemon_fap->submenu);
  34. /* The item list should always start with No Item, put that at the start
  35. * for quick access.
  36. */
  37. submenu_add_item(
  38. pokemon_fap->submenu,
  39. namedlist_name_get_index(pokemon_fap->pdata->item_list, 0),
  40. 0,
  41. select_item_selected_callback,
  42. pokemon_fap);
  43. for(i = 1;; i++) {
  44. name = namedlist_name_get_pos(pokemon_fap->pdata->item_list, i);
  45. if(name == NULL) break;
  46. if(name[0] != letter[0]) {
  47. letter[0] = name[0];
  48. submenu_add_item(
  49. pokemon_fap->submenu, letter, letter[0], select_item_index_callback, pokemon_fap);
  50. }
  51. }
  52. submenu_set_selected_item(
  53. pokemon_fap->submenu,
  54. scene_manager_get_scene_state(pokemon_fap->scene_manager, SelectItemSetScene));
  55. scene_manager_set_scene_state(pokemon_fap->scene_manager, SelectItemSetScene, 0);
  56. }
  57. void select_item_set_scene_on_enter(void* context) {
  58. PokemonFap* pokemon_fap = (PokemonFap*)context;
  59. int i;
  60. const char* name;
  61. char letter =
  62. (char)scene_manager_get_scene_state(pokemon_fap->scene_manager, SelectItemSetScene);
  63. /* Populate submenu with all items that start with `letter` */
  64. /* NOTE! Start with pos of 1 in the item list since 0 should always be no item! */
  65. submenu_reset(pokemon_fap->submenu);
  66. for(i = 1;; i++) {
  67. name = namedlist_name_get_pos(pokemon_fap->pdata->item_list, i);
  68. if(name == NULL) break;
  69. if(name[0] == letter &&
  70. (pokemon_fap->pdata->gen & namedlist_gen_get_pos(pokemon_fap->pdata->item_list, i))) {
  71. submenu_add_item(
  72. pokemon_fap->submenu,
  73. name,
  74. namedlist_index_get(pokemon_fap->pdata->item_list, i),
  75. select_item_selected_callback,
  76. pokemon_fap);
  77. }
  78. }
  79. }