void Name(const std::string &n) { name = n; }
const AABB &Bounds() const noexcept { return bounds; }
- void Bounds(const AABB &b) noexcept { bounds = b; }
+ // get distance between local origin and farthest vertex
+ float Radius() const noexcept { return radius; }
+ void Bounds(const AABB &b) noexcept { bounds = b; radius = b.OriginRadius(); }
bool WorldCollidable() const noexcept { return world_collision; }
void WorldCollidable(bool b) noexcept { world_collision = b; }
const glm::vec3 &Velocity() const noexcept { return state.velocity; }
- const glm::vec3 &Position() const noexcept { return state.block_pos; }
- void Position(const glm::ivec3 &, const glm::vec3 &) noexcept;
- void Position(const glm::vec3 &) noexcept;
+ const ExactLocation::Fine &Position() const noexcept { return state.pos.block; }
+ void Position(const ExactLocation::Coarse &, const ExactLocation::Fine &) noexcept;
+ void Position(const ExactLocation::Fine &) noexcept;
- const glm::ivec3 ChunkCoords() const noexcept { return state.chunk_pos; }
+ const glm::ivec3 ChunkCoords() const noexcept { return state.pos.chunk; }
glm::vec3 AbsolutePosition() const noexcept {
return state.AbsolutePosition();
}
/// orientation of local coordinate system
+ void Orientation(const glm::quat &o) noexcept { state.orient = o; }
const glm::quat &Orientation() const noexcept { return state.orient; }
/// orientation of head within local coordinate system, in radians
/// get a transform for this entity's view space relative to reference chunk
glm::mat4 ViewTransform(const glm::ivec3 &reference) const noexcept;
/// get a ray in entity's face direction originating from center of vision
- Ray Aim(const Chunk::Pos &chunk_offset) const noexcept;
+ Ray Aim(const ExactLocation::Coarse &chunk_offset) const noexcept;
/// true if this entity's position will change (significantly) the next update
bool Moving() const noexcept { return speed > 0.0f; }
std::string name;
AABB bounds;
+ float radius;
EntityState state;
/// chunk to model space