diff --git a/src/gooey.cpp b/src/gooey.cpp index dd0de06..5126d25 100644 --- a/src/gooey.cpp +++ b/src/gooey.cpp @@ -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)