ppsspp/input/input_state.h

88 lines
2 KiB
C
Raw Normal View History

2012-03-24 23:39:19 +01:00
#pragma once
#include "math/lin/vec3.h"
2012-04-27 00:48:30 +02:00
#include "base/mutex.h"
2012-08-12 20:50:12 +02:00
#include "base/basictypes.h"
2012-03-24 23:39:19 +01:00
enum {
2012-10-30 13:20:55 +01:00
PAD_BUTTON_A = 1,
PAD_BUTTON_B = 2,
PAD_BUTTON_X = 4,
PAD_BUTTON_Y = 8,
PAD_BUTTON_LBUMPER = 16,
PAD_BUTTON_RBUMPER = 32,
PAD_BUTTON_START = 64,
PAD_BUTTON_SELECT = 128,
PAD_BUTTON_UP = 256,
PAD_BUTTON_DOWN = 512,
PAD_BUTTON_LEFT = 1024,
PAD_BUTTON_RIGHT = 2048,
2012-10-28 11:37:10 +01:00
PAD_BUTTON_MENU = 4096,
PAD_BUTTON_BACK = 8192,
// For Blackberry and Qt
PAD_BUTTON_JOY_UP = 1<<14,
PAD_BUTTON_JOY_DOWN = 1<<15,
PAD_BUTTON_JOY_LEFT = 1<<16,
PAD_BUTTON_JOY_RIGHT = 1<<17,
2012-03-24 23:39:19 +01:00
};
2012-04-27 00:48:30 +02:00
#ifndef MAX_POINTERS
#define MAX_POINTERS 8
#endif
2012-10-30 13:20:55 +01:00
2012-10-31 20:42:43 +01:00
// Collection of all possible inputs, and automatically computed
2012-03-24 23:39:19 +01:00
// deltas where applicable.
struct InputState {
2012-10-30 13:20:55 +01:00
// Lock this whenever you access the data in this struct.
mutable recursive_mutex lock;
InputState()
: pad_buttons(0),
pad_last_buttons(0),
pad_buttons_down(0),
pad_buttons_up(0),
mouse_valid(false),
accelerometer_valid(false) {
memset(pointer_down, 0, sizeof(pointer_down));
}
2012-04-27 00:48:30 +02:00
2012-10-30 13:20:55 +01:00
// Gamepad style input
int pad_buttons; // bitfield
int pad_last_buttons;
int pad_buttons_down; // buttons just pressed this frame
int pad_buttons_up; // buttons just pressed last frame
float pad_lstick_x;
float pad_lstick_y;
float pad_rstick_x;
float pad_rstick_y;
float pad_ltrigger;
float pad_rtrigger;
2012-03-24 23:39:19 +01:00
2012-10-30 13:20:55 +01:00
// Mouse/touch style input
// There are up to 8 mice / fingers.
volatile bool mouse_valid;
2012-04-27 00:48:30 +02:00
2012-10-30 13:20:55 +01:00
int pointer_x[MAX_POINTERS];
int pointer_y[MAX_POINTERS];
bool pointer_down[MAX_POINTERS];
2012-03-31 11:16:13 +02:00
2012-10-30 13:20:55 +01:00
// Accelerometer
bool accelerometer_valid;
Vec3 acc;
2012-07-26 17:24:47 +02:00
2012-10-31 20:42:43 +01:00
// TODO: Add key arrays
2012-07-26 17:24:47 +02:00
private:
2012-10-30 13:20:55 +01:00
DISALLOW_COPY_AND_ASSIGN(InputState);
2012-03-24 23:39:19 +01:00
};
inline void UpdateInputState(InputState *input) {
2012-10-30 13:20:55 +01:00
input->pad_buttons_down = (input->pad_last_buttons ^ input->pad_buttons) & input->pad_buttons;
input->pad_buttons_up = (input->pad_last_buttons ^ input->pad_buttons) & input->pad_last_buttons;
2012-10-26 18:42:17 +02:00
}
inline void EndInputState(InputState *input) {
2012-10-30 13:20:55 +01:00
input->pad_last_buttons = input->pad_buttons;
2012-03-24 23:39:19 +01:00
}