Add tank controls option

This commit is contained in:
James Lambert 2023-09-01 18:46:23 -06:00
parent cff4d0a624
commit e8129554fb
4 changed files with 39 additions and 7 deletions

View file

@ -20,15 +20,18 @@
void joystickOptionsInit(struct JoystickOptions* joystickOptions) {
joystickOptions->selectedItem = JoystickOptionInvert;
joystickOptions->invertControls = menuBuildCheckbox(&gDejaVuSansFont, "Invert Camera", JOYSTICK_X + 8, JOYSTICK_Y + 8);
joystickOptions->invertControls = menuBuildCheckbox(&gDejaVuSansFont, "Invert Camera Pitch", JOYSTICK_X + 8, JOYSTICK_Y + 8);
joystickOptions->lookSensitivityText = menuBuildText(&gDejaVuSansFont, "Look Sensitivity", JOYSTICK_X + 8, JOYSTICK_Y + 28);
joystickOptions->lookSensitivity = menuBuildSlider(JOYSTICK_X + 120, JOYSTICK_Y + 28, 120, SCROLL_TICKS);
joystickOptions->tankControls = menuBuildCheckbox(&gDejaVuSansFont, "Tank Controls", JOYSTICK_X + 8, JOYSTICK_Y + 28);
joystickOptions->lookAccelerationText = menuBuildText(&gDejaVuSansFont, "Look Acceleration", JOYSTICK_X + 8, JOYSTICK_Y + 48);
joystickOptions->lookAcceleration = menuBuildSlider(JOYSTICK_X + 120, JOYSTICK_Y + 48, 120, SCROLL_TICKS);
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->lookAccelerationText = menuBuildText(&gDejaVuSansFont, "Look Acceleration", JOYSTICK_X + 8, JOYSTICK_Y + 68);
joystickOptions->lookAcceleration = menuBuildSlider(JOYSTICK_X + 120, JOYSTICK_Y + 68, 120, SCROLL_TICKS);
joystickOptions->invertControls.checked = (gSaveData.controls.flags & ControlSaveFlagsInvert) != 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;
}
@ -105,6 +108,18 @@ enum MenuDirection joystickOptionsUpdate(struct JoystickOptions* joystickOptions
}
}
break;
case JoystickOptionTankControls:
if (controllerGetButtonDown(0, A_BUTTON)) {
joystickOptions->tankControls.checked = !joystickOptions->tankControls.checked;
soundPlayerPlay(SOUNDS_BUTTONCLICKRELEASE, 1.0f, 0.5f, NULL, NULL);
if (joystickOptions->tankControls.checked) {
gSaveData.controls.flags |= ControlSaveTankControls;
} else {
gSaveData.controls.flags &= ~ControlSaveTankControls;
}
}
break;
case JoystickOptionSensitivity:
joystickOptionsHandleSlider(&gSaveData.controls.sensitivity, &joystickOptions->lookSensitivity.value);
@ -130,6 +145,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->tankControls.outline);
renderState->dl = menuCheckboxRender(&joystickOptions->tankControls, renderState->dl);
gSPDisplayList(renderState->dl++, joystickOptions->lookSensitivity.back);
renderState->dl = menuSliderRender(&joystickOptions->lookSensitivity, renderState->dl);
@ -144,6 +161,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 == JoystickOptionTankControls, &gSelectionGray, &gColorWhite);
gSPDisplayList(renderState->dl++, joystickOptions->tankControls.text);
gDPPipeSync(renderState->dl++);
menuSetRenderColor(renderState, joystickOptions->selectedItem == JoystickOptionSensitivity, &gSelectionGray, &gColorWhite);
gSPDisplayList(renderState->dl++, joystickOptions->lookSensitivityText);

View file

@ -6,6 +6,7 @@
enum JoystickOption {
JoystickOptionInvert,
JoystickOptionTankControls,
JoystickOptionSensitivity,
JoystickOptionAcceleration,
@ -14,6 +15,7 @@ enum JoystickOption {
struct JoystickOptions {
struct MenuCheckbox invertControls;
struct MenuCheckbox tankControls;
struct MenuSlider lookSensitivity;
struct MenuSlider lookAcceleration;
Gfx* lookSensitivityText;

View file

@ -626,8 +626,17 @@ void playerUpdate(struct Player* player) {
camera_y_modifier = 0.0;
}
struct Vector2 moveInput = controllerDirectionGet(ControllerActionMove);
struct Vector2 lookInput = controllerDirectionGet(ControllerActionRotate);
if (gSaveData.controls.flags & ControlSaveTankControls) {
float tmp;
tmp = moveInput.y;
moveInput.y = lookInput.y;
lookInput.y = tmp;
}
if (!isDead) {
struct Vector2 moveInput = controllerDirectionGet(ControllerActionMove);
vector3AddScaled(&targetVelocity, &right, PLAYER_SPEED * moveInput.x, &targetVelocity);
vector3AddScaled(&targetVelocity, &forward, -PLAYER_SPEED * moveInput.y, &targetVelocity);
@ -755,7 +764,6 @@ void playerUpdate(struct Player* player) {
soundPlayerPlay(soundsPortalExit[2 - didPassThroughPortal], 0.75f, 1.0f, NULL, NULL);
}
struct Vector2 lookInput = controllerDirectionGet(ControllerActionRotate);
float rotateRate = mathfLerp(MIN_ROTATE_RATE, MAX_ROTATE_RATE, (float)gSaveData.controls.sensitivity / 0xFFFF);
float targetYaw = -lookInput.x * rotateRate;
float targetPitch = lookInput.y * rotateRate;

View file

@ -35,6 +35,7 @@ struct SaveHeader {
enum ControlSaveFlags {
ControlSaveFlagsInvert = (1 << 0),
ControlSaveTankControls = (1 << 1),
};
struct ControlSaveState {