mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-12 09:06:55 -04:00
WIP on supporting pad axis input
This commit is contained in:
parent
1852e68b48
commit
7f383f9caa
@ -130,7 +130,7 @@ struct ScreenVTABLE {
|
||||
cc_bool dirty; /* Whether this screens needs to have its mesh rebuilt. */ \
|
||||
int maxVertices; GfxResourceID vb; /* Vertex buffer storing the contents of 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. */
|
||||
struct Screen { Screen_Body };
|
||||
|
54
src/Menus.c
54
src/Menus.c
@ -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) {
|
||||
struct Screen* s = (struct Screen*)screen;
|
||||
|
||||
if (key == device->upButton) {
|
||||
return Menu_CycleSelected(s, -1);
|
||||
} else if (key == device->downButton) {
|
||||
return Menu_CycleSelected(s, +1);
|
||||
int horDelta, verDelta;
|
||||
Input_CalcDelta(key, device, &horDelta, &verDelta);
|
||||
|
||||
if (verDelta) {
|
||||
return Menu_CycleSelected(s, verDelta);
|
||||
} else if (horDelta && s->widgetsPerPage) {
|
||||
return Menu_CycleSelected(s, horDelta * s->widgetsPerPage);
|
||||
} else {
|
||||
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);
|
||||
}
|
||||
|
||||
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-----------------------------------------------------*
|
||||
@ -540,9 +554,11 @@ static void PauseScreen_Init(void* screen) {
|
||||
{ 160, 0, "Load level...", Menu_SwitchLoadLevel },
|
||||
{ 160, 50, "Save level...", Menu_SwitchSaveLevel }
|
||||
};
|
||||
|
||||
s->widgets = pause_widgets;
|
||||
s->numWidgets = 0;
|
||||
s->maxWidgets = Array_Elems(pause_widgets);
|
||||
s->widgetsPerPage = 3;
|
||||
Event_Register_(&UserEvents.HackPermsChanged, s, PauseScreen_CheckHacksAllowed);
|
||||
|
||||
s->descs = descs;
|
||||
@ -565,7 +581,8 @@ static const struct ScreenVTABLE PauseScreen_VTABLE = {
|
||||
MenuScreen_Render2, Screen_BuildMesh,
|
||||
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
|
||||
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) {
|
||||
struct PauseScreen* s = &PauseScreen;
|
||||
@ -626,7 +643,8 @@ static const struct ScreenVTABLE ClassicPauseScreen_VTABLE = {
|
||||
MenuScreen_Render2, Screen_BuildMesh,
|
||||
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
|
||||
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) {
|
||||
struct PauseScreen* s = &PauseScreen;
|
||||
@ -719,6 +737,7 @@ static void OptionsGroupScreen_Init(void* screen) {
|
||||
s->numWidgets = 0;
|
||||
s->maxWidgets = Array_Elems(optGroups_widgets);
|
||||
s->selectedI = -1;
|
||||
s->widgetsPerPage = 4;
|
||||
|
||||
Menu_AddButtons(s, s->btns, 300, optsGroup_btns, 8);
|
||||
TextWidget_Add(s, &s->desc);
|
||||
@ -748,7 +767,8 @@ static const struct ScreenVTABLE OptionsGroupScreen_VTABLE = {
|
||||
MenuScreen_Render2, Screen_BuildMesh,
|
||||
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
|
||||
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) {
|
||||
struct OptionsGroupScreen* s = &OptionsGroupScreen;
|
||||
@ -1217,7 +1237,8 @@ static const struct ScreenVTABLE GenLevelScreen_VTABLE = {
|
||||
MenuScreen_Render2, Screen_BuildMesh,
|
||||
Menu_InputDown, Screen_InputUp, GenLevelScreen_KeyPress, GenLevelScreen_TextChanged,
|
||||
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) {
|
||||
struct GenLevelScreen* s = &GenLevelScreen;
|
||||
@ -1296,7 +1317,8 @@ static const struct ScreenVTABLE ClassicGenScreen_VTABLE = {
|
||||
MenuScreen_Render2, Screen_BuildMesh,
|
||||
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
|
||||
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) {
|
||||
struct ClassicGenScreen* s = &ClassicGenScreen;
|
||||
@ -1915,7 +1937,8 @@ static const struct ScreenVTABLE BindsSourceScreen_VTABLE = {
|
||||
MenuScreen_Render2, Screen_BuildMesh,
|
||||
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
|
||||
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) {
|
||||
struct BindsSourceScreen* s = &BindsSourceScreen;
|
||||
@ -2106,7 +2129,8 @@ static const struct ScreenVTABLE KeyBindsScreen_VTABLE = {
|
||||
MenuScreen_Render2, Screen_BuildMesh,
|
||||
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
|
||||
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) {
|
||||
@ -2700,7 +2724,8 @@ static const struct ScreenVTABLE UrlWarningOverlay_VTABLE = {
|
||||
MenuScreen_Render2, Screen_BuildMesh,
|
||||
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
|
||||
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) {
|
||||
struct UrlWarningOverlay* s = &UrlWarningOverlay;
|
||||
@ -2964,7 +2989,8 @@ static const struct ScreenVTABLE NostalgiaMenuScreen_VTABLE = {
|
||||
MenuScreen_Render2, Screen_BuildMesh,
|
||||
Menu_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText,
|
||||
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) {
|
||||
struct NostalgiaMenuScreen* s = &NostalgiaMenuScreen;
|
||||
|
Loading…
x
Reference in New Issue
Block a user