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 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)

Loading…
Cancel
Save