public:
struct State {
+ // position
glm::dvec3 pos;
+ // velocity
glm::dvec3 vel;
+ // face direction, normalized
+ glm::dvec3 dir;
State(
const glm::dvec3 &pos = glm::dvec3(0.0),
- const glm::dvec3 &vel = glm::dvec3(0.0))
- : pos(pos), vel(vel) { }
+ const glm::dvec3 &vel = glm::dvec3(0.0),
+ const glm::dvec3 &dir = glm::dvec3(0.0, 0.0, -1.0))
+ : pos(pos), vel(vel), dir(dir) { }
};
struct Derivative {
+ // velocity
glm::dvec3 vel;
+ // acceleration
glm::dvec3 acc;
Derivative(
const glm::dvec3 &vel = glm::dvec3(0.0),
void SetState(const State &s) noexcept { state = s; }
const State &GetState() const noexcept { return state; }
- bool Moving() const noexcept { return glm::length2(state.vel) < 0.00000001; }
+ const glm::dvec3 &Velocity() const noexcept { return state.vel; }
+ bool Moving() const noexcept { return glm::length2(state.vel) > 0.0000001; }
void Move(const glm::dvec3 &dp) noexcept;
+
+ void Heading(const glm::dvec3 &h) noexcept { state.dir = h; }
+ const glm::dvec3 &Heading() const noexcept { return state.dir; }
+
void SetPlanetSurface(world::Planet &, int srf, const glm::dvec3 &pos) noexcept;
public: