X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcreature%2FSituation.hpp;h=25d218ddc2635d08bd26917df55623aa7082c23f;hb=cd80d7cfcac3c58d601db2ab4e0381dd77c06f44;hp=f29d9b08b96b0e5c07c4bb588e5a1f0cfa896928;hpb=6c1097479fd1ea41f0f76b91e67613822acf2e90;p=blobs.git diff --git a/src/creature/Situation.hpp b/src/creature/Situation.hpp index f29d9b0..25d218d 100644 --- a/src/creature/Situation.hpp +++ b/src/creature/Situation.hpp @@ -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), @@ -46,10 +53,7 @@ public: bool OnPlanet() const noexcept; world::Planet &GetPlanet() const noexcept { return *planet; } bool OnSurface() const noexcept; - int Surface() const noexcept { return surface; } const glm::dvec3 &Position() const noexcept { return state.pos; } - bool OnTile() const noexcept; - glm::ivec2 SurfacePosition() const noexcept; world::Tile &GetTile() const noexcept; const world::TileType &GetTileType() const noexcept; @@ -57,14 +61,19 @@ 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.000001; } void Move(const glm::dvec3 &dp) noexcept; - void SetPlanetSurface(world::Planet &, int srf, const glm::dvec3 &pos) noexcept; + void Accelerate(const glm::dvec3 &dv) noexcept; + void EnforceConstraints(State &) noexcept; + + void Heading(const glm::dvec3 &h) noexcept { state.dir = h; } + const glm::dvec3 &Heading() const noexcept { return state.dir; } + + void SetPlanetSurface(world::Planet &, const glm::dvec3 &pos) noexcept; public: world::Planet *planet; State state; - int surface; enum { LOST, PLANET_SURFACE,