From 5c973cda53834857061267d3a05a52cfcbbf57e6 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 29 Jun 2023 23:22:45 +1000 Subject: [PATCH] PSP: Implement rudimentary controls --- src/Makefile | 2 +- src/Window_PSP.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Makefile b/src/Makefile index fe92b30c5..4f637cc14 100644 --- a/src/Makefile +++ b/src/Makefile @@ -108,7 +108,7 @@ endif ifeq ($(PLAT),psp) CC=psp-gcc -LIBS=-lm -lpspgum -lpspgu -lpspge -lpspdisplay +LIBS=-lm -lpspgum -lpspgu -lpspge -lpspdisplay -lpspctrl endif ifeq ($(OS),Windows_NT) diff --git a/src/Window_PSP.c b/src/Window_PSP.c index dc94eed7a..1fa0f47bf 100644 --- a/src/Window_PSP.c +++ b/src/Window_PSP.c @@ -6,8 +6,10 @@ #include "Funcs.h" #include "Bitmap.h" #include "Errors.h" +#include "ExtMath.h" #include #include +#include #define BUFFER_WIDTH 512 #define SCREEN_WIDTH 480 @@ -22,7 +24,10 @@ void Window_Init(void) { WindowInfo.Width = SCREEN_WIDTH; WindowInfo.Height = SCREEN_HEIGHT; - //WindowInfo.Focused = true; + WindowInfo.Focused = true; + + sceCtrlSetSamplingCycle(0); + sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); } static void DoCreateWindow(int _3d) { @@ -48,7 +53,41 @@ void Window_Close(void) { } void Window_ProcessEvents(void) { + SceCtrlData pad; /* TODO implement */ + sceCtrlReadBufferPositive(&pad, 1); + int mods = pad.Buttons; + + int dx = pad.Lx - 127; + int dy = pad.Ly - 127; + if (Input_RawMode && (Math_AbsF(dx) > 1 || Math_AbsF(dy) > 1)) { + //Platform_Log2("RAW: %i, %i", &dx, &dy); + Event_RaiseRawMove(&PointerEvents.RawMoved, dx / 32.0f, dy / 32.0f); + } + + + 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(IPT_ENTER, mods & PSP_CTRL_START); + Input_SetNonRepeatable(IPT_ESCAPE, mods & PSP_CTRL_SELECT); + // fake tab with down for Launcher + Input_SetNonRepeatable(IPT_TAB, mods & PSP_CTRL_DOWN); + + Input_SetNonRepeatable(KeyBinds[KEYBIND_LEFT], mods & PSP_CTRL_LEFT); + Input_SetNonRepeatable(IPT_LEFT, mods & PSP_CTRL_LEFT); + Input_SetNonRepeatable(KeyBinds[KEYBIND_RIGHT], mods & PSP_CTRL_RIGHT); + Input_SetNonRepeatable(IPT_RIGHT, mods & PSP_CTRL_RIGHT); + + Input_SetNonRepeatable(KeyBinds[KEYBIND_FORWARD], mods & PSP_CTRL_UP); + Input_SetNonRepeatable(IPT_UP, mods & PSP_CTRL_UP); + Input_SetNonRepeatable(KeyBinds[KEYBIND_BACK], mods & PSP_CTRL_DOWN); + Input_SetNonRepeatable(IPT_DOWN, mods & PSP_CTRL_DOWN); } static void Cursor_GetRawPos(int* x, int* y) { @@ -131,4 +170,4 @@ void Window_DisableRawMouse(void) { RegrabMouse(); Input_RawMode = false; } -#endif \ No newline at end of file +#endif