Aetheria/Assets/Scripts/Gameplay/AetheriaUnityRenderSettingsBridge.cs
2026-06-27 13:36:40 +01:00

72 lines
3.5 KiB
C#

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
using System.Linq;
using GameCult.Aetheria.State.Verse;
public static class AetheriaUnityRenderSettingsBridge
{
public static AetheriaRuntimeDaemonRenderSettings Build(
GameSettings settings,
float targetSpottedBlinkFrequency,
float targetSpottedBlinkOffset)
{
var emissionCurve = settings.GameplaySettings.TemperatureEmissionCurve;
var bodyIconSizeCurve = settings.IconSize;
var bodyRadiusCurve = settings.PlanetSettings.BodyRadius;
var lightRadiusCurve = settings.PlanetSettings.LightRadius;
var gravityWaveFrequencyCurve = settings.PlanetSettings.WaveFrequency;
return new AetheriaRuntimeDaemonRenderSettings(
new AetheriaRuntimeExponentialCurve(
emissionCurve.Exponent,
emissionCurve.Multiplier,
emissionCurve.Constant),
new AetheriaRuntimeExponentialLerp(
settings.GameplaySettings.LockIndicatorFrequency.Exponent,
settings.GameplaySettings.LockIndicatorFrequency.Minimum,
settings.GameplaySettings.LockIndicatorFrequency.Maximum),
new AetheriaRuntimeExponentialLerp(
settings.GameplaySettings.LockSpinSpeed.Exponent,
settings.GameplaySettings.LockSpinSpeed.Minimum,
settings.GameplaySettings.LockSpinSpeed.Maximum),
settings.GameplaySettings.ConvergenceMinimumDistance,
settings.GameplaySettings.HypothermiaTemperature,
settings.GameplaySettings.HeatstrokeTemperature,
settings.GameplaySettings.SevereHeatstrokeRiskThreshold,
settings.GameplaySettings.TargetDetectionInfoThreshold,
settings.GameplaySettings.LockIndicatorNoiseAmplitude,
settings.HeatstrokePhasingFloor,
settings.HeatstrokePhasingFrequency,
targetSpottedBlinkFrequency,
targetSpottedBlinkOffset,
settings.MinimapZoomLevels?.Select(level => (double)level).ToArray(),
settings.DefaultMinimapZoom,
settings.WormholeDistanceRatio,
settings.DefaultViewDistance,
settings.MinimapIconSize,
settings.MinimapAsteroidSize,
new AetheriaRuntimeExponentialCurve(
bodyIconSizeCurve.Exponent,
bodyIconSizeCurve.Multiplier,
bodyIconSizeCurve.Constant),
settings.MinimapZoneGravityRange,
settings.PlanetSettings.AsteroidVerticalOffset,
settings.PlanetRotationSpeed,
settings.PlanetSettings.ZoneDepthExponent,
settings.PlanetSettings.ZoneDepth + settings.PlanetSettings.ZoneBoundaryFog,
settings.AsteroidMeshCount,
new AetheriaRuntimeExponentialCurve(
bodyRadiusCurve.Exponent,
bodyRadiusCurve.Multiplier,
bodyRadiusCurve.Constant),
new AetheriaRuntimeExponentialCurve(
lightRadiusCurve.Exponent,
lightRadiusCurve.Multiplier,
lightRadiusCurve.Constant),
new AetheriaRuntimeExponentialCurve(
gravityWaveFrequencyCurve.Exponent,
gravityWaveFrequencyCurve.Multiplier,
gravityWaveFrequencyCurve.Constant));
}
}