]> git.localhorst.tv Git - blank.git/blob - src/world/EntityState.hpp
d3e34e55c644e48c5cf11f0c032ffa9e29fd52cb
[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
20         EntityState();
21
22         /// make sure block_pos is within chunk bounds
23         void AdjustPosition() noexcept;
24
25         /// get a position vector relative to the (0,0,0) chunk
26         glm::vec3 AbsolutePosition() const noexcept {
27                 return glm::vec3(chunk_pos * Chunk::Extent()) + block_pos;
28         }
29         /// get a position vector relative to given reference chunk
30         glm::vec3 RelativePosition(const glm::ivec3 &reference) const noexcept {
31                 return glm::vec3((chunk_pos - reference) * Chunk::Extent()) + block_pos;
32         }
33
34         /// get the difference between this and the given position
35         glm::vec3 Diff(const EntityState &other) const noexcept {
36                 return RelativePosition(other.chunk_pos) - other.block_pos;
37         }
38
39         /// get entity state as a matrix tranform relative to given reference chunk
40         glm::mat4 Transform(const glm::ivec3 &reference) const noexcept;
41
42 };
43
44 }
45
46 #endif