X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FBody.hpp;h=fba121b90995d113c2fad374c39db8bd7ae28942;hb=196f02bdbbd372b77141201f045fcfea318093b1;hp=1b9e2e3a2a65036b75f370aa47a58b3730374545;hpb=c5556cf5f6813887a3503433c021ccd2e7fae865;p=blobs.git diff --git a/src/world/Body.hpp b/src/world/Body.hpp index 1b9e2e3..fba121b 100644 --- a/src/world/Body.hpp +++ b/src/world/Body.hpp @@ -16,6 +16,7 @@ namespace graphics { } namespace world { +class Creature; class Simulation; class Body { @@ -70,14 +71,24 @@ public: double OrbitalPeriod() const noexcept; double RotationalPeriod() const noexcept; - glm::dmat4 LocalTransform() const noexcept; - glm::dmat4 InverseTransform() const noexcept; + const glm::dmat4 &LocalTransform() const noexcept { return local; } + const glm::dmat4 &InverseTransform() const noexcept { return inverse_local; } - glm::dmat4 ToParent() const noexcept; - glm::dmat4 FromParent() const noexcept; + const glm::dmat4 &ToParent() const noexcept { return inverse_orbital; } + const glm::dmat4 &FromParent() const noexcept { return orbital; } + + glm::dmat4 ToUniverse() const noexcept; + glm::dmat4 FromUniverse() const noexcept; virtual void Draw(app::Assets &, graphics::Viewport &) { } + void Cache() noexcept; + + // body takes over ownership of given pointer + void AddCreature(Creature *); + std::vector &Creatures() noexcept { return creatures; } + const std::vector &Creatures() const noexcept { return creatures; } + private: void AddChild(Body &); void RemoveChild(Body &); @@ -94,6 +105,13 @@ private: double rotation; double angular; + glm::dmat4 orbital; + glm::dmat4 inverse_orbital; + glm::dmat4 local; + glm::dmat4 inverse_local; + + std::vector creatures; + }; }