vOOlkan
An object oriented approach to Vulkan
Moveable.h
Go to the documentation of this file.
1#ifndef VULKAN_MOVEABLE
2#define VULKAN_MOVEABLE
3
4#include <glm/glm.hpp>
5#include <glm/gtx/quaternion.hpp>
6#include <mutex>
7
8#include "Foundations.h"
9
10
11namespace Vulkan::Physics {
12
16 class Moveable {
17 public:
18 Moveable(Position position = { 0.0f, 0.0f, 0.0f }, glm::vec3 rotationEuler = { 0.0f, 0.0f, 0.0f }) : position{ position }, mutex{} {
19 setRotation(rotationEuler);
20 }
21
22 virtual Moveable& translate(DeltaSpace delta) {
23 std::scoped_lock lock{ mutex };
24 position += delta;
25 return *this;
26 };
27
28 virtual const Position& getPosition() const {
29 std::scoped_lock lock{ mutex };
30 return position;
31 }
32
33 virtual void setPosition(Position position) {
34 std::scoped_lock lock{ mutex };
35 this->position = position;
36 }
37
38 virtual Moveable& rotate(float angle, glm::vec3 axis) {
39 setRotation(glm::rotate(rotation, angle, axis));
40 return *this;
41 };
42
43 virtual const glm::quat& getRotation() const {
44 std::scoped_lock lock{ mutex };
45 return rotation;
46 }
47
48 virtual const glm::vec3& getRotationEuler() const {
49 std::scoped_lock lock{ mutex };
50
51 auto yaw = glm::yaw(rotation);
52 auto pitch = glm::pitch(rotation);
53 auto roll = glm::roll(rotation);
54
55 return { yaw, pitch, roll };
56 }
57
58 virtual void setRotation(glm::quat rotation) {
59 std::scoped_lock lock{ mutex };
60 this->rotation = rotation;
61 }
62
63 virtual void setRotation(glm::vec3 eulerAngles) {
64 setRotation(glm::quat(eulerAngles));
65 };
66
67
68 std::mutex& getMutex() {
69 return mutex;
70 }
71
72
73 protected:
74 mutable std::mutex mutex;
75
76
77 private:
78 Position position;
79 glm::quat rotation;
80 };
81}
82
83#endif
Definition: Foundations.h:230
A Movable object is an object which can be moved and rotated.
Definition: Moveable.h:16
std::mutex & getMutex()
Definition: Moveable.h:68
virtual const glm::quat & getRotation() const
Definition: Moveable.h:43
virtual Moveable & rotate(float angle, glm::vec3 axis)
Definition: Moveable.h:38
virtual const glm::vec3 & getRotationEuler() const
Definition: Moveable.h:48
virtual void setRotation(glm::quat rotation)
Definition: Moveable.h:58
virtual void setPosition(Position position)
Definition: Moveable.h:33
virtual const Position & getPosition() const
Definition: Moveable.h:28
std::mutex mutex
Definition: Moveable.h:74
virtual void setRotation(glm::vec3 eulerAngles)
Definition: Moveable.h:63
virtual Moveable & translate(DeltaSpace delta)
Definition: Moveable.h:22
Moveable(Position position={ 0.0f, 0.0f, 0.0f }, glm::vec3 rotationEuler={ 0.0f, 0.0f, 0.0f })
Definition: Moveable.h:18
Definition: Foundations.h:187
Definition: Cinematicable.h:9