|
|
|
|
@ -85,7 +85,6 @@ updateSatellitePosition(entity& sat)
|
|
|
|
|
void |
|
|
|
|
updateOrbit(system_2body sys, entity& ellipse_entity) |
|
|
|
|
{ |
|
|
|
|
//sys.ep = ellipseInitAE(sys.ep.a, sys.ep.e);
|
|
|
|
|
ellipse3DUpdate(sys.ep, sys.e3d); |
|
|
|
|
|
|
|
|
|
for (uint i = 0; i < sys.e3d.vert_count; i++) |
|
|
|
|
@ -114,55 +113,11 @@ preFrameCallback(render_state* rs)
|
|
|
|
|
void |
|
|
|
|
postFrameCallback(render_state* rs) |
|
|
|
|
{ |
|
|
|
|
//bool update_if_paused = false;
|
|
|
|
|
//static orbital_elements c_orb = {};
|
|
|
|
|
//c_orb = g_orbit;
|
|
|
|
|
gooDraw(rs->handles->window, g_sys); |
|
|
|
|
g_sys.ep = ellipseInitAE(g_sys.ep.a, g_sys.ep.e); |
|
|
|
|
entity& ellipse_entity = rs->render_groups[0].entities[0]; |
|
|
|
|
updateOrbit(g_sys, ellipse_entity); |
|
|
|
|
updateSatellitePosition(rs->render_groups[0].entities[2]); |
|
|
|
|
|
|
|
|
|
#if 0 |
|
|
|
|
if (c_orb.nu != g_orbit.nu && |
|
|
|
|
((c_orb.nu >= 0 && c_orb.nu <= M_PI) || |
|
|
|
|
(c_orb.nu < 0 && c_orb.nu >= -1 * M_PI))) |
|
|
|
|
{ |
|
|
|
|
g_orbit.nu = c_orb.nu; |
|
|
|
|
update_if_paused = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TODO: will need more validation from GUI as added
|
|
|
|
|
// TODO: might be easier to preset valid ranges in gooey code see:
|
|
|
|
|
// https://github.com/ocornut/imgui/blob/master/imgui.h#L810
|
|
|
|
|
// ^ description of IsItemDeactivatedAfterEdit();
|
|
|
|
|
if (!ellipsesEqual(c_orb.ep, g_orbit.ep)) { |
|
|
|
|
// NOTE: handle the case where semimajor axis lowered with low
|
|
|
|
|
// eccentricity would fail validation
|
|
|
|
|
if (c_orb.ep.a < g_orbit.ep.a |
|
|
|
|
&& c_orb.ep.a > 0 |
|
|
|
|
&& c_orb.ep.e == g_orbit.ep.e) |
|
|
|
|
{ |
|
|
|
|
c_orb.ep.b = c_orb.ep.a * sqrt(1 - pow(c_orb.ep.e, 2.0)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ellipseValidate(c_orb.ep)) { |
|
|
|
|
c_orb.ep = ellipseInitAE(c_orb.ep.a, c_orb.ep.e); |
|
|
|
|
g_orbit.ep = c_orb.ep; |
|
|
|
|
entity& ellipse_entity = rs->render_groups[0].entities[0]; |
|
|
|
|
updateOrbit(g_sys, ellipse_entity); |
|
|
|
|
|
|
|
|
|
// TODO: would be nice to have an interface for
|
|
|
|
|
// updating/constructing an orbit
|
|
|
|
|
g_orbit.epsilon = orbitGetSpecificEnergy(g_orbit.ep.a, g_orbit.mu); |
|
|
|
|
g_orbit.h = orbitGetAngularMomentum(g_orbit.ep.p, g_orbit.mu); |
|
|
|
|
update_if_paused = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (g_sys.time_step == 0 && update_if_paused) |
|
|
|
|
updateSatellitePosition(rs->render_groups[0].entities[2]); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int |
|
|
|
|
|