Engine²
Open-source game engine written in C++.
Loading...
Searching...
No Matches
ChaseCameraBehavior.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cmath>
4
5#include <GLFW/glfw3.h>
6#include <glm/glm.hpp>
7
11#include "core/Core.hpp"
15#include "utils/CameraUtils.hpp"
16
21 public:
22 explicit ChaseCameraBehavior(Engine::Entity vehicleEntity) : _vehicleEntity(vehicleEntity) {}
23 ~ChaseCameraBehavior() override = default;
24
26 Object::Component::Transform &transform, Object::Component::Camera &camera, float deltaTime) override
27 {
28 auto &registry = core.GetRegistry();
29
30 auto &vehicleTransform = registry.get<Object::Component::Transform>(GetVehicleEntity());
31
32 glm::vec3 vehiclePos = vehicleTransform.GetPosition();
33 glm::quat vehicleRot = vehicleTransform.GetRotation();
34
35 glm::vec3 vehicleForward = vehicleRot * glm::vec3(0.0f, 0.0f, 1.0f);
36
37 constexpr float cameraDistance = 8.0f;
38 constexpr float cameraHeight = 3.0f;
39 constexpr float cameraLookAhead = 2.0f;
40
41 glm::vec3 cameraOffset = -vehicleForward * cameraDistance + glm::vec3(0.0f, cameraHeight, 0.0f);
42 glm::vec3 cameraPosition = vehiclePos + cameraOffset;
43 glm::vec3 cameraTarget = vehiclePos + vehicleForward * cameraLookAhead + glm::vec3(0.0f, 0.5f, 0.0f);
44
45 transform.SetPosition(cameraPosition);
46
47 glm::quat lookRotation =
48 CameraMovement::Utils::ComputeLookAtQuaternion(cameraPosition, cameraTarget, glm::vec3(0.0f, 1.0f, 0.0f));
49 transform.SetRotation(lookRotation);
50 }
51
53
54 void SetVehicleEntity(Engine::Entity vehicleEntity) { _vehicleEntity = vehicleEntity; }
55
56 private:
58};
CameraManager is a resource that manages the active camera entity.
Definition CameraManager.hpp:24
Base interface for camera behaviors.
Definition CameraBehavior.hpp:18
void Update(Engine::Core &core, CameraMovement::Resource::CameraManager &manager, Object::Component::Transform &transform, Object::Component::Camera &camera, float deltaTime) override
Update the camera behavior.
Definition ChaseCameraBehavior.hpp:25
ChaseCameraBehavior(Engine::Entity vehicleEntity)
Definition ChaseCameraBehavior.hpp:22
void SetVehicleEntity(Engine::Entity vehicleEntity)
Definition ChaseCameraBehavior.hpp:54
Engine::Entity GetVehicleEntity() const
Definition ChaseCameraBehavior.hpp:52
Engine::Entity _vehicleEntity
Definition ChaseCameraBehavior.hpp:57
~ChaseCameraBehavior() override=default
The core is the place where all the data of the engine is stored. It contains the registry (entities)...
Definition Core.hpp:33
Registry & GetRegistry()
Get the entt::registry that contains all components. It should be used to update component through sy...
Definition Core.hpp:50
Wrapper class providing a convenient interface for entity manipulation with the Core....
Definition Entity.hpp:20
glm::quat ComputeLookAtQuaternion(const glm::vec3 &eye, const glm::vec3 &target, const glm::vec3 &up)
Compute a quaternion that represents a "look at" rotation.
Definition CameraUtils.hpp:19
Definition Camera.hpp:10
Definition Transform.hpp:18
void SetPosition(const glm::vec3 &newPosition)
Definition Transform.hpp:42
const glm::vec3 & GetPosition() const
Definition Transform.hpp:37
void SetRotation(const glm::quat &newRotation)
Definition Transform.hpp:62