From d22c4a7528d174d40a539aa0614e30e150bb37bb Mon Sep 17 00:00:00 2001 From: Frank Tovar Date: Sun, 10 May 2026 18:09:43 +0200 Subject: [PATCH] Update rewrite docs and cleanup --- TASKS.md | 9 ++- docs/design.md | 67 +++++++------------ .../Balancing.cs | 4 +- .../Difficulties/NormalBalancing.cs | 7 +- .../GridPositionExtensions.cs | 4 +- .../JunctionFlow.cs | 2 +- .../JunctionFlowAnalyzer.cs | 2 +- .../JunctionRatioPreset.cs | 4 +- .../LevelEditor.cs | 4 +- .../LevelStateExtensions.cs | 4 +- .../LevelStateFactory.cs | 4 +- .../Models/DoorState.cs | 4 +- .../Models/EBand.cs | 4 +- .../Models/ECarrierType.cs | 4 +- .../Models/ECellTerrain.cs | 4 +- .../Models/EConsumerServiceState.cs | 4 +- .../Models/EDoorState.cs | 4 +- .../Models/EForecastKind.cs | 4 +- .../Models/ELevelState.cs | 4 +- .../Models/ENetworkValueKind.cs | 4 +- .../Models/EPropSwitchState.cs | 4 +- .../Models/EPropType.cs | 4 +- .../Models/ERemedyType.cs | 4 +- .../Models/ERuleEffectKind.cs | 4 +- .../Models/ERuleEventPhase.cs | 4 +- .../Models/ERulePredicateKind.cs | 4 +- .../Models/ESurfaceInteractionVerb.cs | 4 +- .../Models/ESurfaceQuantity.cs | 4 +- .../Models/EUndergroundState.cs | 4 +- .../Models/Forecast.cs | 4 +- .../Models/GlobalState.cs | 4 +- .../Models/GridPosition.cs | 4 +- .../Models/LeakState.cs | 4 +- .../Models/LevelState.cs | 4 +- .../Models/PropState.cs | 4 +- .../Models/ReactorBinding.cs | 4 +- .../Models/RobotState.cs | 4 +- .../Models/RuleEffect.cs | 4 +- .../Models/RuleEventState.cs | 4 +- .../Models/RulePredicate.cs | 4 +- .../Models/SurfaceState.cs | 4 +- .../Models/UndergroundCell.cs | 4 +- .../Models/ValidationIssue.cs | 4 +- .../Models/ValidationReport.cs | 4 +- .../RobotStateExtensions.cs | 4 +- .../SimulationEngine.cs | 4 +- .../SurfaceInteractionEffect.cs | 4 +- .../SurfaceStateExtensions.cs | 4 +- .../Systems/SimulationCoreSystem.cs | 5 +- .../MainWindow.xaml.cs | 4 +- .../SimulationEngineTests.cs | 2 +- 51 files changed, 129 insertions(+), 141 deletions(-) diff --git a/TASKS.md b/TASKS.md index 66a21c5..f22430f 100644 --- a/TASKS.md +++ b/TASKS.md @@ -46,6 +46,13 @@ - Added tests for network-band rules, reactor-ready rules, inventory rules, removal effects, electricity leak access, and invalid rule targets. - Verified `dotnet test tests/ReactorMaintenance.Simulation.Tests/ReactorMaintenance.Simulation.Tests.csproj` passes after the rule slice: 21 passed. - Ran `jb cleanupcode --build=False ...` and `python D:\Code\crlf.py ...` for touched C# files after the rule slice. +- Split serializable simulation records and enums from the monolithic `Models.cs` file into individual files under `Models`. +- Moved level creation, grid mutation helpers, surface clamping, grid geometry, and inventory operations out of serializable model records. +- Replaced separate T-junction and cross-junction props/tools with one topology-inferred `Junction` prop and one editor tool. +- Moved junction ratio presets into balancing data. +- Replaced hardcoded `EPairEffect` variants with parameterized surface interaction verbs and balance-owned magnitudes. +- Introduced a small public `SimulationEngine` facade over an internal simulation system implementation. +- Updated design documentation for generic junctions and parameterized surface interactions. ## Current Work @@ -53,7 +60,7 @@ ## Future Work -1. Expand simulation fidelity where the first slice is intentionally simplified: complete pair table coverage and stronger forecast proof cases. +1. Continue splitting the internal simulation system into smaller action, network, consumer, leak, surface interaction, robot safety, reactor, rule, and forecast systems. 2. Add advanced editor workflows for explicit reactor binding selection, explicit door edge selection, electricity wall leak face selection, and rule event authoring. 3. Verify and polish the Win2D app on Windows where the XAML compiler can run. 4. Update README and any affected docs to reflect the new schema, .NET target, editor controls, and deterministic defaults. diff --git a/docs/design.md b/docs/design.md index 4acf60a..663fc68 100644 --- a/docs/design.md +++ b/docs/design.md @@ -1,4 +1,4 @@ -# Reactor Maintenance Design +# Reactor Maintenance Design ## Concept @@ -114,8 +114,7 @@ Surface prop categories: - flow prop - consumer prop -- T-junction prop -- cross-junction prop +- junction prop - door prop - all-seeing-eye terminal prop - remedy supply prop @@ -155,24 +154,9 @@ The level is invalid if any binding is missing, out of bounds, or points to the A junction prop must be on a floor cell whose coordinate has exactly one underground carrier. That carrier is the regulated network. -T-junction modes: +The engine infers incoming and outgoing branch directions from valid network topology and enabled source paths. A valid junction has one incoming branch and either two or three outgoing branches. Ambiguous junction flow is invalid. Ratio numbers are balance-defined weights that divide carrier amount and pressure or voltage. A zero-weight branch receives no intentional outflow. -- `0/4` -- `1/3` -- `2/2` -- `3/1` -- `4/0` - -Cross-junction modes: - -- `0/3/3` -- `3/0/3` -- `3/3/0` -- `2/2/2` - -The engine infers incoming and outgoing branch directions from valid network topology and enabled source paths. Ambiguous junction flow is invalid. Ratio numbers are weights that divide carrier amount and pressure or voltage by balance-defined math. A zero-weight branch receives no intentional outflow. - -The gameplay UI exposes ratio modes. +The gameplay UI exposes a single junction tool and cycles through balance-defined ratio presets for the inferred outgoing branch count. ### Doors @@ -284,33 +268,28 @@ Balance thresholds project numeric values into safe, caution, and critical bands The pair table maps projected bands to deterministic effects: - `Hold`: no direct change. -- `FuelFlow`: equalize leaked fuel. -- `CoolFlow`: equalize leaked coolant. -- `ChargeFlow`: equalize leaked electricity. -- `HeatFlow`: transfer heat. -- `HeatFlow2`: stronger heat transfer. -- `Warm1`: small heat increase from fuel exposure. -- `Warm2`: larger heat increase from fuel exposure. -- `Quench1`: small heat reduction from coolant exposure. -- `Quench2`: larger heat reduction from coolant exposure. -- `Short1`: electricity and coolant interaction causing heat and discharge. -- `Short2`: stronger short. -- `Ignite1`: fuel interaction with electricity or high heat. -- `Ignite2`: stronger ignition. +The pair table maps projected bands to parameterized verbs: + +- `Hold`: no direct change. +- `Flow(amount)`: equalize a surface quantity by a balance-defined transfer amount. +- `Warm(amount)`: increase heat by a balance-defined amount. +- `Quench(amount)`: reduce heat by a balance-defined amount. +- `Short(heat, discharge)`: add heat and discharge electricity by balance-defined amounts. +- `Ignite(heat, fuel)`: add heat and consume fuel by balance-defined amounts. | Row\Col | FuelSafe | FuelCaution | FuelCritical | CoolantSafe | CoolantCaution | CoolantCritical | ElectricitySafe | ElectricityCaution | ElectricityCritical | HeatSafe | HeatCaution | HeatCritical | | ------- | -------- | ----------- | ------------ | ----------- | -------------- | --------------- | --------------- | ------------------ | ------------------- | -------- | ----------- | ------------ | -| FuelSafe | Hold | FuelFlow | FuelFlow | Hold | Hold | Hold | Hold | Warm1 | Warm2 | Hold | Warm1 | Warm2 | -| FuelCaution | | Hold | FuelFlow | Hold | Hold | Hold | Warm1 | Ignite1 | Ignite2 | Warm1 | Ignite1 | Ignite2 | -| FuelCritical | | | Hold | Hold | Hold | Hold | Warm2 | Ignite2 | Ignite2 | Warm2 | Ignite2 | Ignite2 | -| CoolantSafe | | | | Hold | CoolFlow | CoolFlow | Hold | Short1 | Short2 | Hold | Quench1 | Quench1 | -| CoolantCaution | | | | | Hold | CoolFlow | Short1 | Short1 | Short2 | Hold | Quench1 | Quench2 | -| CoolantCritical | | | | | | Hold | Short2 | Short2 | Short2 | Hold | Quench2 | Quench2 | -| ElectricitySafe | | | | | | | Hold | ChargeFlow | ChargeFlow | Hold | Hold | Hold | -| ElectricityCaution | | | | | | | | Hold | ChargeFlow | Hold | Hold | Hold | +| FuelSafe | Hold | Flow | Flow | Hold | Hold | Hold | Hold | Warm | Ignite | Hold | Warm | Ignite | +| FuelCaution | | Hold | Flow | Hold | Hold | Hold | Warm | Ignite | Ignite | Warm | Ignite | Ignite | +| FuelCritical | | | Hold | Hold | Hold | Hold | Ignite | Ignite | Ignite | Ignite | Ignite | Ignite | +| CoolantSafe | | | | Hold | Flow | Flow | Hold | Short | Short | Hold | Quench | Quench | +| CoolantCaution | | | | | Hold | Flow | Short | Short | Short | Hold | Quench | Quench | +| CoolantCritical | | | | | | Hold | Short | Short | Short | Hold | Quench | Quench | +| ElectricitySafe | | | | | | | Hold | Flow | Flow | Hold | Hold | Hold | +| ElectricityCaution | | | | | | | | Hold | Flow | Hold | Hold | Hold | | ElectricityCritical | | | | | | | | | Hold | Hold | Hold | Hold | -| HeatSafe | | | | | | | | | | Hold | HeatFlow | HeatFlow2 | -| HeatCaution | | | | | | | | | | | Hold | HeatFlow | +| HeatSafe | | | | | | | | | | Hold | Flow | Flow | +| HeatCaution | | | | | | | | | | | Hold | Flow | | HeatCritical | | | | | | | | | | | | Hold | Design rules: @@ -422,7 +401,7 @@ The editor authors: - underground fuel, coolant, and electricity cells - flow props and consumer props - reactor controls and reactor consumer bindings -- junction props and ratio modes +- junction props and balance-defined ratio mode index - door props and door edges - all-seeing-eye terminals - remedy supplies diff --git a/src/ReactorMaintenance.Simulation/Balancing.cs b/src/ReactorMaintenance.Simulation/Balancing.cs index 601ba35..cf086cf 100644 --- a/src/ReactorMaintenance.Simulation/Balancing.cs +++ b/src/ReactorMaintenance.Simulation/Balancing.cs @@ -1,4 +1,4 @@ -using ReactorMaintenance.Simulation.Difficulties; +using ReactorMaintenance.Simulation.Difficulties; namespace ReactorMaintenance.Simulation; @@ -158,4 +158,4 @@ public abstract class Balancing public abstract int RemedyBlockTurns { get; } public abstract int HeatShieldSteps { get; } public abstract int InventoryCapacityPerRemedy { get; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Difficulties/NormalBalancing.cs b/src/ReactorMaintenance.Simulation/Difficulties/NormalBalancing.cs index d73c1b6..6cb4cd9 100644 --- a/src/ReactorMaintenance.Simulation/Difficulties/NormalBalancing.cs +++ b/src/ReactorMaintenance.Simulation/Difficulties/NormalBalancing.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation.Difficulties; +namespace ReactorMaintenance.Simulation.Difficulties; public class NormalBalancing : Balancing { @@ -30,6 +30,7 @@ public class NormalBalancing : Balancing public override float SourceIntensity => 8; public override float DistanceAmountFalloff => 0.5f; public override float DistanceIntensityFalloff => 0.4f; + public override IReadOnlyList TwoOutflowJunctionRatios { get; } = [ new("0/4", [0, 1]), new("1/3", [0.25f, 0.75f]), @@ -37,12 +38,14 @@ public class NormalBalancing : Balancing new("3/1", [0.75f, 0.25f]), new("4/0", [1, 0]) ]; + public override IReadOnlyList ThreeOutflowJunctionRatios { get; } = [ new("0/3/3", [0, 0.5f, 0.5f]), new("3/0/3", [0.5f, 0, 0.5f]), new("3/3/0", [0.5f, 0.5f, 0]), new("2/2/2", [1f / 3f, 1f / 3f, 1f / 3f]) ]; + public override float ConsumerRequiredAmount => 2.5f; public override float ConsumerRequiredIntensity => 2.5f; public override float LeakBaseAmount => 0.5f; @@ -64,4 +67,4 @@ public class NormalBalancing : Balancing public override int RemedyBlockTurns => 2; public override int HeatShieldSteps => 3; public override int InventoryCapacityPerRemedy => 3; -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/GridPositionExtensions.cs b/src/ReactorMaintenance.Simulation/GridPositionExtensions.cs index d53b654..a761a2d 100644 --- a/src/ReactorMaintenance.Simulation/GridPositionExtensions.cs +++ b/src/ReactorMaintenance.Simulation/GridPositionExtensions.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public static class GridPositionExtensions { @@ -14,4 +14,4 @@ public static class GridPositionExtensions { return Math.Abs(position.X - other.X) + Math.Abs(position.Y - other.Y); } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/JunctionFlow.cs b/src/ReactorMaintenance.Simulation/JunctionFlow.cs index 520baaa..5ba2ae1 100644 --- a/src/ReactorMaintenance.Simulation/JunctionFlow.cs +++ b/src/ReactorMaintenance.Simulation/JunctionFlow.cs @@ -31,4 +31,4 @@ public sealed record JunctionFlow return -1; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/JunctionFlowAnalyzer.cs b/src/ReactorMaintenance.Simulation/JunctionFlowAnalyzer.cs index c2f9d9a..2f58baa 100644 --- a/src/ReactorMaintenance.Simulation/JunctionFlowAnalyzer.cs +++ b/src/ReactorMaintenance.Simulation/JunctionFlowAnalyzer.cs @@ -94,4 +94,4 @@ public static class JunctionFlowAnalyzer } private sealed record SourceBranch(GridPosition Position, int? Distance); -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/JunctionRatioPreset.cs b/src/ReactorMaintenance.Simulation/JunctionRatioPreset.cs index e587339..e67e601 100644 --- a/src/ReactorMaintenance.Simulation/JunctionRatioPreset.cs +++ b/src/ReactorMaintenance.Simulation/JunctionRatioPreset.cs @@ -1,3 +1,3 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; -public sealed record JunctionRatioPreset(string Label, float[] Weights); +public sealed record JunctionRatioPreset(string Label, float[] Weights); \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/LevelEditor.cs b/src/ReactorMaintenance.Simulation/LevelEditor.cs index 0f05fb3..e0511ba 100644 --- a/src/ReactorMaintenance.Simulation/LevelEditor.cs +++ b/src/ReactorMaintenance.Simulation/LevelEditor.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum EEditorTool { @@ -160,4 +160,4 @@ public static class LevelEditor ] }; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/LevelStateExtensions.cs b/src/ReactorMaintenance.Simulation/LevelStateExtensions.cs index b34655c..ec80c47 100644 --- a/src/ReactorMaintenance.Simulation/LevelStateExtensions.cs +++ b/src/ReactorMaintenance.Simulation/LevelStateExtensions.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public static class LevelStateExtensions { @@ -113,4 +113,4 @@ public static class LevelStateExtensions { return edgeA == a && edgeB == b || edgeA == b && edgeB == a; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/LevelStateFactory.cs b/src/ReactorMaintenance.Simulation/LevelStateFactory.cs index ee80b73..81d0e3d 100644 --- a/src/ReactorMaintenance.Simulation/LevelStateFactory.cs +++ b/src/ReactorMaintenance.Simulation/LevelStateFactory.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public static class LevelStateFactory { @@ -51,4 +51,4 @@ public static class LevelStateFactory { return Enumerable.Range(0, width * height).Select(_ => new PropState()).ToArray(); } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/DoorState.cs b/src/ReactorMaintenance.Simulation/Models/DoorState.cs index 09e2262..70f2dc9 100644 --- a/src/ReactorMaintenance.Simulation/Models/DoorState.cs +++ b/src/ReactorMaintenance.Simulation/Models/DoorState.cs @@ -1,8 +1,8 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record DoorState { public GridPosition A { get; init; } = new(0, 0); public GridPosition B { get; init; } = new(0, 0); public EDoorState State { get; init; } = EDoorState.Closed; -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/EBand.cs b/src/ReactorMaintenance.Simulation/Models/EBand.cs index 86338b7..59107c6 100644 --- a/src/ReactorMaintenance.Simulation/Models/EBand.cs +++ b/src/ReactorMaintenance.Simulation/Models/EBand.cs @@ -1,8 +1,8 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum EBand { Safe, Caution, Critical -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ECarrierType.cs b/src/ReactorMaintenance.Simulation/Models/ECarrierType.cs index 3bffdbc..80b9af1 100644 --- a/src/ReactorMaintenance.Simulation/Models/ECarrierType.cs +++ b/src/ReactorMaintenance.Simulation/Models/ECarrierType.cs @@ -1,8 +1,8 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ECarrierType { Fuel, Coolant, Electricity -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ECellTerrain.cs b/src/ReactorMaintenance.Simulation/Models/ECellTerrain.cs index ce31c59..2972261 100644 --- a/src/ReactorMaintenance.Simulation/Models/ECellTerrain.cs +++ b/src/ReactorMaintenance.Simulation/Models/ECellTerrain.cs @@ -1,7 +1,7 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ECellTerrain { Floor, Wall -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/EConsumerServiceState.cs b/src/ReactorMaintenance.Simulation/Models/EConsumerServiceState.cs index 4c13250..6a695ea 100644 --- a/src/ReactorMaintenance.Simulation/Models/EConsumerServiceState.cs +++ b/src/ReactorMaintenance.Simulation/Models/EConsumerServiceState.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum EConsumerServiceState { @@ -7,4 +7,4 @@ public enum EConsumerServiceState Starved, Supplied, Producing -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/EDoorState.cs b/src/ReactorMaintenance.Simulation/Models/EDoorState.cs index 88c8595..f658492 100644 --- a/src/ReactorMaintenance.Simulation/Models/EDoorState.cs +++ b/src/ReactorMaintenance.Simulation/Models/EDoorState.cs @@ -1,7 +1,7 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum EDoorState { Open, Closed -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/EForecastKind.cs b/src/ReactorMaintenance.Simulation/Models/EForecastKind.cs index e8ebf09..7ba1c58 100644 --- a/src/ReactorMaintenance.Simulation/Models/EForecastKind.cs +++ b/src/ReactorMaintenance.Simulation/Models/EForecastKind.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum EForecastKind { @@ -7,4 +7,4 @@ public enum EForecastKind ConsumerStarved, HazardGrowth, RuleEvent -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ELevelState.cs b/src/ReactorMaintenance.Simulation/Models/ELevelState.cs index f576fef..cd37dae 100644 --- a/src/ReactorMaintenance.Simulation/Models/ELevelState.cs +++ b/src/ReactorMaintenance.Simulation/Models/ELevelState.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ELevelState { @@ -8,4 +8,4 @@ public enum ELevelState Ready, Lost, Won -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ENetworkValueKind.cs b/src/ReactorMaintenance.Simulation/Models/ENetworkValueKind.cs index fae6efb..4ce00bf 100644 --- a/src/ReactorMaintenance.Simulation/Models/ENetworkValueKind.cs +++ b/src/ReactorMaintenance.Simulation/Models/ENetworkValueKind.cs @@ -1,7 +1,7 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ENetworkValueKind { Amount, Intensity -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/EPropSwitchState.cs b/src/ReactorMaintenance.Simulation/Models/EPropSwitchState.cs index a13f785..34f4b55 100644 --- a/src/ReactorMaintenance.Simulation/Models/EPropSwitchState.cs +++ b/src/ReactorMaintenance.Simulation/Models/EPropSwitchState.cs @@ -1,7 +1,7 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum EPropSwitchState { Disabled, Enabled -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/EPropType.cs b/src/ReactorMaintenance.Simulation/Models/EPropType.cs index 6b0d274..687a7eb 100644 --- a/src/ReactorMaintenance.Simulation/Models/EPropType.cs +++ b/src/ReactorMaintenance.Simulation/Models/EPropType.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum EPropType { @@ -10,4 +10,4 @@ public enum EPropType AllSeeingEyeTerminal, RemedySupply, ReactorControl -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ERemedyType.cs b/src/ReactorMaintenance.Simulation/Models/ERemedyType.cs index ea9e064..0662811 100644 --- a/src/ReactorMaintenance.Simulation/Models/ERemedyType.cs +++ b/src/ReactorMaintenance.Simulation/Models/ERemedyType.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ERemedyType { @@ -6,4 +6,4 @@ public enum ERemedyType CoolantNeutralizer, ElectricityNeutralizer, HeatShield -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ERuleEffectKind.cs b/src/ReactorMaintenance.Simulation/Models/ERuleEffectKind.cs index 8274ca1..c869f77 100644 --- a/src/ReactorMaintenance.Simulation/Models/ERuleEffectKind.cs +++ b/src/ReactorMaintenance.Simulation/Models/ERuleEffectKind.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ERuleEffectKind { @@ -15,4 +15,4 @@ public enum ERuleEffectKind RemoveInventory, MarkTerminalLoss, EmitWarning -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ERuleEventPhase.cs b/src/ReactorMaintenance.Simulation/Models/ERuleEventPhase.cs index e9f61d8..b5a4f17 100644 --- a/src/ReactorMaintenance.Simulation/Models/ERuleEventPhase.cs +++ b/src/ReactorMaintenance.Simulation/Models/ERuleEventPhase.cs @@ -1,7 +1,7 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ERuleEventPhase { StartOfSimulation, EndOfTurn -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ERulePredicateKind.cs b/src/ReactorMaintenance.Simulation/Models/ERulePredicateKind.cs index 0cd1ab2..7d75d8c 100644 --- a/src/ReactorMaintenance.Simulation/Models/ERulePredicateKind.cs +++ b/src/ReactorMaintenance.Simulation/Models/ERulePredicateKind.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ERulePredicateKind { @@ -14,4 +14,4 @@ public enum ERulePredicateKind RobotAt, RobotInventoryAtLeast, AllSeeingEyeUnlocked -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ESurfaceInteractionVerb.cs b/src/ReactorMaintenance.Simulation/Models/ESurfaceInteractionVerb.cs index 51da4d6..8547c9c 100644 --- a/src/ReactorMaintenance.Simulation/Models/ESurfaceInteractionVerb.cs +++ b/src/ReactorMaintenance.Simulation/Models/ESurfaceInteractionVerb.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ESurfaceInteractionVerb { @@ -8,4 +8,4 @@ public enum ESurfaceInteractionVerb Quench, Short, Ignite -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ESurfaceQuantity.cs b/src/ReactorMaintenance.Simulation/Models/ESurfaceQuantity.cs index adbe589..675cfea 100644 --- a/src/ReactorMaintenance.Simulation/Models/ESurfaceQuantity.cs +++ b/src/ReactorMaintenance.Simulation/Models/ESurfaceQuantity.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum ESurfaceQuantity { @@ -6,4 +6,4 @@ public enum ESurfaceQuantity Coolant, Electricity, Heat -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/EUndergroundState.cs b/src/ReactorMaintenance.Simulation/Models/EUndergroundState.cs index 4773554..53f92f9 100644 --- a/src/ReactorMaintenance.Simulation/Models/EUndergroundState.cs +++ b/src/ReactorMaintenance.Simulation/Models/EUndergroundState.cs @@ -1,8 +1,8 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public enum EUndergroundState { Absent, Intact, Leaking -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/Forecast.cs b/src/ReactorMaintenance.Simulation/Models/Forecast.cs index 64d85cb..d9a9066 100644 --- a/src/ReactorMaintenance.Simulation/Models/Forecast.cs +++ b/src/ReactorMaintenance.Simulation/Models/Forecast.cs @@ -1,3 +1,3 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; -public sealed record Forecast(EForecastKind Kind, GridPosition? Position, int Turns, string Message); +public sealed record Forecast(EForecastKind Kind, GridPosition? Position, int Turns, string Message); \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/GlobalState.cs b/src/ReactorMaintenance.Simulation/Models/GlobalState.cs index df05106..e371edb 100644 --- a/src/ReactorMaintenance.Simulation/Models/GlobalState.cs +++ b/src/ReactorMaintenance.Simulation/Models/GlobalState.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record GlobalState { @@ -9,4 +9,4 @@ public sealed record GlobalState public bool AllSeeingEyeUnlocked { get; init; } public bool TerminalLoss { get; init; } public IReadOnlyList Warnings { get; init; } = Array.Empty(); -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/GridPosition.cs b/src/ReactorMaintenance.Simulation/Models/GridPosition.cs index fbb44c1..e99282d 100644 --- a/src/ReactorMaintenance.Simulation/Models/GridPosition.cs +++ b/src/ReactorMaintenance.Simulation/Models/GridPosition.cs @@ -1,3 +1,3 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; -public sealed record GridPosition(int X, int Y); +public sealed record GridPosition(int X, int Y); \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/LeakState.cs b/src/ReactorMaintenance.Simulation/Models/LeakState.cs index 3c2e65c..1dba2e5 100644 --- a/src/ReactorMaintenance.Simulation/Models/LeakState.cs +++ b/src/ReactorMaintenance.Simulation/Models/LeakState.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record LeakState { @@ -6,4 +6,4 @@ public sealed record LeakState public GridPosition UndergroundPosition { get; init; } = new(0, 0); public GridPosition AccessPosition { get; init; } = new(0, 0); public bool Repaired { get; init; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/LevelState.cs b/src/ReactorMaintenance.Simulation/Models/LevelState.cs index c5b5825..6dffcd7 100644 --- a/src/ReactorMaintenance.Simulation/Models/LevelState.cs +++ b/src/ReactorMaintenance.Simulation/Models/LevelState.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record LevelState { @@ -23,4 +23,4 @@ public sealed record LevelState public RobotState Robot { get; init; } = new(); public GlobalState Global { get; init; } = new(); public IReadOnlyList Forecasts { get; init; } = Array.Empty(); -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/PropState.cs b/src/ReactorMaintenance.Simulation/Models/PropState.cs index 0ec5507..090423d 100644 --- a/src/ReactorMaintenance.Simulation/Models/PropState.cs +++ b/src/ReactorMaintenance.Simulation/Models/PropState.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record PropState { @@ -12,4 +12,4 @@ public sealed record PropState public int ReactorId { get; init; } public bool IsEnabled => SwitchState == EPropSwitchState.Enabled; -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ReactorBinding.cs b/src/ReactorMaintenance.Simulation/Models/ReactorBinding.cs index 976562c..56932fd 100644 --- a/src/ReactorMaintenance.Simulation/Models/ReactorBinding.cs +++ b/src/ReactorMaintenance.Simulation/Models/ReactorBinding.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record ReactorBinding { @@ -9,4 +9,4 @@ public sealed record ReactorBinding public GridPosition ElectricityConsumerPosition { get; init; } = new(0, 0); public bool Ready { get; init; } public bool Activated { get; init; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/RobotState.cs b/src/ReactorMaintenance.Simulation/Models/RobotState.cs index 01589cc..f12a519 100644 --- a/src/ReactorMaintenance.Simulation/Models/RobotState.cs +++ b/src/ReactorMaintenance.Simulation/Models/RobotState.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record RobotState { @@ -8,4 +8,4 @@ public sealed record RobotState public int ElectricityNeutralizers { get; init; } public int HeatShields { get; init; } public int HeatImmunitySteps { get; init; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/RuleEffect.cs b/src/ReactorMaintenance.Simulation/Models/RuleEffect.cs index 22712a8..37a406e 100644 --- a/src/ReactorMaintenance.Simulation/Models/RuleEffect.cs +++ b/src/ReactorMaintenance.Simulation/Models/RuleEffect.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record RuleEffect { @@ -10,4 +10,4 @@ public sealed record RuleEffect public float Amount { get; init; } public EPropSwitchState PropSwitchState { get; init; } public string Message { get; init; } = string.Empty; -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/RuleEventState.cs b/src/ReactorMaintenance.Simulation/Models/RuleEventState.cs index e71f7f9..afbf960 100644 --- a/src/ReactorMaintenance.Simulation/Models/RuleEventState.cs +++ b/src/ReactorMaintenance.Simulation/Models/RuleEventState.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record RuleEventState { @@ -11,4 +11,4 @@ public sealed record RuleEventState public IReadOnlyList Predicates { get; init; } = Array.Empty(); public IReadOnlyList Effects { get; init; } = Array.Empty(); public string ForecastText { get; init; } = string.Empty; -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/RulePredicate.cs b/src/ReactorMaintenance.Simulation/Models/RulePredicate.cs index 9e84475..08113b5 100644 --- a/src/ReactorMaintenance.Simulation/Models/RulePredicate.cs +++ b/src/ReactorMaintenance.Simulation/Models/RulePredicate.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record RulePredicate { @@ -15,4 +15,4 @@ public sealed record RulePredicate public EBand Band { get; init; } public int InventoryCount { get; init; } public bool BoolValue { get; init; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/SurfaceState.cs b/src/ReactorMaintenance.Simulation/Models/SurfaceState.cs index 933baa5..0a7176b 100644 --- a/src/ReactorMaintenance.Simulation/Models/SurfaceState.cs +++ b/src/ReactorMaintenance.Simulation/Models/SurfaceState.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record SurfaceState { @@ -9,4 +9,4 @@ public sealed record SurfaceState public int FuelBlockTurns { get; init; } public int CoolantBlockTurns { get; init; } public int ElectricityBlockTurns { get; init; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/UndergroundCell.cs b/src/ReactorMaintenance.Simulation/Models/UndergroundCell.cs index 6195b57..bd01198 100644 --- a/src/ReactorMaintenance.Simulation/Models/UndergroundCell.cs +++ b/src/ReactorMaintenance.Simulation/Models/UndergroundCell.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record UndergroundCell { @@ -8,4 +8,4 @@ public sealed record UndergroundCell public bool IsPresent => State != EUndergroundState.Absent; public bool CarriesFlow => State is EUndergroundState.Intact or EUndergroundState.Leaking; -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ValidationIssue.cs b/src/ReactorMaintenance.Simulation/Models/ValidationIssue.cs index fd012c5..1a2db80 100644 --- a/src/ReactorMaintenance.Simulation/Models/ValidationIssue.cs +++ b/src/ReactorMaintenance.Simulation/Models/ValidationIssue.cs @@ -1,3 +1,3 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; -public sealed record ValidationIssue(string Message, GridPosition? Position = null); +public sealed record ValidationIssue(string Message, GridPosition? Position = null); \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Models/ValidationReport.cs b/src/ReactorMaintenance.Simulation/Models/ValidationReport.cs index edc11a7..8047150 100644 --- a/src/ReactorMaintenance.Simulation/Models/ValidationReport.cs +++ b/src/ReactorMaintenance.Simulation/Models/ValidationReport.cs @@ -1,8 +1,8 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record ValidationReport { public IReadOnlyList Errors { get; init; } = Array.Empty(); public IReadOnlyList Warnings { get; init; } = Array.Empty(); public bool IsValid => Errors.Count == 0; -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/RobotStateExtensions.cs b/src/ReactorMaintenance.Simulation/RobotStateExtensions.cs index b1b8f56..157fcee 100644 --- a/src/ReactorMaintenance.Simulation/RobotStateExtensions.cs +++ b/src/ReactorMaintenance.Simulation/RobotStateExtensions.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public static class RobotStateExtensions { @@ -33,4 +33,4 @@ public static class RobotStateExtensions { return Math.Clamp(value, 0, Balancing.Current.InventoryCapacityPerRemedy); } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/SimulationEngine.cs b/src/ReactorMaintenance.Simulation/SimulationEngine.cs index 501938f..966f9c2 100644 --- a/src/ReactorMaintenance.Simulation/SimulationEngine.cs +++ b/src/ReactorMaintenance.Simulation/SimulationEngine.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed class SimulationEngine { @@ -43,4 +43,4 @@ public sealed class SimulationEngine } private readonly SimulationCoreSystem m_Core = new(); -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/SurfaceInteractionEffect.cs b/src/ReactorMaintenance.Simulation/SurfaceInteractionEffect.cs index 038d71a..1d2d91c 100644 --- a/src/ReactorMaintenance.Simulation/SurfaceInteractionEffect.cs +++ b/src/ReactorMaintenance.Simulation/SurfaceInteractionEffect.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public sealed record SurfaceInteractionEffect { @@ -8,4 +8,4 @@ public sealed record SurfaceInteractionEffect public ESurfaceQuantity Quantity { get; init; } public float Amount { get; init; } public float SecondaryAmount { get; init; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/SurfaceStateExtensions.cs b/src/ReactorMaintenance.Simulation/SurfaceStateExtensions.cs index 4554c09..cf74a57 100644 --- a/src/ReactorMaintenance.Simulation/SurfaceStateExtensions.cs +++ b/src/ReactorMaintenance.Simulation/SurfaceStateExtensions.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; public static class SurfaceStateExtensions { @@ -25,4 +25,4 @@ public static class SurfaceStateExtensions _ => throw new ArgumentOutOfRangeException(nameof(carrier), carrier, "Unsupported carrier.") }; } -} +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Simulation/Systems/SimulationCoreSystem.cs b/src/ReactorMaintenance.Simulation/Systems/SimulationCoreSystem.cs index 7ea8559..a62e16d 100644 --- a/src/ReactorMaintenance.Simulation/Systems/SimulationCoreSystem.cs +++ b/src/ReactorMaintenance.Simulation/Systems/SimulationCoreSystem.cs @@ -1,4 +1,4 @@ -namespace ReactorMaintenance.Simulation; +namespace ReactorMaintenance.Simulation; internal sealed class SimulationCoreSystem { @@ -703,5 +703,4 @@ internal sealed class SimulationCoreSystem } private readonly LevelValidator m_Validator = new(); -} - +} \ No newline at end of file diff --git a/src/ReactorMaintenance.Win2D/MainWindow.xaml.cs b/src/ReactorMaintenance.Win2D/MainWindow.xaml.cs index de00125..97a8cf9 100644 --- a/src/ReactorMaintenance.Win2D/MainWindow.xaml.cs +++ b/src/ReactorMaintenance.Win2D/MainWindow.xaml.cs @@ -1,4 +1,4 @@ -using Microsoft.Graphics.Canvas; +using Microsoft.Graphics.Canvas; using Microsoft.Graphics.Canvas.Text; using Microsoft.Graphics.Canvas.UI.Xaml; using Microsoft.UI; @@ -717,4 +717,4 @@ public sealed partial class MainWindow private CanvasBitmap? m_RobotSprite; private CanvasBitmap? m_LeakSprite; private CanvasBitmap? m_HeatSprite; -} +} \ No newline at end of file diff --git a/tests/ReactorMaintenance.Simulation.Tests/SimulationEngineTests.cs b/tests/ReactorMaintenance.Simulation.Tests/SimulationEngineTests.cs index e414c18..64ae36b 100644 --- a/tests/ReactorMaintenance.Simulation.Tests/SimulationEngineTests.cs +++ b/tests/ReactorMaintenance.Simulation.Tests/SimulationEngineTests.cs @@ -405,4 +405,4 @@ public sealed class SimulationEngineTests } private readonly SimulationEngine m_Engine = new(); -} +} \ No newline at end of file