gba_cartridge_custom_event.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. typedef enum {
  3. GBACartridgeCustomEventStartscreenUp,
  4. GBACartridgeCustomEventStartscreenDown,
  5. GBACartridgeCustomEventStartscreenLeft,
  6. GBACartridgeCustomEventStartscreenRight,
  7. GBACartridgeCustomEventStartscreenOk,
  8. GBACartridgeCustomEventStartscreenBack,
  9. GBACartridgeCustomEventScene1Up,
  10. GBACartridgeCustomEventScene1Down,
  11. GBACartridgeCustomEventScene1Left,
  12. GBACartridgeCustomEventScene1Right,
  13. GBACartridgeCustomEventScene1Ok,
  14. GBACartridgeCustomEventScene1Back
  15. } GBACartridgeCustomEvent;
  16. enum GBACartridgeCustomEventType {
  17. // Reserve first 100 events for button types and indexes, starting from 0
  18. GBACartridgeCustomEventMenuVoid,
  19. GBACartridgeCustomEventMenuSelected,
  20. };
  21. #pragma pack(push, 1)
  22. typedef union {
  23. uint32_t packed_value;
  24. struct {
  25. uint16_t type;
  26. int16_t value;
  27. } content;
  28. } GBACartridgeCustomEventMenu;
  29. #pragma pack(pop)
  30. static inline uint32_t gba_cartridge_custom_menu_event_pack(uint16_t type, int16_t value) {
  31. GBACartridgeCustomEventMenu event = {.content = {.type = type, .value = value}};
  32. return event.packed_value;
  33. }
  34. static inline void
  35. gba_cartridge_custom_menu_event_unpack(uint32_t packed_value, uint16_t* type, int16_t* value) {
  36. GBACartridgeCustomEventMenu event = {.packed_value = packed_value};
  37. if(type) *type = event.content.type;
  38. if(value) *value = event.content.value;
  39. }
  40. static inline uint16_t gba_cartridge_custom_menu_event_get_type(uint32_t packed_value) {
  41. uint16_t type;
  42. gba_cartridge_custom_menu_event_unpack(packed_value, &type, NULL);
  43. return type;
  44. }
  45. static inline int16_t gba_cartridge_custom_menu_event_get_value(uint32_t packed_value) {
  46. int16_t value;
  47. gba_cartridge_custom_menu_event_unpack(packed_value, NULL, &value);
  48. return value;
  49. }