Browse Source

feat: Add auto-generated maneuver names with edit capability

Added automatic name generation for new maneuvers:
- generate_maneuver_name() creates sensible names (e.g., 'Prograde #1', 'Retrograde @ ν=3.14 #2')
- Names based on burn direction, trigger type, and burn number
- User can still manually edit names if desired
- Validation now allows empty names (for auto-generation)
- Integrates with existing create_maneuver_from_dialog() workflow

Users can create maneuvers faster with auto-generated names, or override with custom names.
main
cinnaboot 5 months ago
parent
commit
2874c5ebea
  1. 32
      src/ui_renderer.cpp
  2. 1
      src/ui_renderer.h

32
src/ui_renderer.cpp

@ -699,14 +699,6 @@ bool validate_maneuver_inputs(SimulationState* sim, UIState* ui_state) {
return false;
}
if (strlen(ui_state->maneuver_dialog.name) == 0) {
snprintf(ui_state->maneuver_dialog.error_message,
sizeof(ui_state->maneuver_dialog.error_message),
"Maneuver name is required");
ui_state->maneuver_dialog.show_error = true;
return false;
}
for (int i = 0; i < sim->maneuver_count; i++) {
if (strcmp(sim->maneuvers[i].name, ui_state->maneuver_dialog.name) == 0) {
if (ui_state->maneuver_dialog.edit_maneuver_index >= 0 &&
@ -778,11 +770,35 @@ bool validate_maneuver_inputs(SimulationState* sim, UIState* ui_state) {
return true;
}
void generate_maneuver_name(SimulationState* sim, UIState* ui_state) {
if (strlen(ui_state->maneuver_dialog.name) > 0) {
return;
}
int burn_num = 0;
for (int i = 0; i < sim->maneuver_count; i++) {
if (sim->maneuvers[i].craft_index == ui_state->maneuver_dialog.craft_index) {
burn_num++;
}
}
const char* direction_name = get_burn_direction_name((BurnDirection)ui_state->maneuver_dialog.direction_active);
if (ui_state->maneuver_dialog.trigger_type_active == 0) {
snprintf(ui_state->maneuver_dialog.name, 64, "%s #%d", direction_name, burn_num);
} else {
snprintf(ui_state->maneuver_dialog.name, 64, "%s @ ν=%.2f #%d",
direction_name, ui_state->maneuver_dialog.trigger_value, burn_num);
}
}
void create_maneuver_from_dialog(SimulationState* sim, UIState* ui_state) {
if (!validate_maneuver_inputs(sim, ui_state)) {
return;
}
generate_maneuver_name(sim, ui_state);
Maneuver maneuver = create_maneuver(
ui_state->maneuver_dialog.name,
ui_state->maneuver_dialog.craft_index,

1
src/ui_renderer.h

@ -61,6 +61,7 @@ void render_maneuver_create_tab(SimulationState* sim, UIState* ui_state, int x,
void update_orbital_preview(SimulationState* sim, UIState* ui_state);
void render_orbital_preview(SimulationState* sim, UIState* ui_state, Rectangle bounds);
bool validate_maneuver_inputs(SimulationState* sim, UIState* ui_state);
void generate_maneuver_name(SimulationState* sim, UIState* ui_state);
void create_maneuver_from_dialog(SimulationState* sim, UIState* ui_state);
void update_maneuver_from_dialog(SimulationState* sim, UIState* ui_state);

Loading…
Cancel
Save