Browse Source

Gooey: fix logic for selected orbit window

main
cinnaboot 3 years ago
parent
commit
ae53aab0bf
  1. 55
      src/gooey.cpp

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

Loading…
Cancel
Save