+ const std::vector<Body *> &Children() const noexcept { return children; }
+
+ const std::string &Name() const noexcept { return name; }
+ void Name(const std::string &n) noexcept { name = n; }
+
+ double Mass() const noexcept { return mass; }
+ void Mass(double m) noexcept { mass = m; }
+
+ double Radius() const noexcept { return radius; }
+ void Radius(double r) noexcept { radius = r; }
+
+ Orbit &GetOrbit() noexcept { return orbit; }
+ const Orbit &GetOrbit() const noexcept { return orbit; }
+
+ const glm::dvec2 &SurfaceTilt() const noexcept { return surface_tilt; }
+ void SurfaceTilt(const glm::dvec2 &t) noexcept { surface_tilt = t; }
+
+ const glm::dvec2 &AxialTilt() const noexcept { return axis_tilt; }
+ void AxialTilt(const glm::dvec2 &t) noexcept { axis_tilt = t; }
+
+ double Rotation() const noexcept { return rotation; }
+ void Rotation(double r) noexcept { rotation = r; }
+
+ double AngularMomentum() const noexcept { return angular; }
+ void AngularMomentum(double m) noexcept { angular = m; }
+
+ double Inertia() const noexcept;
+
+ double GravitationalParameter() const noexcept;
+ double OrbitalPeriod() const noexcept;
+ double RotationalPeriod() const noexcept;
+ /// day length relative to parent, not neccessarily a sun
+ /// gives absolute value in seconds
+ /// returns sidereal day for parent-less bodies
+ double DayLength() const noexcept;
+ double SphereOfInfluence() const noexcept;
+
+ math::Sphere CollisionBounds() const noexcept { return math::Sphere{ glm::dvec3(0.0), Radius() }; }
+ const glm::dmat4 &CollisionTransform() const noexcept { return local; }
+
+ const glm::dmat4 &LocalTransform() const noexcept { return local; }
+ const glm::dmat4 &InverseTransform() const noexcept { return inverse_local; }
+
+ 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;
+