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 /// do an integration step of dt milliseconds
27 void Update(int dt) noexcept;
29 /// get a position vector relative to the (0,0,0) chunk
30 glm::vec3 AbsolutePosition() const noexcept {
31 return glm::vec3(chunk_pos * Chunk::Extent()) + block_pos;
33 /// get a position vector relative to given reference chunk
34 glm::vec3 RelativePosition(const glm::ivec3 &reference) const noexcept {
35 return glm::vec3((chunk_pos - reference) * Chunk::Extent()) + block_pos;
38 /// get the difference between this and the given position
39 glm::vec3 Diff(const EntityState &other) const noexcept {
40 return RelativePosition(other.chunk_pos) - other.block_pos;
43 /// get entity state as a matrix tranform relative to given reference chunk
44 glm::mat4 Transform(const glm::ivec3 &reference) const noexcept;