X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcreature%2FSituation.hpp;h=6b2bac0500f4dcc958040ce4fd8192693af51365;hb=b9af958c3f80a966bd31c622a45d0f3375bf2c3a;hp=a12f4224c64ca9d9dcb5d8ab6cd4bc4ddb1f13ab;hpb=b0e73e632f0b681a0af78f889dd82d370563944a;p=blobs.git diff --git a/src/creature/Situation.hpp b/src/creature/Situation.hpp index a12f422..6b2bac0 100644 --- a/src/creature/Situation.hpp +++ b/src/creature/Situation.hpp @@ -16,20 +16,30 @@ class Situation { 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; + // orientation adjust + glm::dvec3 turn; Derivative( const glm::dvec3 &vel = glm::dvec3(0.0), - const glm::dvec3 &acc = glm::dvec3(0.0)) - : vel(vel), acc(acc) { } + const glm::dvec3 &acc = glm::dvec3(0.0), + const glm::dvec3 &turn = glm::dvec3(0.0)) + : vel(vel), acc(acc), turn(turn) { } }; public: @@ -56,8 +66,12 @@ public: 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.00000001; } void Move(const glm::dvec3 &dp) noexcept; + + const glm::dvec3 &Heading() const noexcept { return state.dir; } + void SetPlanetSurface(world::Planet &, int srf, const glm::dvec3 &pos) noexcept; public: