Organize simulation systems and balancing profiles

This commit is contained in:
2026-05-08 21:45:43 +02:00
parent 8018ebbabb
commit c46b6664ed
25 changed files with 406 additions and 269 deletions

View File

@@ -34,10 +34,10 @@ public sealed record GridPosition(int X, int Y)
{
public IEnumerable<GridPosition> Neighbors()
{
yield return new(X - Balancing.NeighborDistance, Y);
yield return new(X + Balancing.NeighborDistance, Y);
yield return new(X, Y - Balancing.NeighborDistance);
yield return new(X, Y + Balancing.NeighborDistance);
yield return new(X - Balancing.Current.NeighborDistance, Y);
yield return new(X + Balancing.Current.NeighborDistance, Y);
yield return new(X, Y - Balancing.Current.NeighborDistance);
yield return new(X, Y + Balancing.Current.NeighborDistance);
}
}
@@ -62,7 +62,7 @@ public sealed record HazardState
public int LiquidFuel { get; init; }
public int CoolantPooling { get; init; }
public int ElectricalCharge { get; init; }
public int Stability { get; init; } = Balancing.DefaultHazardStability;
public int Stability { get; init; } = Balancing.Current.DefaultHazardStability;
public bool Fire { get; init; }
}
@@ -72,7 +72,7 @@ public sealed record CellState
public EPipeMedium Pipe { get; init; }
public int Flow { get; init; }
public int Pressure { get; init; }
public int Integrity { get; init; } = Balancing.DefaultCellIntegrity;
public int Integrity { get; init; } = Balancing.Current.DefaultCellIntegrity;
public int LeakRate { get; init; }
public bool PipeOpen { get; init; } = true;
public bool Powered { get; init; }
@@ -85,11 +85,11 @@ public sealed record CellState
public sealed record GlobalState
{
public int Turn { get; init; }
public int ActionsPerTurn { get; init; } = Balancing.DefaultActionsPerTurn;
public int CoreHeat { get; init; } = Balancing.DefaultCoreHeat;
public int FacilityStability { get; init; } = Balancing.DefaultFacilityStability;
public int Power { get; init; } = Balancing.DefaultPower;
public int Cooling { get; init; } = Balancing.DefaultCooling;
public int ActionsPerTurn { get; init; } = Balancing.Current.DefaultActionsPerTurn;
public int CoreHeat { get; init; } = Balancing.Current.DefaultCoreHeat;
public int FacilityStability { get; init; } = Balancing.Current.DefaultFacilityStability;
public int Power { get; init; } = Balancing.Current.DefaultPower;
public int Cooling { get; init; } = Balancing.Current.DefaultCooling;
public bool ReactorActivated { get; init; }
public bool Lost { get; init; }
public string Status { get; init; } = "STABILIZE SYSTEMS";
@@ -101,15 +101,15 @@ public sealed record LevelState
{
public static LevelState Create(string name, int width, int height)
{
if (width < Balancing.MinimumLevelSize || height < Balancing.MinimumLevelSize)
throw new ArgumentOutOfRangeException(nameof(width), $"Levels must be at least {Balancing.MinimumLevelSize}x{Balancing.MinimumLevelSize}.");
if (width < Balancing.Current.MinimumLevelSize || height < Balancing.Current.MinimumLevelSize)
throw new ArgumentOutOfRangeException(nameof(width), $"Levels must be at least {Balancing.Current.MinimumLevelSize}x{Balancing.Current.MinimumLevelSize}.");
var cells = CreateCells(width, height);
for (var y = Balancing.FirstGridCoordinate; y < height; y++)
for (var y = Balancing.Current.FirstGridCoordinate; y < height; y++)
{
for (var x = Balancing.FirstGridCoordinate; x < width; x++)
for (var x = Balancing.Current.FirstGridCoordinate; x < width; x++)
{
if (x == Balancing.FirstGridCoordinate || y == Balancing.FirstGridCoordinate || x == width - Balancing.NeighborDistance || y == height - Balancing.NeighborDistance)
if (x == Balancing.Current.FirstGridCoordinate || y == Balancing.Current.FirstGridCoordinate || x == width - Balancing.Current.NeighborDistance || y == height - Balancing.Current.NeighborDistance)
cells[y * width + x] = cells[y * width + x] with { Kind = ECellKind.Wall };
}
}
@@ -119,7 +119,7 @@ public sealed record LevelState
Width = width,
Height = height,
Cells = cells,
Robot = new(Balancing.DefaultRobotCoordinate, Balancing.DefaultRobotCoordinate)
Robot = new(Balancing.Current.DefaultRobotCoordinate, Balancing.Current.DefaultRobotCoordinate)
};
}
@@ -139,7 +139,7 @@ public sealed record LevelState
public bool InBounds(GridPosition position)
{
return position.X >= Balancing.FirstGridCoordinate && position.Y >= Balancing.FirstGridCoordinate && position.X < Width && position.Y < Height;
return position.X >= Balancing.Current.FirstGridCoordinate && position.Y >= Balancing.Current.FirstGridCoordinate && position.X < Width && position.Y < Height;
}
public int Index(GridPosition position)
@@ -155,14 +155,14 @@ public sealed record LevelState
private static CellState[] CreateCells(int width, int height)
{
return Enumerable.Range(Balancing.FirstGridCoordinate, width * height).Select(_ => new CellState()).ToArray();
return Enumerable.Range(Balancing.Current.FirstGridCoordinate, width * height).Select(_ => new CellState()).ToArray();
}
public string Name { get; init; } = "New Reactor";
public int Width { get; init; } = Balancing.DefaultLevelWidth;
public int Height { get; init; } = Balancing.DefaultLevelHeight;
public CellState[] Cells { get; init; } = CreateCells(Balancing.DefaultLevelWidth, Balancing.DefaultLevelHeight);
public GridPosition Robot { get; init; } = new(Balancing.DefaultRobotCoordinate, Balancing.DefaultRobotCoordinate);
public int Width { get; init; } = Balancing.Current.DefaultLevelWidth;
public int Height { get; init; } = Balancing.Current.DefaultLevelHeight;
public CellState[] Cells { get; init; } = CreateCells(Balancing.Current.DefaultLevelWidth, Balancing.Current.DefaultLevelHeight);
public GridPosition Robot { get; init; } = new(Balancing.Current.DefaultRobotCoordinate, Balancing.Current.DefaultRobotCoordinate);
public GlobalState Global { get; init; } = new();
public IReadOnlyList<Forecast> Forecasts { get; init; } = Array.Empty<Forecast>();
}
@@ -171,6 +171,6 @@ internal static class Rules
{
public static int Clamp(int value)
{
return Math.Clamp(value, Balancing.MinHazardValue, Balancing.MaxHazardValue);
return Math.Clamp(value, Balancing.Current.MinHazardValue, Balancing.Current.MaxHazardValue);
}
}