mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-12 17:17:09 -04:00
Consoles: Allow rebinding mappings
3DS: Also fixes that clicking on bottom screen would always mass delete blocks
This commit is contained in:
parent
8406571804
commit
29ea9139d1
@ -273,6 +273,10 @@ Further information (e.g. style) for ClassiCube's source code can be found in th
|
|||||||
* [libctru](https://github.com/devkitPro/libctru) - Backend for 3DS
|
* [libctru](https://github.com/devkitPro/libctru) - Backend for 3DS
|
||||||
* [citro3D](https://github.com/devkitPro/citro3d) - Rendering backend for 3DS
|
* [citro3D](https://github.com/devkitPro/citro3d) - Rendering backend for 3DS
|
||||||
* [pspsdk](https://github.com/pspdev/pspsdk) - Backend for PSP
|
* [pspsdk](https://github.com/pspdev/pspsdk) - Backend for PSP
|
||||||
|
* [libfat](https://github.com/devkitPro/libfat) - Filesystem backend for Wii/GC
|
||||||
|
* [Citra](https://github.com/citra-emu/citra) - Emulator used to test 3DS port
|
||||||
|
* [Dolphin](https://github.com/dolphin-emu/dolphin) - Emulator used to test Wii/GC port
|
||||||
|
* [PPSSPP](https://github.com/hrydgard/ppsspp) - Emulator used to test 3DS port
|
||||||
|
|
||||||
## Sound Credits
|
## Sound Credits
|
||||||
ClassiCube uses sounds from [Freesound.org](https://freesound.org)<br>
|
ClassiCube uses sounds from [Freesound.org](https://freesound.org)<br>
|
||||||
|
23
src/Input.c
23
src/Input.c
@ -322,6 +322,18 @@ void Pointer_SetPosition(int idx, int x, int y) {
|
|||||||
*---------------------------------------------------------Keybinds--------------------------------------------------------*
|
*---------------------------------------------------------Keybinds--------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
cc_uint8 KeyBinds[KEYBIND_COUNT];
|
cc_uint8 KeyBinds[KEYBIND_COUNT];
|
||||||
|
/* TODO find a better way than this. maybe alternative keybinds? */
|
||||||
|
#if defined CC_BUILD_3DS || defined CC_BUILD_PSP || defined CC_BUILD_GCWII
|
||||||
|
const cc_uint8 KeyBind_Defaults[KEYBIND_COUNT] = {
|
||||||
|
CCPAD_UP, CCPAD_DOWN, CCPAD_LEFT, CCPAD_RIGHT, /* Movement */
|
||||||
|
CCPAD_A, 0, CCPAD_START, CCPAD_Y, /* Jump, SetSpawn, OpenChat */
|
||||||
|
CCPAD_X, 0, CCPAD_START, 0, /* Inventory, EnterChat */
|
||||||
|
CCKEY_LSHIFT, 'X', 'Z', 'Q', 'E',
|
||||||
|
0, 0, 0, 0,
|
||||||
|
CCKEY_F5, 0, 0, 0,
|
||||||
|
0, CCPAD_L, 0, CCPAD_R,
|
||||||
|
};
|
||||||
|
#else
|
||||||
const cc_uint8 KeyBind_Defaults[KEYBIND_COUNT] = {
|
const cc_uint8 KeyBind_Defaults[KEYBIND_COUNT] = {
|
||||||
'W', 'S', 'A', 'D',
|
'W', 'S', 'A', 'D',
|
||||||
CCKEY_SPACE, 'R', CCKEY_ENTER, 'T',
|
CCKEY_SPACE, 'R', CCKEY_ENTER, 'T',
|
||||||
@ -335,6 +347,7 @@ const cc_uint8 KeyBind_Defaults[KEYBIND_COUNT] = {
|
|||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
'1','2','3', '4','5','6', '7','8','9'
|
'1','2','3', '4','5','6', '7','8','9'
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
static const char* const keybindNames[KEYBIND_COUNT] = {
|
static const char* const keybindNames[KEYBIND_COUNT] = {
|
||||||
"Forward", "Back", "Left", "Right",
|
"Forward", "Back", "Left", "Right",
|
||||||
"Jump", "Respawn", "SetSpawn", "Chat", "Inventory",
|
"Jump", "Respawn", "SetSpawn", "Chat", "Inventory",
|
||||||
@ -359,7 +372,8 @@ static void KeyBind_Load(void) {
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
String_InitArray_NT(name, nameBuffer);
|
String_InitArray_NT(name, nameBuffer);
|
||||||
for (i = 0; i < KEYBIND_COUNT; i++) {
|
for (i = 0; i < KEYBIND_COUNT; i++)
|
||||||
|
{
|
||||||
name.length = 0;
|
name.length = 0;
|
||||||
String_Format1(&name, "key-%c", keybindNames[i]);
|
String_Format1(&name, "key-%c", keybindNames[i]);
|
||||||
name.buffer[name.length] = '\0';
|
name.buffer[name.length] = '\0';
|
||||||
@ -383,7 +397,8 @@ void KeyBind_Set(KeyBind binding, int key) {
|
|||||||
/* Initialises and loads key bindings from options */
|
/* Initialises and loads key bindings from options */
|
||||||
static void KeyBind_Init(void) {
|
static void KeyBind_Init(void) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < KEYBIND_COUNT; i++) {
|
for (i = 0; i < KEYBIND_COUNT; i++)
|
||||||
|
{
|
||||||
KeyBinds[i] = KeyBind_Defaults[i];
|
KeyBinds[i] = KeyBind_Defaults[i];
|
||||||
}
|
}
|
||||||
KeyBind_Load();
|
KeyBind_Load();
|
||||||
@ -1057,7 +1072,7 @@ static void OnInputDown(void* obj, int key, cc_bool was) {
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
#ifndef CC_BUILD_WEB
|
#ifndef CC_BUILD_WEB
|
||||||
if (key == CCKEY_ESCAPE && (s = Gui_GetClosable())) {
|
if (Input_IsEscapeButton(key) && (s = Gui_GetClosable())) {
|
||||||
/* Don't want holding down escape to go in and out of pause menu */
|
/* Don't want holding down escape to go in and out of pause menu */
|
||||||
if (!was) Gui_Remove(s);
|
if (!was) Gui_Remove(s);
|
||||||
return;
|
return;
|
||||||
@ -1077,7 +1092,7 @@ static void OnInputDown(void* obj, int key, cc_bool was) {
|
|||||||
if (s->VTABLE->HandlesInputDown(s, key)) return;
|
if (s->VTABLE->HandlesInputDown(s, key)) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((key == CCKEY_ESCAPE || key == CCKEY_PAUSE) && !Gui.InputGrab) {
|
if ((Input_IsEscapeButton(key) || key == CCKEY_PAUSE) && !Gui.InputGrab) {
|
||||||
#ifdef CC_BUILD_WEB
|
#ifdef CC_BUILD_WEB
|
||||||
/* Can't do this in KeyUp, because pressing escape without having */
|
/* Can't do this in KeyUp, because pressing escape without having */
|
||||||
/* explicitly disabled mouse lock means a KeyUp event isn't sent. */
|
/* explicitly disabled mouse lock means a KeyUp event isn't sent. */
|
||||||
|
@ -76,25 +76,21 @@ void Window_Close(void) {
|
|||||||
*----------------------------------------------------Input processing-----------------------------------------------------*
|
*----------------------------------------------------Input processing-----------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static void HandleButtons_Game(u32 mods) {
|
static void HandleButtons_Game(u32 mods) {
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_PLACE_BLOCK], mods & KEY_L);
|
Input_SetNonRepeatable(CCPAD_L, mods & KEY_L);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_DELETE_BLOCK], mods & KEY_R);
|
Input_SetNonRepeatable(CCPAD_R, mods & KEY_R);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_JUMP], mods & KEY_A);
|
Input_SetNonRepeatable(CCPAD_A, mods & KEY_A);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_INVENTORY], mods & KEY_X);
|
Input_SetNonRepeatable(CCPAD_B, mods & KEY_B);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_CHAT], mods & KEY_Y);
|
Input_SetNonRepeatable(CCPAD_X, mods & KEY_X);
|
||||||
|
Input_SetNonRepeatable(CCPAD_Y, mods & KEY_Y);
|
||||||
|
|
||||||
Input_SetNonRepeatable(CCKEY_ENTER, mods & KEY_START);
|
Input_SetNonRepeatable(CCPAD_START, mods & KEY_START);
|
||||||
Input_SetNonRepeatable(CCKEY_ESCAPE, mods & KEY_SELECT);
|
Input_SetNonRepeatable(CCPAD_SELECT, mods & KEY_SELECT);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_LEFT], mods & KEY_DLEFT);
|
Input_SetNonRepeatable(CCPAD_LEFT, mods & KEY_DLEFT);
|
||||||
Input_SetNonRepeatable(CCPAD_LEFT, mods & KEY_DLEFT);
|
Input_SetNonRepeatable(CCPAD_RIGHT, mods & KEY_DRIGHT);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_RIGHT], mods & KEY_DRIGHT);
|
Input_SetNonRepeatable(CCPAD_UP, mods & KEY_DUP);
|
||||||
Input_SetNonRepeatable(CCPAD_RIGHT, mods & KEY_DRIGHT);
|
Input_SetNonRepeatable(CCPAD_DOWN, mods & KEY_DDOWN);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_FORWARD], mods & KEY_DUP);
|
|
||||||
Input_SetNonRepeatable(CCPAD_UP, mods & KEY_DUP);
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_BACK], mods & KEY_DDOWN);
|
|
||||||
Input_SetNonRepeatable(CCPAD_DOWN, mods & KEY_DDOWN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HandleButtons_Launcher(u32 mods) {
|
static void HandleButtons_Launcher(u32 mods) {
|
||||||
@ -108,6 +104,7 @@ static void HandleButtons_Launcher(u32 mods) {
|
|||||||
Input_SetNonRepeatable(CCPAD_UP, mods & KEY_DUP);
|
Input_SetNonRepeatable(CCPAD_UP, mods & KEY_DUP);
|
||||||
Input_SetNonRepeatable(CCPAD_DOWN, mods & KEY_DDOWN);
|
Input_SetNonRepeatable(CCPAD_DOWN, mods & KEY_DDOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ProcessJoystickInput(circlePosition* pos) {
|
static void ProcessJoystickInput(circlePosition* pos) {
|
||||||
// May not be exactly 0 on actual hardware
|
// May not be exactly 0 on actual hardware
|
||||||
if (Math_AbsI(pos->dx) <= 4) pos->dx = 0;
|
if (Math_AbsI(pos->dx) <= 4) pos->dx = 0;
|
||||||
|
@ -165,47 +165,42 @@ static void ProcessWPAD_Launcher(int mods) {
|
|||||||
Input_SetNonRepeatable(CCKEY_ENTER, mods & WPAD_BUTTON_A);
|
Input_SetNonRepeatable(CCKEY_ENTER, mods & WPAD_BUTTON_A);
|
||||||
Input_SetNonRepeatable(CCKEY_ESCAPE, mods & WPAD_BUTTON_B);
|
Input_SetNonRepeatable(CCKEY_ESCAPE, mods & WPAD_BUTTON_B);
|
||||||
|
|
||||||
Input_SetNonRepeatable(CCPAD_LEFT, mods & WPAD_BUTTON_LEFT);
|
Input_SetNonRepeatable(CCPAD_LEFT, mods & WPAD_BUTTON_LEFT);
|
||||||
Input_SetNonRepeatable(CCPAD_RIGHT, mods & WPAD_BUTTON_RIGHT);
|
Input_SetNonRepeatable(CCPAD_RIGHT, mods & WPAD_BUTTON_RIGHT);
|
||||||
Input_SetNonRepeatable(CCPAD_UP, mods & WPAD_BUTTON_UP);
|
Input_SetNonRepeatable(CCPAD_UP, mods & WPAD_BUTTON_UP);
|
||||||
Input_SetNonRepeatable(CCPAD_DOWN, mods & WPAD_BUTTON_DOWN);
|
Input_SetNonRepeatable(CCPAD_DOWN, mods & WPAD_BUTTON_DOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ProcessWPAD_Game(int mods) {
|
static void ProcessWPAD_Game(int mods) {
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_PLACE_BLOCK], mods & WPAD_BUTTON_1);
|
Input_SetNonRepeatable(CCPAD_L, mods & WPAD_BUTTON_1);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_DELETE_BLOCK], mods & WPAD_BUTTON_2);
|
Input_SetNonRepeatable(CCPAD_R, mods & WPAD_BUTTON_2);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_JUMP], mods & WPAD_BUTTON_A);
|
Input_SetNonRepeatable(CCPAD_A, mods & WPAD_BUTTON_A);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_INVENTORY], mods & WPAD_BUTTON_PLUS);
|
Input_SetNonRepeatable(CCPAD_B, mods & WPAD_BUTTON_B);
|
||||||
// TODO: WPAD_BUTTON_B
|
Input_SetNonRepeatable(CCPAD_X, mods & WPAD_BUTTON_PLUS);
|
||||||
|
|
||||||
Input_SetNonRepeatable(CCKEY_ENTER, mods & WPAD_BUTTON_HOME);
|
Input_SetNonRepeatable(CCPAD_START, mods & WPAD_BUTTON_HOME);
|
||||||
Input_SetNonRepeatable(CCKEY_ESCAPE, mods & WPAD_BUTTON_MINUS);
|
Input_SetNonRepeatable(CCPAD_SELECT, mods & WPAD_BUTTON_MINUS);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_LEFT], mods & WPAD_BUTTON_LEFT);
|
Input_SetNonRepeatable(CCPAD_LEFT, mods & WPAD_BUTTON_LEFT);
|
||||||
Input_SetNonRepeatable(CCPAD_LEFT, mods & WPAD_BUTTON_LEFT);
|
Input_SetNonRepeatable(CCPAD_RIGHT, mods & WPAD_BUTTON_RIGHT);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_RIGHT], mods & WPAD_BUTTON_RIGHT);
|
Input_SetNonRepeatable(CCPAD_UP, mods & WPAD_BUTTON_UP);
|
||||||
Input_SetNonRepeatable(CCPAD_RIGHT, mods & WPAD_BUTTON_RIGHT);
|
Input_SetNonRepeatable(CCPAD_DOWN, mods & WPAD_BUTTON_DOWN);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_FORWARD], mods & WPAD_BUTTON_UP);
|
|
||||||
Input_SetNonRepeatable(CCPAD_UP, mods & WPAD_BUTTON_UP);
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_BACK], mods & WPAD_BUTTON_DOWN);
|
|
||||||
Input_SetNonRepeatable(CCPAD_DOWN, mods & WPAD_BUTTON_DOWN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ProcessNunchuck_Game(int mods, double delta) {
|
static void ProcessNunchuck_Game(int mods, double delta) {
|
||||||
WPADData* wd = WPAD_Data(0);
|
WPADData* wd = WPAD_Data(0);
|
||||||
joystick_t analog = wd->exp.nunchuk.js;
|
joystick_t analog = wd->exp.nunchuk.js;
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_PLACE_BLOCK], mods & WPAD_NUNCHUK_BUTTON_C);
|
Input_SetNonRepeatable(CCPAD_L, mods & WPAD_NUNCHUK_BUTTON_C);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_DELETE_BLOCK], mods & WPAD_NUNCHUK_BUTTON_Z);
|
Input_SetNonRepeatable(CCPAD_R, mods & WPAD_NUNCHUK_BUTTON_Z);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_JUMP], mods & WPAD_BUTTON_A);
|
Input_SetNonRepeatable(CCPAD_A, mods & WPAD_BUTTON_A);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_CHAT], mods & WPAD_BUTTON_1);
|
Input_SetNonRepeatable(CCPAD_Y, mods & WPAD_BUTTON_1);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_INVENTORY], mods & WPAD_BUTTON_2);
|
Input_SetNonRepeatable(CCPAD_X, mods & WPAD_BUTTON_2);
|
||||||
|
|
||||||
Input_SetNonRepeatable(CCKEY_ENTER, mods & WPAD_BUTTON_HOME);
|
Input_SetNonRepeatable(CCPAD_START, mods & WPAD_BUTTON_HOME);
|
||||||
Input_SetNonRepeatable(CCKEY_ESCAPE, mods & WPAD_BUTTON_MINUS);
|
Input_SetNonRepeatable(CCPAD_SELECT, mods & WPAD_BUTTON_MINUS);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_FLY], mods & WPAD_BUTTON_LEFT);
|
Input_SetNonRepeatable(KeyBinds[KEYBIND_FLY], mods & WPAD_BUTTON_LEFT);
|
||||||
|
|
||||||
@ -222,15 +217,10 @@ static void ProcessNunchuck_Game(int mods, double delta) {
|
|||||||
bool nunchuckLeft = (analog.ang > -90-ANGLE_DELTA) && (analog.ang < -90+ANGLE_DELTA) && (analog.mag > 0.5);
|
bool nunchuckLeft = (analog.ang > -90-ANGLE_DELTA) && (analog.ang < -90+ANGLE_DELTA) && (analog.mag > 0.5);
|
||||||
bool nunchuckRight = (analog.ang > 90-ANGLE_DELTA) && (analog.ang < 90+ANGLE_DELTA) && (analog.mag > 0.5);
|
bool nunchuckRight = (analog.ang > 90-ANGLE_DELTA) && (analog.ang < 90+ANGLE_DELTA) && (analog.mag > 0.5);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_LEFT], nunchuckLeft);
|
Input_SetNonRepeatable(CCPAD_LEFT, nunchuckLeft);
|
||||||
Input_SetNonRepeatable(CCPAD_LEFT, nunchuckLeft);
|
Input_SetNonRepeatable(CCPAD_RIGHT, nunchuckRight);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_RIGHT], nunchuckRight);
|
Input_SetNonRepeatable(CCPAD_UP, nunchuckUp);
|
||||||
Input_SetNonRepeatable(CCPAD_RIGHT, nunchuckRight);
|
Input_SetNonRepeatable(CCPAD_DOWN, nunchuckDown);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_FORWARD], nunchuckUp);
|
|
||||||
Input_SetNonRepeatable(CCPAD_UP, nunchuckUp);
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_BACK], nunchuckDown);
|
|
||||||
Input_SetNonRepeatable(CCPAD_DOWN, nunchuckDown);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ProcessClassic_Joystick(struct joystick_t* js) {
|
static void ProcessClassic_Joystick(struct joystick_t* js) {
|
||||||
@ -249,26 +239,21 @@ static void ProcessClassic_Game(void) {
|
|||||||
classic_ctrl_t ctrls = wd->exp.classic;
|
classic_ctrl_t ctrls = wd->exp.classic;
|
||||||
int mods = ctrls.btns | ctrls.btns_held;
|
int mods = ctrls.btns | ctrls.btns_held;
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_PLACE_BLOCK], mods & CLASSIC_CTRL_BUTTON_FULL_L);
|
Input_SetNonRepeatable(CCPAD_L, mods & CLASSIC_CTRL_BUTTON_FULL_L);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_DELETE_BLOCK], mods & CLASSIC_CTRL_BUTTON_FULL_R);
|
Input_SetNonRepeatable(CCPAD_R, mods & CLASSIC_CTRL_BUTTON_FULL_R);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_JUMP], mods & CLASSIC_CTRL_BUTTON_A);
|
Input_SetNonRepeatable(CCPAD_A, mods & CLASSIC_CTRL_BUTTON_A);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_INVENTORY], mods & CLASSIC_CTRL_BUTTON_X);
|
Input_SetNonRepeatable(CCPAD_B, mods & CLASSIC_CTRL_BUTTON_B);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_CHAT], mods & CLASSIC_CTRL_BUTTON_Y);
|
Input_SetNonRepeatable(CCPAD_X, mods & CLASSIC_CTRL_BUTTON_X);
|
||||||
// TODO: CLASSIC_CTRL_BUTTON_B
|
Input_SetNonRepeatable(CCPAD_Y, mods & CLASSIC_CTRL_BUTTON_Y);
|
||||||
|
|
||||||
Input_SetNonRepeatable(CCKEY_ENTER, mods & CLASSIC_CTRL_BUTTON_PLUS);
|
Input_SetNonRepeatable(CCPAD_START, mods & CLASSIC_CTRL_BUTTON_PLUS);
|
||||||
Input_SetNonRepeatable(CCKEY_ESCAPE, mods & CLASSIC_CTRL_BUTTON_MINUS);
|
Input_SetNonRepeatable(CCPAD_SELECT, mods & CLASSIC_CTRL_BUTTON_MINUS);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_LEFT], mods & CLASSIC_CTRL_BUTTON_LEFT);
|
Input_SetNonRepeatable(CCPAD_LEFT, mods & CLASSIC_CTRL_BUTTON_LEFT);
|
||||||
Input_SetNonRepeatable(CCPAD_LEFT, mods & CLASSIC_CTRL_BUTTON_LEFT);
|
Input_SetNonRepeatable(CCPAD_RIGHT, mods & CLASSIC_CTRL_BUTTON_RIGHT);
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_RIGHT], mods & CLASSIC_CTRL_BUTTON_RIGHT);
|
Input_SetNonRepeatable(CCPAD_UP, mods & CLASSIC_CTRL_BUTTON_UP);
|
||||||
Input_SetNonRepeatable(CCPAD_RIGHT, mods & CLASSIC_CTRL_BUTTON_RIGHT);
|
Input_SetNonRepeatable(CCPAD_DOWN, mods & CLASSIC_CTRL_BUTTON_DOWN);
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_FORWARD], mods & CLASSIC_CTRL_BUTTON_UP);
|
|
||||||
Input_SetNonRepeatable(CCPAD_UP, mods & CLASSIC_CTRL_BUTTON_UP);
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_BACK], mods & CLASSIC_CTRL_BUTTON_DOWN);
|
|
||||||
Input_SetNonRepeatable(CCPAD_DOWN, mods & CLASSIC_CTRL_BUTTON_DOWN);
|
|
||||||
|
|
||||||
if (Input.RawMode) {
|
if (Input.RawMode) {
|
||||||
ProcessClassic_Joystick(&ctrls.ljs);
|
ProcessClassic_Joystick(&ctrls.ljs);
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#define BUFFER_WIDTH 512
|
#define BUFFER_WIDTH 512
|
||||||
#define SCREEN_WIDTH 480
|
#define SCREEN_WIDTH 480
|
||||||
#define SCREEN_HEIGHT 272
|
#define SCREEN_HEIGHT 272
|
||||||
|
static cc_bool launcherMode;
|
||||||
|
|
||||||
void Window_Init(void) {
|
void Window_Init(void) {
|
||||||
DisplayInfo.Width = SCREEN_WIDTH;
|
DisplayInfo.Width = SCREEN_WIDTH;
|
||||||
@ -31,10 +32,8 @@ void Window_Init(void) {
|
|||||||
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
|
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DoCreateWindow(int _3d) {
|
void Window_Create2D(int width, int height) { launcherMode = true; }
|
||||||
}
|
void Window_Create3D(int width, int height) { launcherMode = false; }
|
||||||
void Window_Create2D(int width, int height) { DoCreateWindow(0); }
|
|
||||||
void Window_Create3D(int width, int height) { DoCreateWindow(1); }
|
|
||||||
|
|
||||||
void Window_SetTitle(const cc_string* title) { }
|
void Window_SetTitle(const cc_string* title) { }
|
||||||
void Clipboard_GetText(cc_string* value) { }
|
void Clipboard_GetText(cc_string* value) { }
|
||||||
@ -52,6 +51,36 @@ void Window_Close(void) {
|
|||||||
/* TODO implement */
|
/* TODO implement */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void HandleButtons_Launcher(int mods) {
|
||||||
|
Input_SetNonRepeatable(CCKEY_ENTER, mods & PSP_CTRL_TRIANGLE);
|
||||||
|
Input_SetNonRepeatable(CCKEY_ESCAPE, mods & PSP_CTRL_SQUARE);
|
||||||
|
// fake tab with PSP_CTRL_SQUARE for Launcher too
|
||||||
|
//Input_SetNonRepeatable(CCKEY_TAB, mods & PSP_CTRL_SQUARE);
|
||||||
|
|
||||||
|
Input_SetNonRepeatable(CCPAD_LEFT, mods & PSP_CTRL_LEFT);
|
||||||
|
Input_SetNonRepeatable(CCPAD_RIGHT, mods & PSP_CTRL_RIGHT);
|
||||||
|
Input_SetNonRepeatable(CCPAD_UP, mods & PSP_CTRL_UP);
|
||||||
|
Input_SetNonRepeatable(CCPAD_DOWN, mods & PSP_CTRL_DOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HandleButtons_Game(int mods) {
|
||||||
|
Input_SetNonRepeatable(CCPAD_L, mods & PSP_CTRL_LTRIGGER);
|
||||||
|
Input_SetNonRepeatable(CCPAD_R, mods & PSP_CTRL_RTRIGGER);
|
||||||
|
|
||||||
|
Input_SetNonRepeatable(CCPAD_A, mods & PSP_CTRL_TRIANGLE);
|
||||||
|
Input_SetNonRepeatable(CCPAD_B, mods & PSP_CTRL_SQUARE);
|
||||||
|
Input_SetNonRepeatable(CCPAD_X, mods & PSP_CTRL_CROSS);
|
||||||
|
Input_SetNonRepeatable(CCPAD_Y, mods & PSP_CTRL_CIRCLE);
|
||||||
|
|
||||||
|
Input_SetNonRepeatable(CCPAD_START, mods & PSP_CTRL_START);
|
||||||
|
Input_SetNonRepeatable(CCPAD_SELECT, mods & PSP_CTRL_SELECT);
|
||||||
|
|
||||||
|
Input_SetNonRepeatable(CCPAD_LEFT, mods & PSP_CTRL_LEFT);
|
||||||
|
Input_SetNonRepeatable(CCPAD_RIGHT, mods & PSP_CTRL_RIGHT);
|
||||||
|
Input_SetNonRepeatable(CCPAD_UP, mods & PSP_CTRL_UP);
|
||||||
|
Input_SetNonRepeatable(CCPAD_DOWN, mods & PSP_CTRL_DOWN);
|
||||||
|
}
|
||||||
|
|
||||||
void Window_ProcessEvents(double delta) {
|
void Window_ProcessEvents(double delta) {
|
||||||
SceCtrlData pad;
|
SceCtrlData pad;
|
||||||
/* TODO implement */
|
/* TODO implement */
|
||||||
@ -63,31 +92,13 @@ void Window_ProcessEvents(double delta) {
|
|||||||
if (Input.RawMode && (Math_AbsI(dx) > 1 || Math_AbsI(dy) > 1)) {
|
if (Input.RawMode && (Math_AbsI(dx) > 1 || Math_AbsI(dy) > 1)) {
|
||||||
//Platform_Log2("RAW: %i, %i", &dx, &dy);
|
//Platform_Log2("RAW: %i, %i", &dx, &dy);
|
||||||
Event_RaiseRawMove(&PointerEvents.RawMoved, dx / 32.0f, dy / 32.0f);
|
Event_RaiseRawMove(&PointerEvents.RawMoved, dx / 32.0f, dy / 32.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (launcherMode) {
|
||||||
|
HandleButtons_Launcher(mods);
|
||||||
|
} else {
|
||||||
|
HandleButtons_Game(mods);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_PLACE_BLOCK], mods & PSP_CTRL_LTRIGGER);
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_DELETE_BLOCK], mods & PSP_CTRL_RTRIGGER);
|
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_JUMP], mods & PSP_CTRL_TRIANGLE);
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_CHAT], mods & PSP_CTRL_CIRCLE);
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_INVENTORY], mods & PSP_CTRL_CROSS);
|
|
||||||
// PSP_CTRL_SQUARE
|
|
||||||
|
|
||||||
Input_SetNonRepeatable(CCKEY_ENTER, mods & PSP_CTRL_START);
|
|
||||||
Input_SetNonRepeatable(CCKEY_ESCAPE, mods & PSP_CTRL_SELECT);
|
|
||||||
// fake tab with PSP_CTRL_SQUARE for Launcher too
|
|
||||||
Input_SetNonRepeatable(CCKEY_TAB, mods & PSP_CTRL_SQUARE);
|
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_LEFT], mods & PSP_CTRL_LEFT);
|
|
||||||
Input_SetNonRepeatable(CCPAD_LEFT, mods & PSP_CTRL_LEFT);
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_RIGHT], mods & PSP_CTRL_RIGHT);
|
|
||||||
Input_SetNonRepeatable(CCPAD_RIGHT, mods & PSP_CTRL_RIGHT);
|
|
||||||
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_FORWARD], mods & PSP_CTRL_UP);
|
|
||||||
Input_SetNonRepeatable(CCPAD_UP, mods & PSP_CTRL_UP);
|
|
||||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_BACK], mods & PSP_CTRL_DOWN);
|
|
||||||
Input_SetNonRepeatable(CCPAD_DOWN, mods & PSP_CTRL_DOWN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Cursor_GetRawPos(int* x, int* y) {
|
static void Cursor_GetRawPos(int* x, int* y) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user