|
|
|
|
@ -19,7 +19,7 @@ const int H_FLAGS = ImGuiTreeNodeFlags_DefaultOpen;
|
|
|
|
|
|
|
|
|
|
void drawSimulationWindow(bool& running, u64 sim_time_ms, float& sim_speed); |
|
|
|
|
void drawMemoryWindow(MemoryArena* game_arena, RenderState* rs); |
|
|
|
|
void drawOrbitWindow(GameState* gs); |
|
|
|
|
void drawOrbitSelectionWindow(GameState* gs); |
|
|
|
|
void drawEllipseParameters(EllipseParameters& ep); |
|
|
|
|
void drawGravitationalBody(GravBody& body); |
|
|
|
|
void drawOrbitalElements(OrbitalElements& el); |
|
|
|
|
@ -79,21 +79,23 @@ gooDraw(SDL_Window* window, GameState* gs, RenderState* rs)
|
|
|
|
|
drawMemoryWindow(gs->arena, rs); |
|
|
|
|
Separator(); |
|
|
|
|
|
|
|
|
|
// FIXME: split up orbit window into function calls here
|
|
|
|
|
drawOrbitWindow(gs); |
|
|
|
|
drawOrbitSelectionWindow(gs); |
|
|
|
|
GameOrbit* orbit = getSelectedOrbit(gs); |
|
|
|
|
|
|
|
|
|
if (orbit) { |
|
|
|
|
TwoBodySystem& sys = orbit->system; |
|
|
|
|
BeginChild("orbit details", ImVec2(G_WIDTH - 20, 450), true); |
|
|
|
|
drawSystemWindow(sys); |
|
|
|
|
Separator(); |
|
|
|
|
drawSatelliteWindow(sys.sat); |
|
|
|
|
Separator(); |
|
|
|
|
drawOrbitalElements(sys.elements); |
|
|
|
|
EndChild(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BeginChild("impulsive maneuver", ImVec2(G_WIDTH - 20, 125), true); |
|
|
|
|
drawManeuverWindow(gs); |
|
|
|
|
EndChild(); |
|
|
|
|
#if 0 |
|
|
|
|
assert(gs->orbits[0].in_use); |
|
|
|
|
TwoBodySystem& sys = gs->orbits[0].system; |
|
|
|
|
drawSystemWindow(sys); |
|
|
|
|
drawSatelliteWindow(sys.sat); |
|
|
|
|
drawGravitationalBody(sys.body); |
|
|
|
|
drawOrbitalElements(sys.elements); |
|
|
|
|
drawEllipseParameters(sys.ep); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
End(); |
|
|
|
|
Render(); |
|
|
|
|
@ -154,47 +156,26 @@ void drawMemoryWindow(MemoryArena* game_arena, RenderState* rs)
|
|
|
|
|
EndChild(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void drawOrbitWindow(GameState* gs) |
|
|
|
|
void drawOrbitSelectionWindow(GameState* gs) |
|
|
|
|
{ |
|
|
|
|
Text("Orbit Selection"); |
|
|
|
|
|
|
|
|
|
BeginChild("orbit selection", ImVec2(G_WIDTH - 20, 55), true); |
|
|
|
|
static u32 selected = UINT_MAX; |
|
|
|
|
|
|
|
|
|
for (u32 i = 0; i < gs->num_orbits; i++) { |
|
|
|
|
GameOrbit& orbit = gs->orbits[i]; |
|
|
|
|
|
|
|
|
|
if (orbit.in_use) { |
|
|
|
|
static const u32 label_len = 128; |
|
|
|
|
char label[label_len]; |
|
|
|
|
const u32 label_len = 32; |
|
|
|
|
static char label[label_len]; |
|
|
|
|
snprintf(label, label_len, "Orbit %d", i); |
|
|
|
|
|
|
|
|
|
if (Selectable(label, selected == i)) { |
|
|
|
|
selected = i; |
|
|
|
|
if (Selectable(label, orbit.selected)) |
|
|
|
|
selectOrbit(gs, &orbit); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
EndChild(); |
|
|
|
|
|
|
|
|
|
if (selected < gs->num_orbits |
|
|
|
|
&& gs->orbits[selected].in_use) |
|
|
|
|
{ |
|
|
|
|
TwoBodySystem& sys = gs->orbits[selected].system; |
|
|
|
|
BeginChild("orbit details", ImVec2(G_WIDTH - 20, 450), true); |
|
|
|
|
Text("Selected Orbit#: %d", selected); |
|
|
|
|
//Text("Orbital Period: %.2fs", sys.orbital_period);
|
|
|
|
|
drawSystemWindow(sys); |
|
|
|
|
Separator(); |
|
|
|
|
//drawGravitationalBody(sys.body);
|
|
|
|
|
//Separator();
|
|
|
|
|
drawSatelliteWindow(sys.sat); |
|
|
|
|
Separator(); |
|
|
|
|
drawOrbitalElements(sys.elements); |
|
|
|
|
EndChild(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void drawEllipseParameters(EllipseParameters& ep) |
|
|
|
|
|