mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-04-01 15:19:36 -05:00
66 lines
2.1 KiB
C
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
|