WIP on supporting pad axis input

This commit is contained in:
UnknownShadow200 2025-03-11 22:37:21 +11:00
parent 1852e68b48
commit 7f383f9caa
2 changed files with 41 additions and 15 deletions

View File

@ -130,7 +130,7 @@ struct ScreenVTABLE {
cc_bool dirty; /* Whether this screens needs to have its mesh rebuilt. */ \ cc_bool dirty; /* Whether this screens needs to have its mesh rebuilt. */ \
int maxVertices; GfxResourceID vb; /* Vertex buffer storing the contents of the screen */ \ int maxVertices; GfxResourceID vb; /* Vertex buffer storing the contents of the screen */ \
struct Widget** widgets; int numWidgets; /* The widgets/individual elements in the screen */ \ struct Widget** widgets; int numWidgets; /* The widgets/individual elements in the screen */ \
int selectedI, maxWidgets; int selectedI, maxWidgets, widgetsPerPage;
/* Represents a container of widgets and other 2D elements. May cover entire window. */ /* Represents a container of widgets and other 2D elements. May cover entire window. */
struct Screen { Screen_Body }; struct Screen { Screen_Body };

View File

@ -167,11 +167,13 @@ static int Menu_InputSelected(struct Screen* s, int key, struct InputDevice* dev
static int Menu_DoInputDown(void* screen, int key, struct InputDevice* device) { static int Menu_DoInputDown(void* screen, int key, struct InputDevice* device) {
struct Screen* s = (struct Screen*)screen; struct Screen* s = (struct Screen*)screen;
int horDelta, verDelta;
if (key == device->upButton) { Input_CalcDelta(key, device, &horDelta, &verDelta);
return Menu_CycleSelected(s, -1);
} else if (key == device->downButton) { if (verDelta) {
return Menu_CycleSelected(s, +1); return Menu_CycleSelected(s, verDelta);
} else if (horDelta && s->widgetsPerPage) {
return Menu_CycleSelected(s, horDelta * s->widgetsPerPage);
} else { } else {
return Menu_InputSelected(s, key, device); return Menu_InputSelected(s, key, device);
} }
@ -182,6 +184,18 @@ int Menu_InputDown(void* screen, int key, struct InputDevice* device) {
return Screen_InputDown(screen, key, device); return Screen_InputDown(screen, key, device);
} }
static int Menu_PadAxis(void* screen, struct PadAxisUpdate* upd) {
struct Screen* s = (struct Screen*)screen;
if (upd->ySteps) {
return Menu_CycleSelected(s, upd->ySteps);
} else if (upd->xSteps && s->widgetsPerPage) {
return Menu_CycleSelected(s, upd->xSteps * s->widgetsPerPage);
} else {
return 0;
}
}
/*########################################################################################################################* /*########################################################################################################################*
*------------------------------------------------------Menu utilities-----------------------------------------------------* *------------------------------------------------------Menu utilities-----------------------------------------------------*
@ -540,9 +554,11 @@ static void PauseScreen_Init(void* screen) {
{ 160, 0, "Load level...", Menu_SwitchLoadLevel }, { 160, 0, "Load level...", Menu_SwitchLoadLevel },
{ 160, 50, "Save level...", Menu_SwitchSaveLevel } { 160, 50, "Save level...", Menu_SwitchSaveLevel }
}; };
s->widgets = pause_widgets; s->widgets = pause_widgets;
s->numWidgets = 0; s->numWidgets = 0;
s->maxWidgets = Array_Elems(pause_widgets); s->maxWidgets = Array_Elems(pause_widgets);
s->widgetsPerPage = 3;
Event_Register_(&UserEvents.HackPermsChanged, s, PauseScreen_CheckHacksAllowed); Event_Register_(&UserEvents.HackPermsChanged, s, PauseScreen_CheckHacksAllowed);
s->descs = descs; s->descs = descs;
@ -565,7 +581,8 @@ static const struct ScreenVTABLE PauseScreen_VTABLE = {
MenuScreen_Render2, Screen_BuildMesh, MenuScreen_Render2, Screen_BuildMesh,
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll,
PauseScreen_Layout, Screen_ContextLost, PauseScreen_ContextRecreated PauseScreen_Layout, Screen_ContextLost, PauseScreen_ContextRecreated,
Menu_PadAxis
}; };
void PauseScreen_Show(void) { void PauseScreen_Show(void) {
struct PauseScreen* s = &PauseScreen; struct PauseScreen* s = &PauseScreen;
@ -626,7 +643,8 @@ static const struct ScreenVTABLE ClassicPauseScreen_VTABLE = {
MenuScreen_Render2, Screen_BuildMesh, MenuScreen_Render2, Screen_BuildMesh,
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll,
ClassicPauseScreen_Layout, Screen_ContextLost, ClassicPauseScreen_ContextRecreated ClassicPauseScreen_Layout, Screen_ContextLost, ClassicPauseScreen_ContextRecreated,
Menu_PadAxis
}; };
void ClassicPauseScreen_Show(void) { void ClassicPauseScreen_Show(void) {
struct PauseScreen* s = &PauseScreen; struct PauseScreen* s = &PauseScreen;
@ -719,6 +737,7 @@ static void OptionsGroupScreen_Init(void* screen) {
s->numWidgets = 0; s->numWidgets = 0;
s->maxWidgets = Array_Elems(optGroups_widgets); s->maxWidgets = Array_Elems(optGroups_widgets);
s->selectedI = -1; s->selectedI = -1;
s->widgetsPerPage = 4;
Menu_AddButtons(s, s->btns, 300, optsGroup_btns, 8); Menu_AddButtons(s, s->btns, 300, optsGroup_btns, 8);
TextWidget_Add(s, &s->desc); TextWidget_Add(s, &s->desc);
@ -748,7 +767,8 @@ static const struct ScreenVTABLE OptionsGroupScreen_VTABLE = {
MenuScreen_Render2, Screen_BuildMesh, MenuScreen_Render2, Screen_BuildMesh,
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
Menu_PointerDown, Screen_PointerUp, OptionsGroupScreen_PointerMove, Screen_TMouseScroll, Menu_PointerDown, Screen_PointerUp, OptionsGroupScreen_PointerMove, Screen_TMouseScroll,
OptionsGroupScreen_Layout, OptionsGroupScreen_ContextLost, OptionsGroupScreen_ContextRecreated OptionsGroupScreen_Layout, OptionsGroupScreen_ContextLost, OptionsGroupScreen_ContextRecreated,
Menu_PadAxis
}; };
void OptionsGroupScreen_Show(void) { void OptionsGroupScreen_Show(void) {
struct OptionsGroupScreen* s = &OptionsGroupScreen; struct OptionsGroupScreen* s = &OptionsGroupScreen;
@ -1217,7 +1237,8 @@ static const struct ScreenVTABLE GenLevelScreen_VTABLE = {
MenuScreen_Render2, Screen_BuildMesh, MenuScreen_Render2, Screen_BuildMesh,
Menu_InputDown, Screen_InputUp, GenLevelScreen_KeyPress, GenLevelScreen_TextChanged, Menu_InputDown, Screen_InputUp, GenLevelScreen_KeyPress, GenLevelScreen_TextChanged,
GenLevelScreen_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, GenLevelScreen_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll,
GenLevelScreen_Layout, GenLevelScreen_ContextLost, GenLevelScreen_ContextRecreated GenLevelScreen_Layout, GenLevelScreen_ContextLost, GenLevelScreen_ContextRecreated,
Menu_PadAxis
}; };
void GenLevelScreen_Show(void) { void GenLevelScreen_Show(void) {
struct GenLevelScreen* s = &GenLevelScreen; struct GenLevelScreen* s = &GenLevelScreen;
@ -1296,7 +1317,8 @@ static const struct ScreenVTABLE ClassicGenScreen_VTABLE = {
MenuScreen_Render2, Screen_BuildMesh, MenuScreen_Render2, Screen_BuildMesh,
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll,
ClassicGenScreen_Layout, Screen_ContextLost, ClassicGenScreen_ContextRecreated ClassicGenScreen_Layout, Screen_ContextLost, ClassicGenScreen_ContextRecreated,
Menu_PadAxis
}; };
void ClassicGenScreen_Show(void) { void ClassicGenScreen_Show(void) {
struct ClassicGenScreen* s = &ClassicGenScreen; struct ClassicGenScreen* s = &ClassicGenScreen;
@ -1915,7 +1937,8 @@ static const struct ScreenVTABLE BindsSourceScreen_VTABLE = {
MenuScreen_Render2, Screen_BuildMesh, MenuScreen_Render2, Screen_BuildMesh,
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll,
BindsSourceScreen_Layout, Screen_ContextLost, BindsSourceScreen_ContextRecreated BindsSourceScreen_Layout, Screen_ContextLost, BindsSourceScreen_ContextRecreated,
Menu_PadAxis
}; };
void BindsSourceScreen_Show(void) { void BindsSourceScreen_Show(void) {
struct BindsSourceScreen* s = &BindsSourceScreen; struct BindsSourceScreen* s = &BindsSourceScreen;
@ -2106,7 +2129,8 @@ static const struct ScreenVTABLE KeyBindsScreen_VTABLE = {
MenuScreen_Render2, Screen_BuildMesh, MenuScreen_Render2, Screen_BuildMesh,
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll,
KeyBindsScreen_Layout, KeyBindsScreen_ContextLost, KeyBindsScreen_ContextRecreated KeyBindsScreen_Layout, KeyBindsScreen_ContextLost, KeyBindsScreen_ContextRecreated,
Menu_PadAxis
}; };
static void KeyBindsScreen_Reset(Widget_LeftClick left, Widget_LeftClick right, int btnWidth) { static void KeyBindsScreen_Reset(Widget_LeftClick left, Widget_LeftClick right, int btnWidth) {
@ -2700,7 +2724,8 @@ static const struct ScreenVTABLE UrlWarningOverlay_VTABLE = {
MenuScreen_Render2, Screen_BuildMesh, MenuScreen_Render2, Screen_BuildMesh,
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll,
UrlWarningOverlay_Layout, Screen_ContextLost, UrlWarningOverlay_ContextRecreated UrlWarningOverlay_Layout, Screen_ContextLost, UrlWarningOverlay_ContextRecreated,
Menu_PadAxis
}; };
void UrlWarningOverlay_Show(const cc_string* url) { void UrlWarningOverlay_Show(const cc_string* url) {
struct UrlWarningOverlay* s = &UrlWarningOverlay; struct UrlWarningOverlay* s = &UrlWarningOverlay;
@ -2964,7 +2989,8 @@ static const struct ScreenVTABLE NostalgiaMenuScreen_VTABLE = {
MenuScreen_Render2, Screen_BuildMesh, MenuScreen_Render2, Screen_BuildMesh,
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll,
NostalgiaMenuScreen_Layout, Screen_ContextLost, NostalgiaMenuScreen_ContextRecreated NostalgiaMenuScreen_Layout, Screen_ContextLost, NostalgiaMenuScreen_ContextRecreated,
Menu_PadAxis
}; };
void NostalgiaMenuScreen_Show(void) { void NostalgiaMenuScreen_Show(void) {
struct NostalgiaMenuScreen* s = &NostalgiaMenuScreen; struct NostalgiaMenuScreen* s = &NostalgiaMenuScreen;