pokeplatinum/include/overlay025/poketch_button.h
2024-07-06 14:40:34 -07:00

66 lines
2.1 KiB
C

#ifndef POKEPLATINUM_POKETCH_BUTTON_H
#define POKEPLATINUM_POKETCH_BUTTON_H
#include "touch_screen.h"
#define BUTTON_TIMER_MAX 0xffff
#define BUTTON_MANAGER_NUM_TIMERS_PER_BUTTON 2
typedef void (*PoketchButtonCallback)(u32, u32, u32, void *);
enum ButtonManagerState {
BUTTON_MANAGER_STATE_NULL = 0,
BUTTON_MANAGER_STATE_TOUCH,
BUTTON_MANAGER_STATE_DRAGGING,
BUTTON_MANAGER_STATE_TAP,
BUTTON_MANAGER_STATE_DOUBLE_TAP,
BUTTON_MANAGER_STATE_TIMER0,
BUTTON_MANAGER_STATE_TIMER1,
BUTTON_MANAGER_STATE_REPEAT,
};
/** Button states similar to a game input */
enum ButtonTouchState {
BUTTON_TOUCH_PRESSED = 0, //!< up last frame, down this frame
BUTTON_TOUCH_RELEASED, //!< down last frame, up this frame
BUTTON_TOUCH_DOWN, //!< down last frame, down this frame
};
/** States in the Button State Machine */
enum ButtonEventState {
BUTTON_STATE_IDLE = 0,
BUTTON_STATE_TAP,
BUTTON_STATE_CHECK_DOUBLE_TAP,
BUTTON_STATE_DOUBLE_TAP,
BUTTON_STATE_RESET,
};
typedef struct PoketchButton {
u8 state;
u8 screenTouched;
u8 prevScreenTouched;
u8 unk_03; // unused
u16 timer;
u16 doubleTapTime;
u16 timerDurations[BUTTON_MANAGER_NUM_TIMERS_PER_BUTTON];
u16 repeatTime;
} PoketchButton;
typedef struct PoketchButtonManager {
const TouchScreenHitTable *hitTable;
PoketchButtonCallback callback;
u32 heapID;
u32 numButtons;
void *buttonCallbackData;
PoketchButton *buttons;
} PoketchButtonManager;
PoketchButtonManager *PoketchButtonManager_New(const TouchScreenHitTable *hitTable, u32 numButtons, PoketchButtonCallback callback, void *callbackData, u32 heapID);
void PoketchButtonManager_Free(PoketchButtonManager *buttonManager);
void PoketchButtonManager_Update(PoketchButtonManager *buttonManager);
void PoketchButtonManager_SetButtonTimer(PoketchButtonManager *buttonManager, u32 buttonIndex, u32 timerIndex, u16 time);
void PoketchButtonManager_SetRepeatTime(PoketchButtonManager *buttonManager, u32 index, u16 repeatTime);
void PoketchButtonManager_ResetButtonState(PoketchButtonManager *buttonManager, u32 index);
#endif // POKEPLATINUM_POKETCH_BUTTON_H