mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-20 10:37:37 -04:00
Add tank controls option
This commit is contained in:
parent
cff4d0a624
commit
e8129554fb
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -35,6 +35,7 @@ struct SaveHeader {
|
|||
|
||||
enum ControlSaveFlags {
|
||||
ControlSaveFlagsInvert = (1 << 0),
|
||||
ControlSaveTankControls = (1 << 1),
|
||||
};
|
||||
|
||||
struct ControlSaveState {
|
||||
|
|
Loading…
Reference in a new issue