gb_cartridge_custom_event.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #pragma once
  2. typedef enum {
  3. GBCartridgeCustomEventStartscreenUp,
  4. GBCartridgeCustomEventStartscreenDown,
  5. GBCartridgeCustomEventStartscreenLeft,
  6. GBCartridgeCustomEventStartscreenRight,
  7. GBCartridgeCustomEventStartscreenOk,
  8. GBCartridgeCustomEventStartscreenBack,
  9. GBCartridgeCustomEventScene1Up,
  10. GBCartridgeCustomEventScene1Down,
  11. GBCartridgeCustomEventScene1Left,
  12. GBCartridgeCustomEventScene1Right,
  13. GBCartridgeCustomEventScene1Ok,
  14. GBCartridgeCustomEventScene1Back,
  15. GBCartridgeCustomEventScene2Up,
  16. GBCartridgeCustomEventScene2Down,
  17. GBCartridgeCustomEventScene2Left,
  18. GBCartridgeCustomEventScene2Right,
  19. GBCartridgeCustomEventScene2Ok,
  20. GBCartridgeCustomEventScene2Back,
  21. GBCartridgeCustomEventScene3Up,
  22. GBCartridgeCustomEventScene3Down,
  23. GBCartridgeCustomEventScene3Left,
  24. GBCartridgeCustomEventScene3Right,
  25. GBCartridgeCustomEventScene3Ok,
  26. GBCartridgeCustomEventScene3Back,
  27. GBCartridgeCustomEventScene4Up,
  28. GBCartridgeCustomEventScene4Down,
  29. GBCartridgeCustomEventScene4Left,
  30. GBCartridgeCustomEventScene4Right,
  31. GBCartridgeCustomEventScene4Ok,
  32. GBCartridgeCustomEventScene4Back,
  33. } GBCartridgeCustomEvent;
  34. enum GBCartridgeCustomEventType {
  35. // Reserve first 100 events for button types and indexes, starting from 0
  36. GBCartridgeCustomEventMenuVoid,
  37. GBCartridgeCustomEventMenuSelected,
  38. };
  39. #pragma pack(push, 1)
  40. typedef union {
  41. uint32_t packed_value;
  42. struct {
  43. uint16_t type;
  44. int16_t value;
  45. } content;
  46. } GBCartridgeCustomEventMenu;
  47. #pragma pack(pop)
  48. static inline uint32_t gb_cartridge_custom_menu_event_pack(uint16_t type, int16_t value) {
  49. GBCartridgeCustomEventMenu event = {.content = {.type = type, .value = value}};
  50. return event.packed_value;
  51. }
  52. static inline void gb_cartridge_custom_menu_event_unpack(uint32_t packed_value, uint16_t* type, int16_t* value) {
  53. GBCartridgeCustomEventMenu event = {.packed_value = packed_value};
  54. if(type) *type = event.content.type;
  55. if(value) *value = event.content.value;
  56. }
  57. static inline uint16_t gb_cartridge_custom_menu_event_get_type(uint32_t packed_value) {
  58. uint16_t type;
  59. gb_cartridge_custom_menu_event_unpack(packed_value, &type, NULL);
  60. return type;
  61. }
  62. static inline int16_t gb_cartridge_custom_menu_event_get_value(uint32_t packed_value) {
  63. int16_t value;
  64. gb_cartridge_custom_menu_event_unpack(packed_value, NULL, &value);
  65. return value;
  66. }