]> git.localhorst.tv Git - blank.git/blob - src/world/EntityState.hpp
e93fffa6714d324990c349f1b43d2e13c63f5827
[blank.git] / src / world / EntityState.hpp
1 #ifndef BLANK_WORLD_ENTITYSTATE_HPP_
2 #define BLANK_WORLD_ENTITYSTATE_HPP_
3
4 #include "Chunk.hpp"
5
6 #include <glm/glm.hpp>
7 #include <glm/gtc/quaternion.hpp>
8
9
10 namespace blank {
11
12 struct EntityState {
13
14         glm::ivec3 chunk_pos;
15         glm::vec3 block_pos;
16         glm::vec3 velocity;
17
18         glm::quat orient;
19         glm::vec3 ang_vel;
20
21         EntityState();
22
23         /// make sure block_pos is within chunk bounds
24         void AdjustPosition() noexcept;
25
26         /// get a position vector relative to the (0,0,0) chunk
27         glm::vec3 AbsolutePosition() const noexcept {
28                 return glm::vec3(chunk_pos * Chunk::Extent()) + block_pos;
29         }
30         /// get a position vector relative to given reference chunk
31         glm::vec3 RelativePosition(const glm::ivec3 &reference) const noexcept {
32                 return glm::vec3((chunk_pos - reference) * Chunk::Extent()) + block_pos;
33         }
34
35         /// get the difference between this and the given position
36         glm::vec3 Diff(const EntityState &other) const noexcept {
37                 return RelativePosition(other.chunk_pos) - other.block_pos;
38         }
39
40         /// get entity state as a matrix tranform relative to given reference chunk
41         glm::mat4 Transform(const glm::ivec3 &reference) const noexcept;
42
43 };
44
45 }
46
47 #endif