diff --git a/src/main.cpp b/src/main.cpp index 57b656e..0d28097 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,8 @@ #include // Configuration defaults - edit to change default run mode -#define DEFAULT_CONFIG_FILE "configs/test_simple.toml" +//#define DEFAULT_CONFIG_FILE "configs/test_simple.toml" +#define DEFAULT_CONFIG_FILE "tests/configs/solar_system.toml" struct ProgramArgs { const char* config_file; @@ -64,7 +65,18 @@ void run_gui_simulation(SimulationState* sim) { printf("Speed multiplier: %.1fx\n", speed_multiplier); } +#if 0 + /**** + * Hacks ahead... + */ + int focus_index = 9; + if (sim->body_count >= focus_index) { + Vector3 offset = {0, 100, 100}; + focus_camera(&render_state, &sim->bodies[focus_index], offset); + } +#else update_camera(&render_state); +#endif if (!paused) { int steps = (int)(physics_steps_per_frame * speed_multiplier); diff --git a/src/renderer.cpp b/src/renderer.cpp index 56da12a..6f91b12 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -80,6 +80,12 @@ Vector3 sim_to_render(Vec3 pos, double scale) { }; } +void focus_camera(RenderState* render_state, CelestialBody* body, Vector3& offset) { + Vector3 p = sim_to_render(body->position, render_state->distance_scale); + render_state->camera.position = (Vector3){ p.x, p.y + offset.y, p.z + offset.z}; + render_state->camera.target = p; +} + // Scale a radius for rendering (with minimum visible size) float scale_radius(double radius, double scale) { float scaled = (float)(radius * scale); diff --git a/src/renderer.h b/src/renderer.h index 7519c4f..22d07e8 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -19,6 +19,7 @@ void close_renderer(); // Camera setup and control void setup_camera(RenderState* render_state); void update_camera(RenderState* render_state); +void focus_camera(RenderState* render_state, CelestialBody* body, Vector3& offset); // Rendering functions void render_body(CelestialBody* body, RenderState* render_state);