input.h (1732B)
1 2 3 #ifndef POLYADVENT_INPUT_H 4 #define POLYADVENT_INPUT_H 5 6 #include <SDL.h> 7 #include "common.h" 8 9 /* enum key_state { */ 10 /* KEY_NONE, */ 11 /* KEY_DOWN, */ 12 /* KEY_UP */ 13 /* }; */ 14 15 #define MOUSE_BUTTONS 5 16 17 /* #define KEY_BUFFER_SIZE 32 */ 18 19 #define FLAG_KEY_DOWN (1<<0) 20 #define FLAG_KEY_UP (1<<1) 21 22 #define MAX_AXIS 2 23 #define MAX_AXIS_VALUE 32767 24 #define MIN_AXIS_VALUE -32767 25 #define MAX_CONTROLLERS 26 27 struct input_edge { 28 int is_down; 29 u64 down_frame; 30 u64 up_frame; 31 }; 32 33 struct input { 34 /* enum key_state keys[0x7F-0x1F]; */ 35 u8 const *keystates; 36 SDL_Keymod modifiers; 37 SDL_GameController *controller; 38 int mx, my, last_mx, last_my; 39 int axis[MAX_AXIS]; 40 int axis_min_input; 41 int mdx, mdy; 42 float wheel_x, wheel_y; 43 int mbuttons[MOUSE_BUTTONS]; 44 int n_frame_down_keys; 45 int n_frame_up_keys; 46 int resized_width; 47 int resized_height; 48 /* u64 down_key_frames[KEY_BUFFER_SIZE]; */ 49 /* u64 up_key_frames[KEY_BUFFER_SIZE]; */ 50 /* u8 frame_down_keys[KEY_BUFFER_SIZE]; */ 51 /* u8 frame_up_keys[KEY_BUFFER_SIZE]; */ 52 struct input_edge key_edge_states[SDL_NUM_SCANCODES]; 53 struct input_edge button_edge_states[SDL_CONTROLLER_BUTTON_MAX]; 54 }; 55 56 int input_is_dragging(struct input *input, int mouse_button); 57 58 bool is_button_down(struct input *input, SDL_GameControllerButton button); 59 bool is_key_down_on_frame(struct input *input, u8 scancode, u64 frame); 60 bool is_button_down_on_frame(struct input *input, SDL_GameControllerButton button, u64 frame); 61 62 void init_input(struct input *input); 63 void input_reset(struct input *input); 64 void handle_key(struct input *input, SDL_KeyboardEvent); 65 void process_events(struct input *input, u64 current_frame); 66 67 #endif /* POLYADVENT_INPUT_H */