- int Surface() const noexcept { return surface; }
- const glm::dvec3 &Position() const noexcept { return position; }
+ bool OnSurface() const noexcept;
+ bool OnGround() const noexcept;
+ const glm::dvec3 &Position() const noexcept { return state.pos; }
+ glm::dvec3 SurfaceNormal() const noexcept;
+ world::Tile &GetTile() const noexcept;
+ const world::TileType &GetTileType() const noexcept;
+
+ void SetState(const State &s) noexcept { state = s; }
+ const State &GetState() const noexcept { return state; }
+
+ const glm::dvec3 &Velocity() const noexcept { return state.vel; }
+ bool Moving() const noexcept { return glm::length2(state.vel) > 0.00001; }
+ void Move(const glm::dvec3 &dp) noexcept;
+ void Accelerate(const glm::dvec3 &dv) noexcept;
+ void EnforceConstraints(State &) const noexcept;
+
+ void Heading(const glm::dvec3 &h) noexcept { state.dir = h; }
+ const glm::dvec3 &Heading() const noexcept { return state.dir; }