MCPcopy Create free account
hub / github.com/Illation/ETEngine / Process

Method Process

Engine/source/EtEditor/Rendering/EditorCamera.cpp:56–121  ·  view source on GitHub ↗

------------------------------ AudioListenerSystem::Process Update a cameras position according to input

Source from the content-addressed store, hash-verified

54// Update a cameras position according to input
55//
56void EditorCameraSystem::Process(fw::ComponentRange<EditorCameraSystemView>& range)
57{
58 // common variables
59 core::InputManager* const input = core::InputManager::GetInstance();
60 float const dt = core::ContextManager::GetInstance()->GetActiveContext()->time->DeltaTime();
61
62 for (EditorCameraSystemView& view : range)
63 {
64 // movement direction
65 vec3 move;
66
67 if (view.camera->isEnabled)
68 {
69 move.x -= (input->GetKeyState(E_KbdKey::A) == E_KeyState::Down) ? 1.0f : 0.0f;
70 move.x += (input->GetKeyState(E_KbdKey::D) == E_KeyState::Down) ? 1.0f : 0.0f;
71
72 move.y -= (input->GetKeyState(E_KbdKey::Q) == E_KeyState::Down) ? 1.0f : 0.0f;
73 move.y += (input->GetKeyState(E_KbdKey::E) == E_KeyState::Down) ? 1.0f : 0.0f;
74
75 move.z += (input->GetKeyState(E_KbdKey::W) == E_KeyState::Down) ? 1.0f : 0.0f;
76 move.z -= (input->GetKeyState(E_KbdKey::S) == E_KeyState::Down) ? 1.0f : 0.0f;
77 }
78
79 if (!math::isZero(move))
80 {
81 move = math::normalize(move);
82 }
83
84 //Acceleration
85 {
86 vec3 const delta = move - view.camera->movement;
87 float const acc = s_Accelleration * dt;
88 view.camera->movement = view.camera->movement + (delta * math::Clamp01(acc));
89 }
90
91 //handle scrolling to change camera speed
92 float const scroll = view.camera->isEnabled ? input->GetMouseWheelDelta().y : 0.f;
93 if (scroll > 0.0f)
94 {
95 view.camera->speedMultiplier *= 1.1f;
96 }
97 else if (scroll < -0.01f)
98 {
99 view.camera->speedMultiplier *= 0.9f;
100 }
101
102 float const currSpeed = s_MoveSpeed * view.camera->speedMultiplier;
103
104 //move relative to cameras view space - luckily the camera already has those inverted matrices calculated
105 mat3 const camMat = math::CreateFromMat4(view.camera->renderCamera->GetViewInv());
106 view.transform->SetPosition(view.transform->GetPosition() + camMat * view.camera->movement * currSpeed * dt);
107
108 //Rotate
109 //******
110 vec2 const look = view.camera->isEnabled ? input->GetMouseMove() : vec2();
111
112 view.camera->totalYaw += -look.x * s_RotationSpeed;
113 view.camera->totalPitch = math::Clamp(view.camera->totalPitch, math::PI_DIV2, -math::PI_DIV2); // Make sure we can't do a backflip

Callers

nothing calls this directly

Calls 7

Clamp01Function · 0.85
ClampFunction · 0.85
DeltaTimeMethod · 0.80
GetActiveContextMethod · 0.80
GetKeyStateMethod · 0.80
SetPositionMethod · 0.80
SetRotationMethod · 0.80

Tested by

no test coverage detected