mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Core / VideoCommon: refactor FreeLookCamera to have the underlying controller handle all the logic (field-of-view, movement, etc)
This commit is contained in:
@ -23,7 +23,28 @@ public:
|
||||
CameraController(CameraController&&) = delete;
|
||||
CameraController& operator=(CameraController&&) = delete;
|
||||
|
||||
virtual Common::Matrix44 GetView() = 0;
|
||||
virtual Common::Matrix44 GetView() const = 0;
|
||||
virtual Common::Vec2 GetFieldOfView() const = 0;
|
||||
|
||||
virtual void DoState(PointerWrap& p) = 0;
|
||||
|
||||
virtual bool IsDirty() const = 0;
|
||||
virtual void SetClean() = 0;
|
||||
|
||||
virtual bool SupportsInput() const = 0;
|
||||
};
|
||||
|
||||
class CameraControllerInput : public CameraController
|
||||
{
|
||||
public:
|
||||
Common::Vec2 GetFieldOfView() const final override;
|
||||
|
||||
void DoState(PointerWrap& p) override;
|
||||
|
||||
bool IsDirty() const final override { return m_dirty; }
|
||||
void SetClean() final override { m_dirty = false; }
|
||||
|
||||
bool SupportsInput() const final override { return true; }
|
||||
|
||||
virtual void MoveVertical(float amt) = 0;
|
||||
virtual void MoveHorizontal(float amt) = 0;
|
||||
@ -35,7 +56,21 @@ public:
|
||||
|
||||
virtual void Reset() = 0;
|
||||
|
||||
virtual void DoState(PointerWrap& p) = 0;
|
||||
void IncreaseFovX(float fov);
|
||||
void IncreaseFovY(float fov);
|
||||
float GetFovStepSize() const;
|
||||
|
||||
void ModifySpeed(float multiplier);
|
||||
void ResetSpeed();
|
||||
float GetSpeed() const;
|
||||
|
||||
private:
|
||||
float m_fov_x = 1.0f;
|
||||
float m_fov_y = 1.0f;
|
||||
|
||||
float m_min_fov_multiplier = 0.025f;
|
||||
float m_speed = 60.0f;
|
||||
bool m_dirty = false;
|
||||
};
|
||||
|
||||
class FreeLookCamera
|
||||
@ -43,42 +78,18 @@ class FreeLookCamera
|
||||
public:
|
||||
FreeLookCamera();
|
||||
void SetControlType(FreeLook::ControlType type);
|
||||
Common::Matrix44 GetView();
|
||||
Common::Matrix44 GetView() const;
|
||||
Common::Vec2 GetFieldOfView() const;
|
||||
|
||||
void MoveVertical(float amt);
|
||||
void MoveHorizontal(float amt);
|
||||
void MoveForward(float amt);
|
||||
|
||||
void Rotate(const Common::Vec3& amt);
|
||||
void Rotate(const Common::Quaternion& amt);
|
||||
|
||||
void IncreaseFovX(float fov);
|
||||
void IncreaseFovY(float fov);
|
||||
float GetFovStepSize() const;
|
||||
|
||||
void Reset();
|
||||
|
||||
void DoState(PointerWrap& p);
|
||||
|
||||
bool IsDirty() const;
|
||||
void SetClean();
|
||||
|
||||
void ModifySpeed(float multiplier);
|
||||
void ResetSpeed();
|
||||
float GetSpeed() const;
|
||||
|
||||
bool IsActive() const;
|
||||
|
||||
CameraController* GetController() const;
|
||||
|
||||
private:
|
||||
bool m_dirty = false;
|
||||
float m_fov_x = 1.0f;
|
||||
float m_fov_y = 1.0f;
|
||||
std::optional<FreeLook::ControlType> m_current_type;
|
||||
std::unique_ptr<CameraController> m_camera_controller;
|
||||
|
||||
float m_min_fov_multiplier = 0.025f;
|
||||
float m_speed = 60.0f;
|
||||
};
|
||||
|
||||
extern FreeLookCamera g_freelook_camera;
|
||||
|
Reference in New Issue
Block a user