mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-14 01:55:19 -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. */ \
|
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 };
|
||||||
|
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) {
|
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user