|
|
|
@ -26,6 +26,8 @@ |
|
|
|
* - Important!! add std::isnan() checks, from <cmath>, after applyManeuver(), |
|
|
|
* - Important!! add std::isnan() checks, from <cmath>, after applyManeuver(), |
|
|
|
* we're getting intermittent wonkyness, maybe another divide by zero |
|
|
|
* we're getting intermittent wonkyness, maybe another divide by zero |
|
|
|
* somewhere |
|
|
|
* somewhere |
|
|
|
|
|
|
|
* - to aid testing, we should create many more orbits, all with additional |
|
|
|
|
|
|
|
* maneuver nodes |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
#include <cassert> |
|
|
|
#include <cassert> |
|
|
|
@ -241,6 +243,36 @@ loadOrbit(GameState* gs, |
|
|
|
return orbit; |
|
|
|
return orbit; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
|
|
|
loadRandomOrbits(GameState* gs, |
|
|
|
|
|
|
|
RenderState* rs, |
|
|
|
|
|
|
|
const u32 count, |
|
|
|
|
|
|
|
const GravBody& body, |
|
|
|
|
|
|
|
RenderGroup* rg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
assert(gs->num_orbits + count < DEFAULT_MAX_ORBITS); |
|
|
|
|
|
|
|
srand(1); // NOTE: use the same seed every time
|
|
|
|
|
|
|
|
const double max_semi_major_axis = 50000; |
|
|
|
|
|
|
|
const double min_semi_major_axis = 20000; |
|
|
|
|
|
|
|
const double semi_major_axis_range = max_semi_major_axis - min_semi_major_axis; |
|
|
|
|
|
|
|
const double max_eccentricity = 0.7; |
|
|
|
|
|
|
|
const double max_nu = 2 * M_PI; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (u32 i = 0; i < count; i++) { |
|
|
|
|
|
|
|
double semi_major_axis = fmod(fabs((double) rand()), semi_major_axis_range) + min_semi_major_axis; |
|
|
|
|
|
|
|
double eccentricity = max_eccentricity * rand() / RAND_MAX; |
|
|
|
|
|
|
|
double nu = max_nu * rand() / RAND_MAX; |
|
|
|
|
|
|
|
//double omega = 2 * M_PI * rand() / RAND_MAX;
|
|
|
|
|
|
|
|
double omega = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GameOrbit* gorb = loadOrbit(gs, rs, body, |
|
|
|
|
|
|
|
orbitInit(semi_major_axis, eccentricity, 0, 0, omega, nu), |
|
|
|
|
|
|
|
rg, "???"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
addManeuver(gs, gorb, ImpulseType::CIRCULARIZE_LOWERING); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool |
|
|
|
bool |
|
|
|
loadScene(GameState* gs, RenderState* rs) |
|
|
|
loadScene(GameState* gs, RenderState* rs) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -256,7 +288,7 @@ loadScene(GameState* gs, RenderState* rs) |
|
|
|
// TODO: streamline the boilerplate in init_X_Entity functions
|
|
|
|
// TODO: streamline the boilerplate in init_X_Entity functions
|
|
|
|
ShaderProgram* shader = getShaderByName("colored_vertices", rs->gl_ctx); |
|
|
|
ShaderProgram* shader = getShaderByName("colored_vertices", rs->gl_ctx); |
|
|
|
RenderGroup* rg = getFreeRenderGroup(rs); |
|
|
|
RenderGroup* rg = getFreeRenderGroup(rs); |
|
|
|
initRenderGroup(rg, rs->rg_arena, shader, 256, "manual mesh group"); |
|
|
|
initRenderGroup(rg, rs->rg_arena, shader, 10000, "manual mesh group"); |
|
|
|
|
|
|
|
|
|
|
|
gs->coord_overlay = addCoordinateOverlay(rs); |
|
|
|
gs->coord_overlay = addCoordinateOverlay(rs); |
|
|
|
|
|
|
|
|
|
|
|
@ -267,11 +299,14 @@ loadScene(GameState* gs, RenderState* rs) |
|
|
|
GameOrbit* go_2 = loadOrbit(gs, rs, body, el2, rg, "sat_02"); |
|
|
|
GameOrbit* go_2 = loadOrbit(gs, rs, body, el2, rg, "sat_02"); |
|
|
|
double v_transfer = orbitGetTransferVelocity(go_2->system, el1); |
|
|
|
double v_transfer = orbitGetTransferVelocity(go_2->system, el1); |
|
|
|
addManeuver(gs, go_2, ImpulseType::PROGRADE, DEG2RAD(45), v_transfer); |
|
|
|
addManeuver(gs, go_2, ImpulseType::PROGRADE, DEG2RAD(45), v_transfer); |
|
|
|
addManeuver(gs, go_2, ImpulseType::CIRCULARIZE_LOWERING, DEG2RAD(0)); |
|
|
|
addManeuver(gs, go_2, ImpulseType::CIRCULARIZE_LOWERING); |
|
|
|
|
|
|
|
|
|
|
|
// NOTE: pre-select an orbit for testing
|
|
|
|
// NOTE: pre-select an orbit for testing
|
|
|
|
selectOrbit(gs, go_2); |
|
|
|
selectOrbit(gs, go_2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// NOTE: add more orbits with maneuvers to try and provoke a failure
|
|
|
|
|
|
|
|
loadRandomOrbits(gs, rs, 1000, body, rg); |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|