summaryrefslogtreecommitdiff
path: root/src/camera.hpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2024-01-15 18:20:58 -0500
committerJonathan Bradley <jcb@pikum.xyz>2024-01-15 18:20:58 -0500
commitc30b1f9b2f5d231e98194db526560eb4e010edff (patch)
tree328825d5187f5f0b3ffd6754f8795f6a5947b8f7 /src/camera.hpp
parent05a6ca44e40da855a1ddc32cfe799edef74f7bdf (diff)
major refactor so cameras are entities and have a rigid body instance
Diffstat (limited to 'src/camera.hpp')
-rw-r--r--src/camera.hpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/camera.hpp b/src/camera.hpp
index ab10a5a..1adfbc7 100644
--- a/src/camera.hpp
+++ b/src/camera.hpp
@@ -1,6 +1,7 @@
#ifndef PKE_CAMERA_HPP
#define PKE_CAMERA_HPP
+#include "components.hpp"
#include "macros.hpp"
#include "vendor/glm_include.hpp"
#include "memory-type-defs.hpp"
@@ -15,37 +16,43 @@ struct CameraHandle : public PkeHandle {};
constexpr CameraHandle CameraHandle_MAX = CameraHandle{};
-const PkeCameraType PKE_CAMERA_TYPE_PERSPECTIVE = PkeCameraType{1 << 0};
-const PkeCameraType PKE_CAMERA_TYPE_ORTHOGONAL = PkeCameraType{1 << 1};
+constexpr PkeCameraType PKE_CAMERA_TYPE_PERSPECTIVE = PkeCameraType{1 << 0};
+constexpr PkeCameraType PKE_CAMERA_TYPE_ORTHOGONAL = PkeCameraType{1 << 1};
-const PkeCameraOrientation PKE_CAMERA_ORIENTATION_TARGET = PkeCameraOrientation{1 << 0};
-const PkeCameraOrientation PKE_CAMERA_ORIENTATION_FREE = PkeCameraOrientation{1 << 1};
+constexpr PkeCameraOrientation PKE_CAMERA_ORIENTATION_TARGET = PkeCameraOrientation{1 << 0};
+constexpr PkeCameraOrientation PKE_CAMERA_ORIENTATION_FREE = PkeCameraOrientation{1 << 1};
-const PkeCameraStaleFlags PKE_CAMERA_STALE_POS = PkeCameraStaleFlags{1 << 0};
-const PkeCameraStaleFlags PKE_CAMERA_STALE_ROT = PkeCameraStaleFlags{1 << 1};
-const PkeCameraStaleFlags PKE_CAMERA_STALE_ORIENTATION = PkeCameraStaleFlags{1 << 2};
-const PkeCameraStaleFlags PKE_CAMERA_STALE_ALL = PkeCameraStaleFlags{0xFF};
+constexpr PkeCameraStaleFlags PKE_CAMERA_STALE_POS = PkeCameraStaleFlags{1 << 0};
+constexpr PkeCameraStaleFlags PKE_CAMERA_STALE_ROT = PkeCameraStaleFlags{1 << 1};
+constexpr PkeCameraStaleFlags PKE_CAMERA_STALE_POSROT = PkeCameraStaleFlags{1 << 0 | 1 << 1};
+constexpr PkeCameraStaleFlags PKE_CAMERA_STALE_PERSPECTIVE = PkeCameraStaleFlags{1 << 2};
+constexpr PkeCameraStaleFlags PKE_CAMERA_STALE_ALL = PkeCameraStaleFlags{0xFF};
-struct PkeCamera {
- CameraHandle handle = CameraHandle_MAX;
+struct PkeCamera : public Entity_Base {
+ CameraHandle camHandle = CameraHandle_MAX;
glm::vec3 pos = glm::vec3(0);
glm::quat rot = glm::quat{};
glm::vec3 target = glm::vec3(0);
PkeCameraType type = PkeCameraType_MAX;
PkeCameraOrientation orientation = PkeCameraOrientation_MAX;
PkeCameraStaleFlags stale = PkeCameraStaleFlags_MAX;
+ struct Phys {
+ CompInstance *inst = nullptr;
+ btTypedConstraint *constraint = nullptr;
+ } phys;
bool isPrimary = false;
};
extern PkeCamera NullCamera;
extern PkeCamera *ActiveCamera;
void PkeCamera_Init();
-PkeCamera &PkeCamera_Register();
+PkeCamera &PkeCamera_Register(const InstPos &instPos);
PkeCamera *PkeCamera_Get(CameraHandle handle);
int64_t PkeCamera_GetBucketCount();
PkeCamera *PkeCamera_GetCameras(int64_t bucketIndex, int64_t &count);
void PkeCamera_Destroy(CameraHandle handle);
void PkeCamera_Teardown();
+void PkeCamera_Tick(double delta);
void PkeCamera_Unregister(uint64_t id);