@ -123,22 +123,22 @@ void render_body_list_ui(SimulationState* sim, RenderState* render_state, UIStat
int previous_active = ui_state - > body_list_active ;
int previous_active = ui_state - > body_list_active ;
GuiListView ( list_bounds , list_text , & ui_state - > body_list_scroll , & ui_state - > body_list_active ) ;
GuiListView ( list_bounds , list_text , & ui_state - > body_list_scroll , & ui_state - > body_list_active ) ;
ui_state - > selected_craft_index = - 1 ;
// Check if an item was selected
// Check if an item was selected
if ( ui_state - > body_list_active > = 0 & & ui_state - > body_list_active ! = previous_active ) {
if ( ui_state - > body_list_active > = 0 & & ui_state - > body_list_active ! = previous_active ) {
if ( ui_state - > body_list_active < sim - > body_count ) {
if ( ui_state - > body_list_active < sim - > body_count ) {
// A body was selected
render_state - > selected_body_index = ui_state - > body_list_active ;
render_state - > selected_body_index = ui_state - > body_list_active ;
render_state - > selected_craft_index = - 1 ;
render_state - > camera_target_enabled = true ;
render_state - > camera_target_enabled = true ;
printf ( " Camera follow enabled for body: %s \n " , sim - > bodies [ render_state - > selected_body_index ] . name ) ;
printf ( " Camera follow enabled for body: %s \n " , sim - > bodies [ render_state - > selected_body_index ] . name ) ;
} else {
} else {
// A spacecraft was selected
int craft_index = ui_state - > body_list_active - sim - > body_count ;
int craft_index = ui_state - > body_list_active - sim - > body_count ;
if ( craft_index > = 0 & & craft_index < sim - > craft_count ) {
if ( craft_index > = 0 & & craft_index < sim - > craft_count ) {
render_state - > selected_body_index = - 1 ;
Spacecraft * craft = & sim - > spacecraft [ craft_index ] ;
render_state - > selected_craft_index = craft_index ;
render_state - > selected_body_index = craft - > parent_index ;
ui_state - > selected_craft_index = craft_index ;
render_state - > camera_target_enabled = true ;
render_state - > camera_target_enabled = true ;
printf ( " Camera follow enabled for spacecraft: %s \n " , sim - > spacecraft [ craft_index ] . name ) ;
printf ( " Camera follow enabled for spacecraft: %s \n " , craft - > name ) ;
}
}
}
}
}
}
@ -147,7 +147,7 @@ void render_body_list_ui(SimulationState* sim, RenderState* render_state, UIStat
}
}
// Render body information UI panel
// Render body information UI panel
void render_body_info_ui ( SimulationState * sim , RenderState * render_state ) {
void render_body_info_ui ( SimulationState * sim , RenderState * render_state , UIState * ui_state ) {
// Panel dimensions
// Panel dimensions
int panel_width = 250 ;
int panel_width = 250 ;
int panel_height = 300 ;
int panel_height = 300 ;
@ -155,7 +155,7 @@ void render_body_info_ui(SimulationState* sim, RenderState* render_state) {
int panel_y = 10 ;
int panel_y = 10 ;
if ( ( render_state - > selected_body_index < 0 | | render_state - > selected_body_index > = sim - > body_count ) & &
if ( ( render_state - > selected_body_index < 0 | | render_state - > selected_body_index > = sim - > body_count ) & &
( render _state- > selected_craft_index < 0 | | render _state- > selected_craft_index > = sim - > craft_count ) ) {
( ui _state- > selected_craft_index < 0 | | ui _state- > selected_craft_index > = sim - > craft_count ) ) {
// No body or spacecraft selected - render empty panel
// No body or spacecraft selected - render empty panel
Rectangle panel_bounds = { ( float ) panel_x , ( float ) panel_y , ( float ) panel_width , ( float ) panel_height } ;
Rectangle panel_bounds = { ( float ) panel_x , ( float ) panel_y , ( float ) panel_width , ( float ) panel_height } ;
GuiWindowBox ( panel_bounds , " Info " ) ;
GuiWindowBox ( panel_bounds , " Info " ) ;
@ -248,8 +248,8 @@ void render_body_info_ui(SimulationState* sim, RenderState* render_state) {
}
}
// Check if a spacecraft is selected
// Check if a spacecraft is selected
if ( render _state- > selected_craft_index > = 0 & & render _state- > selected_craft_index < sim - > craft_count ) {
if ( ui _state- > selected_craft_index > = 0 & & ui _state- > selected_craft_index < sim - > craft_count ) {
Spacecraft * craft = & sim - > spacecraft [ render _state- > selected_craft_index ] ;
Spacecraft * craft = & sim - > spacecraft [ ui _state- > selected_craft_index ] ;
// Draw window (no close button - panels always shown)
// Draw window (no close button - panels always shown)
GuiWindowBox ( panel_bounds , craft - > name ) ;
GuiWindowBox ( panel_bounds , craft - > name ) ;
@ -289,7 +289,7 @@ void render_body_info_ui(SimulationState* sim, RenderState* render_state) {
int pending_maneuvers = 0 ;
int pending_maneuvers = 0 ;
int executed_maneuvers = 0 ;
int executed_maneuvers = 0 ;
for ( int i = 0 ; i < sim - > maneuver_count ; i + + ) {
for ( int i = 0 ; i < sim - > maneuver_count ; i + + ) {
if ( sim - > maneuvers [ i ] . craft_index = = render _state- > selected_craft_index ) {
if ( sim - > maneuvers [ i ] . craft_index = = ui _state- > selected_craft_index ) {
if ( sim - > maneuvers [ i ] . executed ) {
if ( sim - > maneuvers [ i ] . executed ) {
executed_maneuvers + + ;
executed_maneuvers + + ;
} else {
} else {
@ -320,8 +320,8 @@ void render_body_info_ui(SimulationState* sim, RenderState* render_state) {
}
}
// Render maneuver list UI panel
// Render maneuver list UI panel
void render_maneuver_list_ui ( SimulationState * sim , RenderState * render_state ) {
void render_maneuver_list_ui ( SimulationState * sim , RenderState * render_state , UIState * ui_state ) {
if ( render _state- > selected_craft_index < 0 | | render _state- > selected_craft_index > = sim - > craft_count ) {
if ( ui _state- > selected_craft_index < 0 | | ui _state- > selected_craft_index > = sim - > craft_count ) {
return ; // No spacecraft selected
return ; // No spacecraft selected
}
}
@ -332,7 +332,7 @@ void render_maneuver_list_ui(SimulationState* sim, RenderState* render_state) {
Rectangle panel_bounds = { ( float ) panel_x , ( float ) panel_y , ( float ) panel_width , ( float ) panel_height } ;
Rectangle panel_bounds = { ( float ) panel_x , ( float ) panel_y , ( float ) panel_width , ( float ) panel_height } ;
Spacecraft * craft = & sim - > spacecraft [ render _state- > selected_craft_index ] ;
Spacecraft * craft = & sim - > spacecraft [ ui _state- > selected_craft_index ] ;
// Create title with spacecraft name
// Create title with spacecraft name
char title [ 128 ] ;
char title [ 128 ] ;
@ -344,7 +344,7 @@ void render_maneuver_list_ui(SimulationState* sim, RenderState* render_state) {
// Count maneuvers for this spacecraft
// Count maneuvers for this spacecraft
int craft_maneuver_count = 0 ;
int craft_maneuver_count = 0 ;
for ( int i = 0 ; i < sim - > maneuver_count ; i + + ) {
for ( int i = 0 ; i < sim - > maneuver_count ; i + + ) {
if ( sim - > maneuvers [ i ] . craft_index = = render _state- > selected_craft_index ) {
if ( sim - > maneuvers [ i ] . craft_index = = ui _state- > selected_craft_index ) {
craft_maneuver_count + + ;
craft_maneuver_count + + ;
}
}
}
}
@ -370,7 +370,7 @@ void render_maneuver_list_ui(SimulationState* sim, RenderState* render_state) {
int offset = 0 ;
int offset = 0 ;
for ( int i = 0 ; i < sim - > maneuver_count ; i + + ) {
for ( int i = 0 ; i < sim - > maneuver_count ; i + + ) {
if ( sim - > maneuvers [ i ] . craft_index = = render _state- > selected_craft_index ) {
if ( sim - > maneuvers [ i ] . craft_index = = ui _state- > selected_craft_index ) {
if ( offset > 0 ) {
if ( offset > 0 ) {
offset + = snprintf ( maneuver_list_text + offset , buffer_size - offset , " ; " ) ;
offset + = snprintf ( maneuver_list_text + offset , buffer_size - offset , " ; " ) ;
}
}
@ -398,7 +398,7 @@ void render_maneuver_list_ui(SimulationState* sim, RenderState* render_state) {
details_text [ 0 ] = ' \0 ' ;
details_text [ 0 ] = ' \0 ' ;
for ( int i = 0 ; i < sim - > maneuver_count ; i + + ) {
for ( int i = 0 ; i < sim - > maneuver_count ; i + + ) {
if ( sim - > maneuvers [ i ] . craft_index = = render _state- > selected_craft_index ) {
if ( sim - > maneuvers [ i ] . craft_index = = ui _state- > selected_craft_index ) {
if ( sim - > maneuvers [ i ] . executed ) {
if ( sim - > maneuvers [ i ] . executed ) {
snprintf ( details_text , sizeof ( details_text ) ,
snprintf ( details_text , sizeof ( details_text ) ,
" Last executed: \n %s \n Δv: %.1f m/s \n Time: %.1f s " ,
" Last executed: \n %s \n Δv: %.1f m/s \n Time: %.1f s " ,