Move HUD thermal risk into runtime render settings

This commit is contained in:
Meta Vens 2026-06-21 23:17:00 +01:00
commit 4464f5cdce
4 changed files with 44 additions and 3 deletions

View file

@ -1818,6 +1818,9 @@ static void RequireDaemonRenderQueryAuthority(string root)
"public readonly struct AetheriaRuntimeDaemonRenderSettings",
"public readonly struct AetheriaRuntimeExponentialCurve",
"public double ConvergenceMinimumDistance { get; }",
"public double HypothermiaTemperature { get; }",
"public double HeatstrokeTemperature { get; }",
"public double NormalizeThermalRisk(double temperature)",
"public AetheriaRuntimeExponentialCurve TemperatureEmissionCurve { get; }",
"public static AetheriaRuntimeGravityInfluenceBrush[] QueryGravityInfluences(",
"AetheriaRuntimeZoneSnapshotCommit? zone",
@ -2149,6 +2152,25 @@ static void RequireDaemonRenderQueryAuthority(string root)
"EntityInstance no longer resolves convergence from daemon target projection: " +
string.Join(", ", missingEntityInstanceSymbols));
}
var schematicDisplayPath = Path.Combine(root, "Assets", "Scripts", "UI", "HUD", "SchematicDisplay.cs");
var schematicDisplay = File.Exists(schematicDisplayPath)
? File.ReadAllText(schematicDisplayPath)
: throw new InvalidOperationException("Cannot verify HUD thermal presentation authority; SchematicDisplay.cs is missing.");
if (schematicDisplay.Contains("Settings.GameplaySettings.HypothermiaTemperature", StringComparison.Ordinal) ||
schematicDisplay.Contains("Settings.GameplaySettings.HeatstrokeTemperature", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"SchematicDisplay must normalize cockpit thermal risk through shared daemon render settings instead of Unity GameSettings.");
}
if (!schematicDisplay.Contains("ZoneRenderer.RenderSettings.NormalizeThermalRisk(", StringComparison.Ordinal) ||
!actionGameManager.Contains("Settings.GameplaySettings.HypothermiaTemperature", StringComparison.Ordinal) ||
!actionGameManager.Contains("Settings.GameplaySettings.HeatstrokeTemperature", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"HUD thermal presentation no longer flows through the shared daemon render settings bridge.");
}
}
static void RequireTypedZoneConstructionKeys(string root)

View file

@ -569,7 +569,9 @@ public class ActionGameManager : MonoBehaviour
emissionCurve.Exponent,
emissionCurve.Multiplier,
emissionCurve.Constant),
Settings.GameplaySettings.ConvergenceMinimumDistance);
Settings.GameplaySettings.ConvergenceMinimumDistance,
Settings.GameplaySettings.HypothermiaTemperature,
Settings.GameplaySettings.HeatstrokeTemperature);
}
private readonly (float2 direction, string name)[] _directions = {

View file

@ -193,7 +193,9 @@ public class SchematicDisplay : MonoBehaviour
HeatstrokeMeterFill.anchorMax = new Vector2(_entity.Heatstroke, 1);
HypothermiaMeterFill.anchorMax = new Vector2(_entity.Hypothermia, 1);
HeatstrokeLimitFill.anchorMax = new Vector2(unlerp(Settings.GameplaySettings.HypothermiaTemperature, Settings.GameplaySettings.HeatstrokeTemperature, _cockpit.Item.Temperature), 1);
HeatstrokeLimitFill.anchorMax = new Vector2(
(float)ActionGameManager.Instance.ZoneRenderer.RenderSettings.NormalizeThermalRisk(_cockpit.Item.Temperature),
1);
}
SensorCooldownFill.anchorMax = new Vector2(_entity.Sensor?.Cooldown ?? 0, 1);

View file

@ -51,14 +51,29 @@ namespace GameCult.Aetheria.State.Verse
{
public AetheriaRuntimeDaemonRenderSettings(
AetheriaRuntimeExponentialCurve temperatureEmissionCurve,
double convergenceMinimumDistance)
double convergenceMinimumDistance,
double hypothermiaTemperature,
double heatstrokeTemperature)
{
TemperatureEmissionCurve = temperatureEmissionCurve;
ConvergenceMinimumDistance = convergenceMinimumDistance;
HypothermiaTemperature = hypothermiaTemperature;
HeatstrokeTemperature = heatstrokeTemperature;
}
public AetheriaRuntimeExponentialCurve TemperatureEmissionCurve { get; }
public double ConvergenceMinimumDistance { get; }
public double HypothermiaTemperature { get; }
public double HeatstrokeTemperature { get; }
public double NormalizeThermalRisk(double temperature)
{
var range = HeatstrokeTemperature - HypothermiaTemperature;
if (range <= 0)
return temperature >= HeatstrokeTemperature ? 1.0 : 0.0;
return Math.Max(0.0, Math.Min(1.0, (temperature - HypothermiaTemperature) / range));
}
}
public readonly struct AetheriaRuntimeGravityInfluenceBrush