26#include <entt/entt.hpp>
64inline double CalculateSOI(
const double& mass,
const double& reference_mass,
const double& sma) {
65 return sma * std::pow(mass / reference_mass, 0.4);
96template <
typename T,
typename... Rest>
100template <
typename... Pack>
105template <
typename... Ranges>
108template <
typename R,
typename... Ranges>
110 using EltT = std::ranges::range_value_t<R>;
111 using IterT = std::ranges::iterator_t<R>;
115 ExpandedIter(R& r, Ranges&... rest) : r(r), rest_iter(rest...) { iter = r.begin(); }
117 if (iter == r.end()) {
118 return rest_iter.is_end();
124 if constexpr (
sizeof...(Ranges) != 0) {
125 if (iter == r.end()) {
126 return rest_iter.current();
132 if (iter == r.end()) {
146template <
typename... Views>
171template <
typename... Rs>
176template <
typename... Ranges>
179 std::tuple<decltype(std::views::all(std::forward<Ranges>(std::declval<Ranges&>())))...>
views;
191template <
typename... Rs>
192 requires(std::ranges::range<Rs> && ...)
193ConcatView<Rs...> concat(Rs&&... rs) {
194 ConcatView<Rs...>
v(std::forward<Rs>(rs)...);
ConcatIter & operator=(ConcatIter &&)=delete
bool is_end() const
Definition: bodies.h:159
ConcatIter & operator++()
Definition: bodies.h:161
ConcatIter(const ConcatIter &)=delete
EltT operator*()
Definition: bodies.h:160
ConcatIter(ConcatIter &&other)=default
ConcatIter & operator=(const ConcatIter &)=delete
std::ranges::range_value_t< GetFirstType< Views... > > EltT
Definition: bodies.h:151
ExpandedIter< Views... > exp_iter
Definition: bodies.h:148
ConcatIter(Views &... views)
Definition: bodies.h:153
IterT begin()
Definition: bodies.h:184
ConcatView(Ranges &&... ranges)
Definition: bodies.h:182
EndIter end()
Definition: bodies.h:185
std::tuple< decltype(std::views::all(std::forward< Ranges >(std::declval< Ranges & >())))... > views
Definition: bodies.h:179
GetFirstTypeT< Pack... >::Type GetFirstType
Definition: bodies.h:101
double CalculateSOI(const double &mass, const double &reference_mass, const double &sma)
Calculates SOI
Definition: bodies.h:64
double GetPlanetRotationAngle(const double &time, const double &day_length, const double &offset)
Calculates the current planet rotation angle
Definition: bodies.h:83
bool operator==(const ConcatIter< Rs... > &iter, EndIter)
Definition: bodies.h:172
double CalculateMass(const double &GM)
Calculates mass from gravitational constant
Definition: bodies.h:74
return v
Definition: bodies.h:193
constexpr double G_km
Definition: units.h:55
double kilogram
Definition: units.h:40
constexpr double TWOPI
Definition: units.h:47
double kilometer
Definition: units.h:35
double scale_height
Definition: bodies.h:221
double rotation_offset
Definition: bodies.h:53
types::kilogram mass
Definition: bodies.h:42
double axial
Definition: bodies.h:51
types::kilometer radius
Definition: bodies.h:35
double rotation
Definition: bodies.h:48
types::kilometer SOI
Radius of sphere of influence rsoi = a(m/M)^2/5
Definition: bodies.h:41
double GM
Definition: bodies.h:45
R & r
Definition: bodies.h:112
void next()
Definition: bodies.h:131
std::ranges::iterator_t< R > IterT
Definition: bodies.h:111
ExpandedIter(R &r, Ranges &... rest)
Definition: bodies.h:115
ExpandedIter< Ranges... > rest_iter
Definition: bodies.h:114
std::ranges::range_value_t< R > EltT
Definition: bodies.h:110
auto current()
Definition: bodies.h:123
IterT iter
Definition: bodies.h:113
bool is_end() const
Definition: bodies.h:116
bool is_end() const
Definition: bodies.h:142
void next()
Definition: bodies.h:143
T Type
Definition: bodies.h:98
An object for the children of an orbital object.
Definition: bodies.h:201
std::vector< entt::entity > bodies
Definition: bodies.h:207
std::vector< entt::entity > children
Definition: bodies.h:205
void push_back(const entt::entity entity)
Definition: bodies.h:208
auto all()
Definition: bodies.h:209
std::string normal_name
Definition: bodies.h:89
std::string terrain_name
Definition: bodies.h:88
std::string roughness_name
Definition: bodies.h:90