X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcreature%2FSituation.hpp;h=f29d9b08b96b0e5c07c4bb588e5a1f0cfa896928;hb=6c1097479fd1ea41f0f76b91e67613822acf2e90;hp=df7abf2b9f0dab475d8904a1a9037898f33d003d;hpb=42db7d9d2286e50896ad172e2e4a8fbe65c8a4a9;p=blobs.git diff --git a/src/creature/Situation.hpp b/src/creature/Situation.hpp index df7abf2..f29d9b0 100644 --- a/src/creature/Situation.hpp +++ b/src/creature/Situation.hpp @@ -14,6 +14,24 @@ namespace creature { class Situation { +public: + struct State { + glm::dvec3 pos; + glm::dvec3 vel; + State( + const glm::dvec3 &pos = glm::dvec3(0.0), + const glm::dvec3 &vel = glm::dvec3(0.0)) + : pos(pos), vel(vel) { } + }; + struct Derivative { + glm::dvec3 vel; + glm::dvec3 acc; + Derivative( + const glm::dvec3 &vel = glm::dvec3(0.0), + const glm::dvec3 &acc = glm::dvec3(0.0)) + : vel(vel), acc(acc) { } + }; + public: Situation(); ~Situation(); @@ -29,16 +47,23 @@ public: world::Planet &GetPlanet() const noexcept { return *planet; } bool OnSurface() const noexcept; int Surface() const noexcept { return surface; } - const glm::dvec3 &Position() const noexcept { return position; } + 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; + 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; void SetPlanetSurface(world::Planet &, int srf, const glm::dvec3 &pos) noexcept; public: world::Planet *planet; - glm::dvec3 position; + State state; int surface; enum { LOST,