#define BLOBS_WORLD_BODY_HPP_
#include "Orbit.hpp"
+#include "../math/geometry.hpp"
#include "../math/glm.hpp"
+#include <string>
#include <vector>
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; }
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 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; }
Simulation *sim;
Body *parent;
std::vector<Body *> children;
+ std::string name;
double mass;
double radius;
Orbit orbit;
- glm::dvec2 surface_tilt;
glm::dvec2 axis_tilt;
double rotation;
double angular;