mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-12 09:06:55 -04:00
Gamepad: WIP towards customising axis behaviour and sensitivity
This commit is contained in:
parent
d056f8c2ff
commit
cfa3676e44
@ -146,6 +146,7 @@ typedef cc_uint8 cc_bool;
|
|||||||
#define CC_BUILD_WIN
|
#define CC_BUILD_WIN
|
||||||
#define CC_BUILD_D3D9
|
#define CC_BUILD_D3D9
|
||||||
#define CC_BUILD_WINGUI
|
#define CC_BUILD_WINGUI
|
||||||
|
#define CC_BUILD_HTTPCLIENT
|
||||||
#define CC_BUILD_SCHANNEL
|
#define CC_BUILD_SCHANNEL
|
||||||
#define CC_BUILD_WINMM
|
#define CC_BUILD_WINMM
|
||||||
#elif defined __ANDROID__
|
#elif defined __ANDROID__
|
||||||
|
25
src/Input.c
25
src/Input.c
@ -420,6 +420,10 @@ static void KeyBind_Init(void) {
|
|||||||
#define GAMEPAD_BEG_BTN CCPAD_A
|
#define GAMEPAD_BEG_BTN CCPAD_A
|
||||||
static float pad_holdtime[INPUT_COUNT - GAMEPAD_BEG_BTN];
|
static float pad_holdtime[INPUT_COUNT - GAMEPAD_BEG_BTN];
|
||||||
|
|
||||||
|
int Gamepad_AxisBehaviour[2] = { AXIS_BEHAVIOUR_MOVEMENT, AXIS_BEHAVIOUR_CAMERA };
|
||||||
|
int Gamepad_AxisSensitivity[2] = { AXIS_SENSI_NORMAL, AXIS_SENSI_NORMAL };
|
||||||
|
static const float axis_sensiFactor[] = { 0.25f, 0.5f, 1.0f, 2.0f, 4.0f };
|
||||||
|
|
||||||
void Gamepad_SetButton(int btn, int pressed) {
|
void Gamepad_SetButton(int btn, int pressed) {
|
||||||
/* Reset hold tracking time */
|
/* Reset hold tracking time */
|
||||||
if (pressed && !Input.Pressed[btn]) pad_holdtime[btn - GAMEPAD_BEG_BTN] = 0;
|
if (pressed && !Input.Pressed[btn]) pad_holdtime[btn - GAMEPAD_BEG_BTN] = 0;
|
||||||
@ -427,25 +431,18 @@ void Gamepad_SetButton(int btn, int pressed) {
|
|||||||
Input_SetNonRepeatable(btn, pressed);
|
Input_SetNonRepeatable(btn, pressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Gamepad_SetLAxis(float x, float y, double delta) {
|
void Gamepad_SetAxis(int axis, float x, float y, double delta) {
|
||||||
|
if (!Input.RawMode) return;
|
||||||
|
|
||||||
|
if (Gamepad_AxisBehaviour[axis] == AXIS_BEHAVIOUR_MOVEMENT) {
|
||||||
if (x == 0 && y == 0) return;
|
if (x == 0 && y == 0) return;
|
||||||
|
|
||||||
Input.JoystickMovement = true;
|
Input.JoystickMovement = true;
|
||||||
Input.JoystickAngle = Math_Atan2(x, -y);
|
Input.JoystickAngle = Math_Atan2(x, -y);
|
||||||
}
|
|
||||||
|
|
||||||
static void Gamepad_SetRAxis(float x, float y, double delta) {
|
|
||||||
float scale = delta * 60.0;
|
|
||||||
Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Gamepad_SetAxis(int axis, float x, float y, double delta) {
|
|
||||||
if (!Input.RawMode) return;
|
|
||||||
|
|
||||||
if (axis == PAD_AXIS_LEFT) {
|
|
||||||
Gamepad_SetLAxis(x, y, delta);
|
|
||||||
} else {
|
} else {
|
||||||
Gamepad_SetRAxis(x, y, delta);
|
int sensi = Gamepad_AxisSensitivity[axis];
|
||||||
|
float scale = delta * 60.0 * axis_sensiFactor[sensi];
|
||||||
|
Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,6 +190,11 @@ void KeyBind_Set(KeyBind binding, int key, cc_uint8* binds);
|
|||||||
/* - left axis: player movement */
|
/* - left axis: player movement */
|
||||||
/* - right axis: camera movement */
|
/* - right axis: camera movement */
|
||||||
enum PAD_AXIS { PAD_AXIS_LEFT, PAD_AXIS_RIGHT };
|
enum PAD_AXIS { PAD_AXIS_LEFT, PAD_AXIS_RIGHT };
|
||||||
|
enum AXIS_SENSITIVITY { AXIS_SENSI_LOWER, AXIS_SENSI_LOW, AXIS_SENSI_NORMAL, AXIS_SENSI_HIGH, AXIS_SENSI_HIGHER };
|
||||||
|
enum AXIS_BEHAVIOUR { AXIS_BEHAVIOUR_MOVEMENT, AXIS_BEHAVIOUR_CAMERA };
|
||||||
|
extern int Gamepad_AxisBehaviour[2];
|
||||||
|
extern int Gamepad_AxisSensitivity[2];
|
||||||
|
|
||||||
/* Sets value of the given gamepad button */
|
/* Sets value of the given gamepad button */
|
||||||
void Gamepad_SetButton(int btn, int pressed);
|
void Gamepad_SetButton(int btn, int pressed);
|
||||||
/* Sets value of the given axis */
|
/* Sets value of the given axis */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user