Various Options Menu Improvements

- fixed bug where you couldnt set L R or Z to an action because it would just change tabs
- instead of a global check for tab switch, each indiviudal menu tab determines if it should move to the next tab
- added an "invert camera yaw" option

Implements #218
This commit is contained in:
westonCoder 2023-09-05 15:27:58 -05:00
parent 42f99d4c8b
commit 44b59288c7
8 changed files with 57 additions and 25 deletions

View file

@ -13,11 +13,11 @@ enum MenuDirection audioOptionsUpdate(struct AudioOptions* audioOptions) {
return MenuDirectionUp;
}
if (controllerDir & ControllerDirectionLeft) {
if ((controllerDir & ControllerDirectionLeft || controllerGetButtonDown(0, L_TRIG) || controllerGetButtonDown(0, Z_TRIG))) {
return MenuDirectionLeft;
}
if (controllerDir & ControllerDirectionRight) {
if ((controllerDir & ControllerDirectionRight || controllerGetButtonDown(0, R_TRIG))) {
return MenuDirectionRight;
}

View file

@ -320,11 +320,11 @@ enum MenuDirection controlsMenuUpdate(struct ControlsMenu* controlsMenu) {
return MenuDirectionUp;
}
if (controllerDir & ControllerDirectionLeft) {
if ((controllerDir & ControllerDirectionLeft || controllerGetButtonDown(0, L_TRIG) || controllerGetButtonDown(0, Z_TRIG)) && !(controlsMenu->waitingForAction)) {
return MenuDirectionLeft;
}
if (controllerDir & ControllerDirectionRight) {
if ((controllerDir & ControllerDirectionRight || controllerGetButtonDown(0, R_TRIG) ) && !(controlsMenu->waitingForAction)) {
return MenuDirectionRight;
}

View file

@ -78,11 +78,11 @@ enum MenuDirection gameplayOptionsUpdate(struct GameplayOptions* gameplayOptions
break;
}
if (controllerDir & ControllerDirectionLeft) {
if ((controllerDir & ControllerDirectionLeft || controllerGetButtonDown(0, L_TRIG) || controllerGetButtonDown(0, Z_TRIG))) {
return MenuDirectionLeft;
}
if (controllerDir & ControllerDirectionRight) {
if ((controllerDir & ControllerDirectionRight || controllerGetButtonDown(0, R_TRIG))) {
return MenuDirectionRight;
}

View file

@ -22,15 +22,18 @@ void joystickOptionsInit(struct JoystickOptions* joystickOptions) {
joystickOptions->invertControls = menuBuildCheckbox(&gDejaVuSansFont, "Invert Camera Pitch", JOYSTICK_X + 8, JOYSTICK_Y + 8);
joystickOptions->tankControls = menuBuildCheckbox(&gDejaVuSansFont, "Tank Controls", JOYSTICK_X + 8, JOYSTICK_Y + 28);
joystickOptions->invertControlsYaw = menuBuildCheckbox(&gDejaVuSansFont, "Invert Camera Yaw", JOYSTICK_X + 8, JOYSTICK_Y + 28);
joystickOptions->lookSensitivityText = menuBuildText(&gDejaVuSansFont, "Look Sensitivity", JOYSTICK_X + 8, JOYSTICK_Y + 48);
joystickOptions->lookSensitivity = menuBuildSlider(JOYSTICK_X + 120, JOYSTICK_Y + 48, 120, SCROLL_TICKS);
joystickOptions->tankControls = menuBuildCheckbox(&gDejaVuSansFont, "Tank Controls", JOYSTICK_X + 8, JOYSTICK_Y + 48);
joystickOptions->lookAccelerationText = menuBuildText(&gDejaVuSansFont, "Look Acceleration", JOYSTICK_X + 8, JOYSTICK_Y + 68);
joystickOptions->lookAcceleration = menuBuildSlider(JOYSTICK_X + 120, JOYSTICK_Y + 68, 120, SCROLL_TICKS);
joystickOptions->lookSensitivityText = menuBuildText(&gDejaVuSansFont, "Look Sensitivity", JOYSTICK_X + 8, JOYSTICK_Y + 68);
joystickOptions->lookSensitivity = menuBuildSlider(JOYSTICK_X + 120, JOYSTICK_Y + 68, 120, SCROLL_TICKS);
joystickOptions->lookAccelerationText = menuBuildText(&gDejaVuSansFont, "Look Acceleration", JOYSTICK_X + 8, JOYSTICK_Y + 88);
joystickOptions->lookAcceleration = menuBuildSlider(JOYSTICK_X + 120, JOYSTICK_Y + 88, 120, SCROLL_TICKS);
joystickOptions->invertControls.checked = (gSaveData.controls.flags & ControlSaveFlagsInvert) != 0;
joystickOptions->invertControlsYaw.checked = (gSaveData.controls.flags & ControlSaveFlagsInvertYaw) != 0;
joystickOptions->tankControls.checked = (gSaveData.controls.flags & ControlSaveTankControls) != 0;
joystickOptions->lookSensitivity.value = (float)gSaveData.controls.sensitivity / 0xFFFF;
joystickOptions->lookAcceleration.value = (float)gSaveData.controls.acceleration / 0xFFFF;
@ -108,6 +111,19 @@ enum MenuDirection joystickOptionsUpdate(struct JoystickOptions* joystickOptions
}
}
break;
case JoystickOptionInvertYaw:
if (controllerGetButtonDown(0, A_BUTTON)) {
joystickOptions->invertControlsYaw.checked = !joystickOptions->invertControlsYaw.checked;
soundPlayerPlay(SOUNDS_BUTTONCLICKRELEASE, 1.0f, 0.5f, NULL, NULL);
if (joystickOptions->invertControlsYaw.checked) {
gSaveData.controls.flags |= ControlSaveFlagsInvertYaw;
} else {
gSaveData.controls.flags &= ~ControlSaveFlagsInvertYaw;
}
}
break;
case JoystickOptionTankControls:
if (controllerGetButtonDown(0, A_BUTTON)) {
@ -123,18 +139,28 @@ enum MenuDirection joystickOptionsUpdate(struct JoystickOptions* joystickOptions
break;
case JoystickOptionSensitivity:
joystickOptionsHandleSlider(&gSaveData.controls.sensitivity, &joystickOptions->lookSensitivity.value);
return MenuDirectionStay;
break;
case JoystickOptionAcceleration:
joystickOptionsHandleSlider(&gSaveData.controls.acceleration, &joystickOptions->lookAcceleration.value);
return MenuDirectionStay;
break;
}
if (controllerDir & ControllerDirectionLeft) {
return MenuDirectionLeft;
if (joystickOptions->selectedItem == JoystickOptionSensitivity ||
joystickOptions->selectedItem == JoystickOptionAcceleration){
if ((controllerGetButtonDown(0, L_TRIG) || controllerGetButtonDown(0, Z_TRIG))) {
return MenuDirectionLeft;
}
if ((controllerGetButtonDown(0, R_TRIG))) {
return MenuDirectionRight;
}
}
if (controllerDir & ControllerDirectionRight) {
return MenuDirectionRight;
else{
if (controllerDir & ControllerDirectionLeft || controllerGetButtonDown(0, L_TRIG) || controllerGetButtonDown(0, Z_TRIG)) {
return MenuDirectionLeft;
}
if (controllerDir & ControllerDirectionRight || controllerGetButtonDown(0, R_TRIG)) {
return MenuDirectionRight;
}
}
return MenuDirectionStay;
@ -145,6 +171,8 @@ void joystickOptionsRender(struct JoystickOptions* joystickOptions, struct Rende
gSPDisplayList(renderState->dl++, joystickOptions->invertControls.outline);
renderState->dl = menuCheckboxRender(&joystickOptions->invertControls, renderState->dl);
gSPDisplayList(renderState->dl++, joystickOptions->invertControlsYaw.outline);
renderState->dl = menuCheckboxRender(&joystickOptions->invertControlsYaw, renderState->dl);
gSPDisplayList(renderState->dl++, joystickOptions->tankControls.outline);
renderState->dl = menuCheckboxRender(&joystickOptions->tankControls, renderState->dl);
gSPDisplayList(renderState->dl++, joystickOptions->lookSensitivity.back);
@ -161,6 +189,10 @@ void joystickOptionsRender(struct JoystickOptions* joystickOptions, struct Rende
menuSetRenderColor(renderState, joystickOptions->selectedItem == JoystickOptionInvert, &gSelectionGray, &gColorWhite);
gSPDisplayList(renderState->dl++, joystickOptions->invertControls.text);
gDPPipeSync(renderState->dl++);
menuSetRenderColor(renderState, joystickOptions->selectedItem == JoystickOptionInvertYaw, &gSelectionGray, &gColorWhite);
gSPDisplayList(renderState->dl++, joystickOptions->invertControlsYaw.text);
gDPPipeSync(renderState->dl++);
menuSetRenderColor(renderState, joystickOptions->selectedItem == JoystickOptionTankControls, &gSelectionGray, &gColorWhite);
gSPDisplayList(renderState->dl++, joystickOptions->tankControls.text);

View file

@ -6,6 +6,7 @@
enum JoystickOption {
JoystickOptionInvert,
JoystickOptionInvertYaw,
JoystickOptionTankControls,
JoystickOptionSensitivity,
JoystickOptionAcceleration,
@ -15,6 +16,7 @@ enum JoystickOption {
struct JoystickOptions {
struct MenuCheckbox invertControls;
struct MenuCheckbox invertControlsYaw;
struct MenuCheckbox tankControls;
struct MenuSlider lookSensitivity;
struct MenuSlider lookAcceleration;

View file

@ -56,12 +56,6 @@ void optionsMenuInit(struct OptionsMenu* options) {
enum MenuDirection optionsMenuUpdate(struct OptionsMenu* options) {
enum MenuDirection menuDirection = MenuDirectionStay;
if(controllerGetButtonDown(0, L_TRIG) || controllerGetButtonDown(0, Z_TRIG))
menuDirection = MenuDirectionLeft;
if(controllerGetButtonDown(0, R_TRIG))
menuDirection = MenuDirectionRight;
if(menuDirection == MenuDirectionStay)
{
switch (options->tabs.selectedTab) {

View file

@ -771,6 +771,9 @@ void playerUpdate(struct Player* player) {
if (gSaveData.controls.flags & ControlSaveFlagsInvert) {
targetPitch = -targetPitch;
}
if (gSaveData.controls.flags & ControlSaveFlagsInvertYaw) {
targetYaw = -targetYaw;
}
float rotateRateDelta = mathfLerp(MIN_ROTATE_RATE_DELTA, MAX_ROTATE_RATE_DELTA, (float)gSaveData.controls.acceleration / 0xFFFF);

View file

@ -35,7 +35,8 @@ struct SaveHeader {
enum ControlSaveFlags {
ControlSaveFlagsInvert = (1 << 0),
ControlSaveTankControls = (1 << 1),
ControlSaveFlagsInvertYaw = (1 << 1),
ControlSaveTankControls = (1 << 2),
ControlSaveMoveablePortals = (1 << 8),
ControlSaveWideScreen = (1 << 9),