Untitled Game engine no.5  1.0
Camera.hpp
1 #ifndef CAMERA_HPP
2 #define CAMERA_HPP
3 
4 #include "Components.hpp"
5 #include <glm/gtc/matrix_transform.hpp>
6 #include "Window.hpp"
7 #include "Scene.hpp"
8 #include "Entity.hpp"
9 #include "Time.hpp"
10 
11 namespace Engine {
13  class Camera {
14  public:
20  float w,h;
21  float snap_delay_factor = 2.0f;
22 
24  Camera():transform({0, 0, 500},{0, 0, 0},{1, 1, 1}),
25  offset({0, 0, 0},{0, 0, 0},{1, 1, 1}),
26  w{500}, h{500} { };
27 
29  glm::mat4 GetView() const {
30  return glm::inverse(transform.GetMatrix());
31  }
32 
33  static Ref<Camera> main;
34 
36  static Ref<Camera> Main() {
37  if (main == nullptr) {
38  main = CreateRef<Camera>();
39  }
40  return main;
41  }
42 
47  static void Update(const Scene &s) {
48  ECS ecs = s.GetECS();
49  for (auto e : ecs.GetEntitiesWith<Transform, Camera>()) {
50  UpdateCameras(ecs, e);
51  }
52  // adjust the camera position to follow the player
53  }
54 
62  static void UpdateCameras(ECS& ecs, const EntityID& e) {
64  Ref<Camera> c = ecs.GetComponent<Camera>(e);
65  if (t == nullptr || c == nullptr) {
66  return;
67  }
68  // check if player is outside of camera range
69  glm::vec3 diff = (t->position + (t->rotation * c->offset.position)) - c->transform.position;
70  c->transform.position += diff;// * (float)Time::dt * 10.f;
71  c->transform.rotation = t->rotation;//glm::mix(t->rotation, c->transform.rotation, (float)Time::dt);
72  /*
73  if (glm::abs(t->position.y - cam.transform.position.y) > cam.h/2) {
74  cam.transform.position.y = t->position.y;
75  }
76  */
77  // adjust the camera position to follow the player
78  }
79 
80  };
81 }
82 
83 #endif
Engine::Camera::GetView
glm::mat4 GetView() const
Definition: Camera.hpp:29
Engine::ECS
Entity Component System.
Definition: ECS.hpp:19
Engine::Scene
A container for entities currently in the Scene.
Definition: Scene.hpp:9
Engine::Transform
Location, orientation, and scale of an entity.
Definition: Components.hpp:312
Engine::Camera::Main
static Ref< Camera > Main()
Definition: Camera.hpp:36
Engine::Ref
std::shared_ptr< T > Ref
Has stuff for making references a lot more easily shared smart pointer.
Definition: Base.hpp:21
Engine::Camera::Camera
Camera()
Creates a new camera.
Definition: Camera.hpp:24
Engine::Camera::transform
Transform transform
Transform of this camera.
Definition: Camera.hpp:16
Engine::ECS::GetEntitiesWith
std::vector< EntityID > GetEntitiesWith()
Definition: ECS.hpp:188
Engine::Camera::offset
Transform offset
offset to the subject of this camera
Definition: Camera.hpp:18
Engine::Transform::GetMatrix
glm::mat4 GetMatrix() const
extract a matrix from three vectors
Definition: Components.hpp:338
Engine::Camera::w
float w
Bounding box of this camera.
Definition: Camera.hpp:20
Engine::Transform::rotation
glm::qua< float > rotation
Rotation of entity in degrees.
Definition: Components.hpp:316
Engine::Transform::position
glm::vec3 position
Position of entity.
Definition: Components.hpp:314
Engine::Camera
Singleton, the current view!
Definition: Camera.hpp:13
Engine::ECS::GetComponent
Ref< C > GetComponent(const EntityID &id)
Definition: ECS.hpp:80
Engine::Camera::UpdateCameras
static void UpdateCameras(ECS &ecs, const EntityID &e)
Definition: Camera.hpp:62
Engine
Definition: Animation.hpp:14
Engine::Camera::Update
static void Update(const Scene &s)
Definition: Camera.hpp:47