SleakEngine
0.1.0
C++23 multi-backend game engine
Toggle main menu visibility
Loading...
Searching...
No Matches
FreeLookCameraController.hpp
Go to the documentation of this file.
1
#ifndef _FREELOOKCOMPONENT_HPP_
2
#define _FREELOOKCOMPONENT_HPP_
3
4
#include <
ECS/Components/CameraController.hpp
>
5
#include <
Events/KeyboardEvent.hpp
>
6
#include <
Core/OSDef.hpp
>
7
#include <string>
8
9
namespace
Sleak
{
10
/// Editor/spectator-style camera controller: mouse-look plus accelerated
11
/// free translation, independent of gravity or collision.
12
/// @ingroup scene
13
class
ENGINE_API
FreeLookCameraController
:
public
CameraController
{
14
public
:
15
FreeLookCameraController
(
GameObject
*
object
);
16
~FreeLookCameraController
()
override
;
17
18
/// Derives initial yaw/pitch from the camera's current facing direction.
19
bool
Initialize
()
override
;
20
void
Update
(
float
deltaTime)
override
;
21
/// Toggles relative mouse mode and, when re-enabling, resets velocity and re-syncs yaw/pitch.
22
void
SetEnabled
(
bool
enabled)
override
;
23
24
void
ToggleCursor
(
bool
enable)
override
;
25
26
virtual
void
SetSpeed
(
float
speed) {this->speed = speed;}
27
virtual
float
GetSpeed
()
const
{
return
speed;}
28
virtual
void
SetAcceleration
(
float
acceleration) {this->acceleration = acceleration;}
29
virtual
float
GetAcceleration
()
const
{
return
acceleration;}
30
virtual
void
SetDamping
(
float
damping) {this->damping = damping;}
31
virtual
float
GetDamping
()
const
{
return
damping;}
32
virtual
void
SetMaxSpeed
(
float
maxSpeed) {this->maxSpeed = maxSpeed;}
33
virtual
float
GetMaxSpeed
()
const
{
return
maxSpeed;}
34
virtual
Math::Vector3D
GetVelocity
()
const
{
return
velocity;}
35
36
Math::Vector3D
GetTranslationInput
()
const
{
return
translationInput
; }
37
38
void
SetInvertY
(
bool
invert) { isInvertY = invert; }
39
bool
GetInvertY
()
const
{
return
isInvertY; }
40
41
void
SetPitchRange
(
Math::Vector2D
range) { PitchRange = range; }
42
Math::Vector2D
GetPitchRange
()
const
{
return
PitchRange; }
43
void
SetYawRange
(
Math::Vector2D
range) { YawRange = range; }
44
Math::Vector2D
GetYawRange
()
const
{
return
YawRange; }
45
void
SetRollRange
(
Math::Vector2D
range) { RollRange = range; }
46
Math::Vector2D
GetRollRange
()
const
{
return
RollRange; }
47
48
void
SetPitch
(
float
pitch) { this->pitch = pitch; }
49
float
GetPitch
()
const
{
return
pitch; }
50
void
SetYaw
(
float
yaw) { this->yaw = yaw; }
51
float
GetYaw
()
const
{
return
yaw; }
52
void
SetRoll
(
float
roll) { this->roll = roll; }
53
float
GetRoll
()
const
{
return
roll; }
54
55
56
/// Updates translation input state from a key-down event; doubles speed while LCTRL is held.
57
virtual
void
OnKeyPressed(
const
Sleak::Events::Input::KeyPressedEvent
& e);
58
/// Clears translation input state from a key-up event.
59
virtual
void
OnKeyReleased(
const
Sleak::Events::Input::KeyReleasedEvent
& e);
60
61
private
:
62
/// Reads and smooths mouse delta into yaw/pitch, clamped to PitchRange.
63
void
UpdateInput(
float
deltaTime)
override
;
64
/// Accelerates toward the input-driven target velocity, applies damping, and moves the camera.
65
void
UpdateCamera(
float
deltaTime)
override
;
66
67
/// Exponentially decays velocity toward zero when there's no translation input.
68
void
ApplyDamping(
float
DeltaTime);
69
/// Accelerates velocity toward the input-driven target velocity.
70
void
ApplyAcceleration(
float
DeltaTime);
71
/// Clamps velocity magnitude to maxSpeed.
72
void
ClampVelocity();
73
74
Math::Vector3D
velocity;
75
float
speed = 1.0f;
76
float
sensitivity = 0.1f;
77
float
acceleration;
78
float
damping;
79
float
maxSpeed;
80
81
bool
isInvertY =
false
;
82
float
pitch = 0.0f;
83
float
yaw = 0.0f;
84
float
roll = 0.0f;
85
Math::Vector2D
PitchRange;
86
Math::Vector2D
YawRange;
87
Math::Vector2D
RollRange;
88
89
bool
m_firstFrame =
true
;
90
91
std::string m_keyPressedHandlerId;
92
std::string m_keyReleasedHandlerId;
93
};
94
}
95
96
#endif
CameraController.hpp
KeyboardEvent.hpp
OSDef.hpp
Sleak::CameraController::translationInput
Math::Vector3D translationInput
Definition
CameraController.hpp:51
Sleak::CameraController::CameraController
CameraController(GameObject *object)
Definition
CameraController.hpp:16
Sleak::Events::Input::KeyPressedEvent
Definition
KeyboardEvent.hpp:33
Sleak::Events::Input::KeyReleasedEvent
Definition
KeyboardEvent.hpp:56
Sleak::FreeLookCameraController::SetDamping
virtual void SetDamping(float damping)
Definition
FreeLookCameraController.hpp:30
Sleak::FreeLookCameraController::SetPitch
void SetPitch(float pitch)
Definition
FreeLookCameraController.hpp:48
Sleak::FreeLookCameraController::GetYawRange
Math::Vector2D GetYawRange() const
Definition
FreeLookCameraController.hpp:44
Sleak::FreeLookCameraController::Initialize
bool Initialize() override
Derives initial yaw/pitch from the camera's current facing direction.
Definition
FreeLookCameraControllerComponent.cpp:37
Sleak::FreeLookCameraController::GetDamping
virtual float GetDamping() const
Definition
FreeLookCameraController.hpp:31
Sleak::FreeLookCameraController::Update
void Update(float deltaTime) override
Definition
FreeLookCameraControllerComponent.cpp:53
Sleak::FreeLookCameraController::GetPitch
float GetPitch() const
Definition
FreeLookCameraController.hpp:49
Sleak::FreeLookCameraController::GetRollRange
Math::Vector2D GetRollRange() const
Definition
FreeLookCameraController.hpp:46
Sleak::FreeLookCameraController::GetRoll
float GetRoll() const
Definition
FreeLookCameraController.hpp:53
Sleak::FreeLookCameraController::SetMaxSpeed
virtual void SetMaxSpeed(float maxSpeed)
Definition
FreeLookCameraController.hpp:32
Sleak::FreeLookCameraController::SetRollRange
void SetRollRange(Math::Vector2D range)
Definition
FreeLookCameraController.hpp:45
Sleak::FreeLookCameraController::SetYaw
void SetYaw(float yaw)
Definition
FreeLookCameraController.hpp:50
Sleak::FreeLookCameraController::GetAcceleration
virtual float GetAcceleration() const
Definition
FreeLookCameraController.hpp:29
Sleak::FreeLookCameraController::SetYawRange
void SetYawRange(Math::Vector2D range)
Definition
FreeLookCameraController.hpp:43
Sleak::FreeLookCameraController::ToggleCursor
void ToggleCursor(bool enable) override
Shows or hides the OS cursor and, typically, toggles relative mouse mode.
Definition
FreeLookCameraControllerComponent.cpp:60
Sleak::FreeLookCameraController::FreeLookCameraController
FreeLookCameraController(GameObject *object)
Definition
FreeLookCameraControllerComponent.cpp:12
Sleak::FreeLookCameraController::SetPitchRange
void SetPitchRange(Math::Vector2D range)
Definition
FreeLookCameraController.hpp:41
Sleak::FreeLookCameraController::GetSpeed
virtual float GetSpeed() const
Definition
FreeLookCameraController.hpp:27
Sleak::FreeLookCameraController::SetEnabled
void SetEnabled(bool enabled) override
Toggles relative mouse mode and, when re-enabling, resets velocity and re-syncs yaw/pitch.
Definition
FreeLookCameraControllerComponent.cpp:188
Sleak::FreeLookCameraController::SetAcceleration
virtual void SetAcceleration(float acceleration)
Definition
FreeLookCameraController.hpp:28
Sleak::FreeLookCameraController::GetVelocity
virtual Math::Vector3D GetVelocity() const
Definition
FreeLookCameraController.hpp:34
Sleak::FreeLookCameraController::GetTranslationInput
Math::Vector3D GetTranslationInput() const
Definition
FreeLookCameraController.hpp:36
Sleak::FreeLookCameraController::GetPitchRange
Math::Vector2D GetPitchRange() const
Definition
FreeLookCameraController.hpp:42
Sleak::FreeLookCameraController::GetInvertY
bool GetInvertY() const
Definition
FreeLookCameraController.hpp:39
Sleak::FreeLookCameraController::GetYaw
float GetYaw() const
Definition
FreeLookCameraController.hpp:51
Sleak::FreeLookCameraController::SetRoll
void SetRoll(float roll)
Definition
FreeLookCameraController.hpp:52
Sleak::FreeLookCameraController::SetInvertY
void SetInvertY(bool invert)
Definition
FreeLookCameraController.hpp:38
Sleak::FreeLookCameraController::SetSpeed
virtual void SetSpeed(float speed)
Definition
FreeLookCameraController.hpp:26
Sleak::FreeLookCameraController::GetMaxSpeed
virtual float GetMaxSpeed() const
Definition
FreeLookCameraController.hpp:33
Sleak::GameObject
Definition
GameObject.hpp:62
Sleak::Math::Vector2D
Definition
Vector.hpp:210
Sleak::Math::Vector3D
Definition
Vector.hpp:354
Sleak
Root namespace for everything the engine exposes.
Definition
Camera.hpp:10
include
public
ECS
Components
FreeLookCameraController.hpp
Generated on
for SleakEngine by
1.18.0