aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Core/SettingsManager.cpp22
-rw-r--r--src/Core/SettingsManager.h10
-rw-r--r--src/States/SimulationState.cpp22
3 files changed, 53 insertions, 1 deletions
diff --git a/src/Core/SettingsManager.cpp b/src/Core/SettingsManager.cpp
index af163e7..9543787 100644
--- a/src/Core/SettingsManager.cpp
+++ b/src/Core/SettingsManager.cpp
@@ -51,12 +51,22 @@ namespace Donut
s_Settings.simulation.maxStepsStatic = toml::find_or(sim, "max_steps_static", 15000);
s_Settings.simulation.earlyExitDistance = toml::find_or(sim, "early_exit_distance", 5e12f);
s_Settings.simulation.gravityEnabled = toml::find_or(sim, "gravity_enabled", true);
+ s_Settings.simulation.diskThickness = toml::find_or(sim, "disk_thickness", 0.1f);
+ s_Settings.simulation.diskDensity = toml::find_or(sim, "disk_density", 0.1f);
+ s_Settings.simulation.rotationSpeed = toml::find_or(sim, "rotation_speed", 1.0f);
+ s_Settings.simulation.blurStrength = toml::find_or(sim, "blur_strength", 2.0f);
+ s_Settings.simulation.glowIntensity = toml::find_or(sim, "glow_intensity", 0.1f);
s_Settings.simulation.targetFPS = std::max(30, std::min(120, s_Settings.simulation.targetFPS));
s_Settings.simulation.computeHeight = std::max(64, std::min(2048, s_Settings.simulation.computeHeight));
s_Settings.simulation.maxStepsMoving = std::max(1000, std::min(60000, s_Settings.simulation.maxStepsMoving));
s_Settings.simulation.maxStepsStatic = std::max(1000, std::min(30000, s_Settings.simulation.maxStepsStatic));
s_Settings.simulation.earlyExitDistance = std::max(1e11f, std::min(1e13f, s_Settings.simulation.earlyExitDistance));
+ s_Settings.simulation.diskThickness = std::max(0.01f, std::min(5.0f, s_Settings.simulation.diskThickness));
+ s_Settings.simulation.diskDensity = std::max(0.01f, std::min(5.0f, s_Settings.simulation.diskDensity));
+ s_Settings.simulation.rotationSpeed = std::max(0.0f, std::min(5.0f, s_Settings.simulation.rotationSpeed));
+ s_Settings.simulation.blurStrength = std::max(0.1f, std::min(10.0f, s_Settings.simulation.blurStrength));
+ s_Settings.simulation.glowIntensity = std::max(0.01f, std::min(5.0f, s_Settings.simulation.glowIntensity));
}
if (config.contains("graphics"))
@@ -111,7 +121,12 @@ namespace Donut
{"max_steps_moving", s_Settings.simulation.maxStepsMoving },
{"max_steps_static", s_Settings.simulation.maxStepsStatic },
{"early_exit_distance", s_Settings.simulation.earlyExitDistance},
- {"gravity_enabled", s_Settings.simulation.gravityEnabled }
+ {"gravity_enabled", s_Settings.simulation.gravityEnabled },
+ {"disk_thickness", s_Settings.simulation.diskThickness },
+ {"disk_density", s_Settings.simulation.diskDensity },
+ {"rotation_speed", s_Settings.simulation.rotationSpeed },
+ {"blur_strength", s_Settings.simulation.blurStrength },
+ {"glow_intensity", s_Settings.simulation.glowIntensity }
};
toml::value graphics = toml::table
@@ -168,6 +183,11 @@ namespace Donut
s_Settings.simulation.maxStepsStatic = 15000;
s_Settings.simulation.earlyExitDistance = 5e12f;
s_Settings.simulation.gravityEnabled = true;
+ s_Settings.simulation.diskThickness = 0.1f;
+ s_Settings.simulation.diskDensity = 0.1f;
+ s_Settings.simulation.rotationSpeed = 1.0f;
+ s_Settings.simulation.blurStrength = 2.0f;
+ s_Settings.simulation.glowIntensity = 0.1f;
s_Settings.graphics.renderAPI = "OpenGL";
s_Settings.graphics.vSyncEnabled = true;
diff --git a/src/Core/SettingsManager.h b/src/Core/SettingsManager.h
index bea1162..de0774b 100644
--- a/src/Core/SettingsManager.h
+++ b/src/Core/SettingsManager.h
@@ -13,6 +13,11 @@ namespace Donut
int maxStepsStatic = 15000;
float earlyExitDistance = 5e12f;
bool gravityEnabled = true;
+ float diskThickness = 0.1f;
+ float diskDensity = 0.1f;
+ float rotationSpeed = 1.0f;
+ float blurStrength = 2.0f;
+ float glowIntensity = 0.1f;
};
struct GraphicsSettings
@@ -53,6 +58,11 @@ namespace Donut
static int GetMaxStepsStatic() { return s_Settings.simulation.maxStepsStatic; }
static float GetEarlyExitDistance() { return s_Settings.simulation.earlyExitDistance; }
static bool GetGravityEnabled() { return s_Settings.simulation.gravityEnabled; }
+ static float GetDiskThickness() { return s_Settings.simulation.diskThickness; }
+ static float GetDiskDensity() { return s_Settings.simulation.diskDensity; }
+ static float GetRotationSpeed() { return s_Settings.simulation.rotationSpeed; }
+ static float GetBlurStrength() { return s_Settings.simulation.blurStrength; }
+ static float GetGlowIntensity() { return s_Settings.simulation.glowIntensity; }
static std::string GetRenderAPI() { return s_Settings.graphics.renderAPI; }
static bool GetVSyncEnabled() { return s_Settings.graphics.vSyncEnabled; }
static bool GetShowFPS() { return s_Settings.graphics.showFPS; }
diff --git a/src/States/SimulationState.cpp b/src/States/SimulationState.cpp
index 2a79b3c..4d388fd 100644
--- a/src/States/SimulationState.cpp
+++ b/src/States/SimulationState.cpp
@@ -27,6 +27,13 @@ namespace Donut
engine.SetEarlyExitDistance(settings.simulation.earlyExitDistance);
engine.GetGravity() = settings.simulation.gravityEnabled;
+ // Load accretion disk settings
+ engine.SetDiskThickness(settings.simulation.diskThickness);
+ engine.SetDiskDensity(settings.simulation.diskDensity);
+ engine.SetRotationSpeed(settings.simulation.rotationSpeed);
+ engine.SetBlurStrength(settings.simulation.blurStrength);
+ engine.SetGlowIntensity(settings.simulation.glowIntensity);
+
engine.UpdateComputeDimensions();
m_Initialized = true;
}
@@ -227,6 +234,9 @@ namespace Donut
if (ImGui::SliderFloat("Cloud Thickness", &diskThickness, 0.1f, 2.0f, "%.2f"))
{
engine.SetDiskThickness(diskThickness);
+ SimulationSettings settings = SettingsManager::GetSettingsConst().simulation;
+ settings.diskThickness = diskThickness;
+ SettingsManager::SetSimulationSettings(settings);
}
ImGui::TextDisabled("Thickness relative to Schwarzschild radius");
@@ -234,6 +244,9 @@ namespace Donut
if (ImGui::SliderFloat("Cloud Density", &diskDensity, 0.1f, 3.0f, "%.2f"))
{
engine.SetDiskDensity(diskDensity);
+ SimulationSettings settings = SettingsManager::GetSettingsConst().simulation;
+ settings.diskDensity = diskDensity;
+ SettingsManager::SetSimulationSettings(settings);
}
ImGui::TextDisabled("Overall density multiplier");
@@ -241,6 +254,9 @@ namespace Donut
if (ImGui::SliderFloat("Rotation Speed", &rotationSpeed, 0.0f, 3.0f, "%.2f"))
{
engine.SetRotationSpeed(rotationSpeed);
+ SimulationSettings settings = SettingsManager::GetSettingsConst().simulation;
+ settings.rotationSpeed = rotationSpeed;
+ SettingsManager::SetSimulationSettings(settings);
}
ImGui::TextDisabled("Rotation speed multiplier (0 = no rotation)");
@@ -248,6 +264,9 @@ namespace Donut
if (ImGui::SliderFloat("Blur Strength", &blurStrength, 0.5f, 5.0f, "%.2f"))
{
engine.SetBlurStrength(blurStrength);
+ SimulationSettings settings = SettingsManager::GetSettingsConst().simulation;
+ settings.blurStrength = blurStrength;
+ SettingsManager::SetSimulationSettings(settings);
}
ImGui::TextDisabled("Blur radius for glow effect");
@@ -255,6 +274,9 @@ namespace Donut
if (ImGui::SliderFloat("Glow Intensity", &glowIntensity, 0.1f, 3.0f, "%.2f"))
{
engine.SetGlowIntensity(glowIntensity);
+ SimulationSettings settings = SettingsManager::GetSettingsConst().simulation;
+ settings.glowIntensity = glowIntensity;
+ SettingsManager::SetSimulationSettings(settings);
}
ImGui::TextDisabled("Intensity of the glow effect");