From 8ec3c7847c0bfeba60f5e38bb8c2fb7763ab1dc5 Mon Sep 17 00:00:00 2001 From: Frank Tovar Date: Fri, 8 May 2026 21:29:55 +0200 Subject: [PATCH] Use primary constructor for simulation effects --- .../SimulationEngine.cs | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/ReactorMaintenance.Simulation/SimulationEngine.cs b/src/ReactorMaintenance.Simulation/SimulationEngine.cs index bcf0228..00f9e42 100644 --- a/src/ReactorMaintenance.Simulation/SimulationEngine.cs +++ b/src/ReactorMaintenance.Simulation/SimulationEngine.cs @@ -1,8 +1,8 @@ namespace ReactorMaintenance.Simulation; -public sealed class SimulationEngine +public sealed class SimulationEngine(IEnumerable effects, IEnumerable areaEffects, IEnumerable hazards) { - private const int c_MaxForecastStepCount = 12; + private sealed record ForecastKey(EFailureKind Kind, GridPosition? Position); public SimulationEngine() : this( @@ -12,13 +12,6 @@ public sealed class SimulationEngine { } - public SimulationEngine(IEnumerable effects, IEnumerable areaEffects, IEnumerable hazards) - { - m_Effects = effects.ToArray(); - m_AreaEffects = areaEffects.ToArray(); - m_Hazards = hazards.ToArray(); - } - public LevelState AdvanceTurn(LevelState level) { return AdvanceTurn(level, true); @@ -29,11 +22,11 @@ public sealed class SimulationEngine var forecasts = new List(); var seen = new HashSet(); var forecastLevel = level with { Cells = level.Cells.ToArray(), Forecasts = Array.Empty() }; - if (forecastLevel.Global.Lost) AddHazardForecasts(forecasts, seen, forecastLevel, 0); AddReactorReadyForecast(forecasts, seen, forecastLevel, 0); + if (IsReactorReady(forecastLevel) || forecastLevel.Global.Lost || forecastLevel.Global.ReactorActivated) return forecasts.OrderBy(f => f.Turns).ThenBy(f => f.Message).ToArray(); @@ -148,9 +141,9 @@ public sealed class SimulationEngine return hasReactor && hasStablePower && hasCooling && reactorStable && !level.Global.Lost; } - private readonly IReadOnlyList m_Effects; - private readonly IReadOnlyList m_AreaEffects; - private readonly IReadOnlyList m_Hazards; + private const int c_MaxForecastStepCount = 12; + private readonly IReadOnlyList m_AreaEffects = areaEffects.ToArray(); - private sealed record ForecastKey(EFailureKind Kind, GridPosition? Position); + private readonly IReadOnlyList m_Effects = effects.ToArray(); + private readonly IReadOnlyList m_Hazards = hazards.ToArray(); } \ No newline at end of file