------------------------------ AudioListenerSystem::Process Update a cameras position according to input
| 54 | // Update a cameras position according to input |
| 55 | // |
| 56 | void 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 |
nothing calls this directly
no test coverage detected