Use primary constructor for simulation effects

This commit is contained in:
2026-05-08 21:29:55 +02:00
parent 1587395174
commit 8ec3c7847c

View File

@@ -1,8 +1,8 @@
namespace ReactorMaintenance.Simulation;
public sealed class SimulationEngine
public sealed class SimulationEngine(IEnumerable<ISimulationEffect> effects, IEnumerable<IAreaSimulationEffect> areaEffects, IEnumerable<Hazard> 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<ISimulationEffect> effects, IEnumerable<IAreaSimulationEffect> areaEffects, IEnumerable<Hazard> 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<Forecast>();
var seen = new HashSet<ForecastKey>();
var forecastLevel = level with { Cells = level.Cells.ToArray(), Forecasts = Array.Empty<Forecast>() };
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<ISimulationEffect> m_Effects;
private readonly IReadOnlyList<IAreaSimulationEffect> m_AreaEffects;
private readonly IReadOnlyList<Hazard> m_Hazards;
private const int c_MaxForecastStepCount = 12;
private readonly IReadOnlyList<IAreaSimulationEffect> m_AreaEffects = areaEffects.ToArray();
private sealed record ForecastKey(EFailureKind Kind, GridPosition? Position);
private readonly IReadOnlyList<ISimulationEffect> m_Effects = effects.ToArray();
private readonly IReadOnlyList<Hazard> m_Hazards = hazards.ToArray();
}