]> git.localhorst.tv Git - blobs.git/blobdiff - src/creature/Situation.hpp
overhaul need system
[blobs.git] / src / creature / Situation.hpp
index f29d9b08b96b0e5c07c4bb588e5a1f0cfa896928..4205cff449c8e0f1d57cdaedd39c56662c62ddd2 100644 (file)
@@ -16,15 +16,22 @@ 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;
                Derivative(
                        const glm::dvec3 &vel = glm::dvec3(0.0),
@@ -57,8 +64,12 @@ public:
        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; }
+       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: