1 #ifndef BLANK_WORLD_ENTITYSTATE_HPP_
2 #define BLANK_WORLD_ENTITYSTATE_HPP_
7 #include <glm/gtc/quaternion.hpp>
23 /// make sure block_pos is within chunk bounds
24 void AdjustPosition() noexcept;
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;
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;
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;
40 /// get entity state as a matrix tranform relative to given reference chunk
41 glm::mat4 Transform(const glm::ivec3 &reference) const noexcept;