Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #9670 from iwubcode/freelook-input-controller
Core / VideoCommon: refactor FreeLookCamera
  • Loading branch information
JMC47 committed Oct 9, 2021
2 parents ff1cb5a + 5144756 commit 1beaa07
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 147 deletions.
39 changes: 24 additions & 15 deletions Source/Core/Core/FreeLookManager.cpp
Expand Up @@ -216,6 +216,15 @@ void FreeLookController::Update()
if (!g_freelook_camera.IsActive())
return;

auto* camera_controller = g_freelook_camera.GetController();
if (camera_controller->SupportsInput())
{
UpdateInput(static_cast<CameraControllerInput*>(camera_controller));
}
}

void FreeLookController::UpdateInput(CameraControllerInput* camera_controller)
{
const auto lock = GetStateLock();

float dt = 1.0;
Expand All @@ -239,48 +248,48 @@ void FreeLookController::Update()
const auto gyro_motion_quat =
Common::Quaternion::RotateXYZ(gyro_motion_rad_velocity_converted * dt);

g_freelook_camera.Rotate(gyro_motion_quat);
camera_controller->Rotate(gyro_motion_quat);
if (m_move_buttons->controls[MoveButtons::Up]->GetState<bool>())
g_freelook_camera.MoveVertical(-g_freelook_camera.GetSpeed() * dt);
camera_controller->MoveVertical(-camera_controller->GetSpeed() * dt);

if (m_move_buttons->controls[MoveButtons::Down]->GetState<bool>())
g_freelook_camera.MoveVertical(g_freelook_camera.GetSpeed() * dt);
camera_controller->MoveVertical(camera_controller->GetSpeed() * dt);

if (m_move_buttons->controls[MoveButtons::Left]->GetState<bool>())
g_freelook_camera.MoveHorizontal(g_freelook_camera.GetSpeed() * dt);
camera_controller->MoveHorizontal(camera_controller->GetSpeed() * dt);

if (m_move_buttons->controls[MoveButtons::Right]->GetState<bool>())
g_freelook_camera.MoveHorizontal(-g_freelook_camera.GetSpeed() * dt);
camera_controller->MoveHorizontal(-camera_controller->GetSpeed() * dt);

if (m_move_buttons->controls[MoveButtons::Forward]->GetState<bool>())
g_freelook_camera.MoveForward(g_freelook_camera.GetSpeed() * dt);
camera_controller->MoveForward(camera_controller->GetSpeed() * dt);

if (m_move_buttons->controls[MoveButtons::Backward]->GetState<bool>())
g_freelook_camera.MoveForward(-g_freelook_camera.GetSpeed() * dt);
camera_controller->MoveForward(-camera_controller->GetSpeed() * dt);

if (m_fov_buttons->controls[FieldOfViewButtons::IncreaseX]->GetState<bool>())
g_freelook_camera.IncreaseFovX(g_freelook_camera.GetFovStepSize() * dt);
camera_controller->IncreaseFovX(camera_controller->GetFovStepSize() * dt);

if (m_fov_buttons->controls[FieldOfViewButtons::DecreaseX]->GetState<bool>())
g_freelook_camera.IncreaseFovX(-1.0f * g_freelook_camera.GetFovStepSize() * dt);
camera_controller->IncreaseFovX(-1.0f * camera_controller->GetFovStepSize() * dt);

if (m_fov_buttons->controls[FieldOfViewButtons::IncreaseY]->GetState<bool>())
g_freelook_camera.IncreaseFovY(g_freelook_camera.GetFovStepSize() * dt);
camera_controller->IncreaseFovY(camera_controller->GetFovStepSize() * dt);

if (m_fov_buttons->controls[FieldOfViewButtons::DecreaseY]->GetState<bool>())
g_freelook_camera.IncreaseFovY(-1.0f * g_freelook_camera.GetFovStepSize() * dt);
camera_controller->IncreaseFovY(-1.0f * camera_controller->GetFovStepSize() * dt);

if (m_speed_buttons->controls[SpeedButtons::Decrease]->GetState<bool>())
g_freelook_camera.ModifySpeed(g_freelook_camera.GetSpeed() * -0.9 * dt);
camera_controller->ModifySpeed(camera_controller->GetSpeed() * -0.9 * dt);

if (m_speed_buttons->controls[SpeedButtons::Increase]->GetState<bool>())
g_freelook_camera.ModifySpeed(g_freelook_camera.GetSpeed() * 1.1 * dt);
camera_controller->ModifySpeed(camera_controller->GetSpeed() * 1.1 * dt);

if (m_speed_buttons->controls[SpeedButtons::Reset]->GetState<bool>())
g_freelook_camera.ResetSpeed();
camera_controller->ResetSpeed();

if (m_other_buttons->controls[OtherButtons::ResetView]->GetState<bool>())
g_freelook_camera.Reset();
camera_controller->Reset();
}

namespace FreeLook
Expand Down
2 changes: 2 additions & 0 deletions Source/Core/Core/FreeLookManager.h
Expand Up @@ -9,6 +9,7 @@
#include "Common/CommonTypes.h"
#include "InputCommon/ControllerEmu/ControllerEmu.h"

class CameraControllerInput;
class InputConfig;

namespace ControllerEmu
Expand Down Expand Up @@ -52,6 +53,7 @@ class FreeLookController final : public ControllerEmu::EmulatedController
void Update();

private:
void UpdateInput(CameraControllerInput* camera_controller);
ControllerEmu::Buttons* m_move_buttons;
ControllerEmu::Buttons* m_speed_buttons;
ControllerEmu::Buttons* m_fov_buttons;
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/State.cpp
Expand Up @@ -73,7 +73,7 @@ static Common::Event g_compressAndDumpStateSyncEvent;
static std::thread g_save_thread;

// Don't forget to increase this after doing changes on the savestate system
constexpr u32 STATE_VERSION = 137; // Last changed in PR 9803
constexpr u32 STATE_VERSION = 138; // Last changed in PR 9670

// Maps savestate versions to Dolphin versions.
// Versions after 42 don't need to be added to this list,
Expand Down

0 comments on commit 1beaa07

Please sign in to comment.