Rewrite simulation core for design model

This commit is contained in:
2026-05-10 18:41:17 +02:00
parent ca41e009bd
commit 851f6d27e8
23 changed files with 2033 additions and 1192 deletions

View File

@@ -1,78 +1,72 @@
using ReactorMaintenance.Simulation.Difficulties;
namespace ReactorMaintenance.Simulation;
public abstract class Balancing
{
public static Balancing Current { get; set; } = new NormalBalancing();
public abstract int MinHazardValue { get; }
public abstract int MaxHazardValue { get; }
public abstract int DefaultHazardStability { get; }
public abstract int DefaultCellIntegrity { get; }
public abstract int DefaultActionsPerTurn { get; }
public abstract int DefaultCoreHeat { get; }
public abstract int DefaultFacilityStability { get; }
public abstract int DefaultPower { get; }
public abstract int DefaultCooling { get; }
public abstract int FirstGridCoordinate { get; }
public abstract int NeighborDistance { get; }
public abstract int CurrentForecastTurn { get; }
public abstract int MinimumLevelSize { get; }
public abstract int DefaultLevelWidth { get; }
public abstract int DefaultLevelHeight { get; }
public abstract int DefaultRobotCoordinate { get; }
public abstract int DefaultPipeFlow { get; }
public abstract int DefaultPipePressure { get; }
public abstract int DefaultPressurePipeFlow { get; }
public abstract int DefaultPressurePipePressure { get; }
public abstract int DefaultEditedPipeIntegrity { get; }
public abstract int MinimumLeakRate { get; }
public abstract int DamagedPipeIntegrity { get; }
public abstract int RepairedLeakRate { get; }
public abstract int RepairedElectricalCharge { get; }
public abstract int HeatToolIncrease { get; }
public abstract int FireToolMinimumHeat { get; }
public abstract int FireToolMinimumSmoke { get; }
public abstract int MaxForecastStepCount { get; }
public abstract int TurnIncrement { get; }
public abstract int OverpressureThreshold { get; }
public abstract int HeatIntegrityDamageThreshold { get; }
public abstract int PipeFireIntegrityDamage { get; }
public abstract int FireStabilityDamage { get; }
public abstract int BurstLeakRate { get; }
public abstract int BrokenPipeFlow { get; }
public abstract int ElectrifiedCoolantPoolingThreshold { get; }
public abstract int ElectricalChargeIncrease { get; }
public abstract int FuelVaporFireThreshold { get; }
public abstract int LiquidFuelFireThreshold { get; }
public abstract int HeatIgnitionThreshold { get; }
public abstract int ElectricalIgnitionThreshold { get; }
public abstract int FireHeatIncrease { get; }
public abstract int FireSmokeIncrease { get; }
public abstract int FireLiquidFuelConsumption { get; }
public abstract int FireFuelVaporConsumption { get; }
public abstract int SmokeDecay { get; }
public abstract int PressurizedFuelLeakPressureThreshold { get; }
public abstract int PassiveFuelVaporHeatOffset { get; }
public abstract int PassiveFuelVaporDivisor { get; }
public abstract int MinimumCoolantHeatReduction { get; }
public abstract int CoolantHeatReductionDivisor { get; }
public abstract int CoolantSteamHeatThreshold { get; }
public abstract int CoolantSteamSmokeIncrease { get; }
public abstract int PressureLeakSmokeThreshold { get; }
public abstract int PressureLeakSmokeIncrease { get; }
public abstract int GeneratorHeatIncrease { get; }
public abstract int CoolingPumpHeatReduction { get; }
public abstract int ReactorHeatIncrease { get; }
public abstract int SmokeSpreadThreshold { get; }
public abstract int SmokeSpreadIncrease { get; }
public abstract int CriticalCellStabilityThreshold { get; }
public abstract int MeltdownCoreHeatThreshold { get; }
public abstract int StabilityCollapseThreshold { get; }
public abstract int GeneratorPowerOutput { get; }
public abstract int CoolingPumpOutput { get; }
public abstract int ReactorReadyPowerThreshold { get; }
public abstract int ReactorReadyCoolingThreshold { get; }
public abstract int ReactorReadyCoreHeatThreshold { get; }
}
using ReactorMaintenance.Simulation.Difficulties;
namespace ReactorMaintenance.Simulation;
public abstract class Balancing
{
public static Balancing Current { get; set; } = new NormalBalancing();
public float ClampValue(float value)
{
return Math.Clamp(value, MinValue, MaxValue);
}
public EBand Band(float value, float caution, float critical)
{
if (value >= critical)
return EBand.Critical;
return value >= caution ? EBand.Caution : EBand.Safe;
}
public abstract int DefaultLevelWidth { get; }
public abstract int DefaultLevelHeight { get; }
public abstract int MinimumLevelSize { get; }
public abstract int ActionsPerTurn { get; }
public abstract int ForecastHorizon { get; }
public abstract float MinValue { get; }
public abstract float MaxValue { get; }
public abstract float FuelSafe { get; }
public abstract float FuelCaution { get; }
public abstract float FuelCritical { get; }
public abstract float CoolantSafe { get; }
public abstract float CoolantCaution { get; }
public abstract float CoolantCritical { get; }
public abstract float ElectricitySafe { get; }
public abstract float ElectricityCaution { get; }
public abstract float ElectricityCritical { get; }
public abstract float HeatSafe { get; }
public abstract float HeatCaution { get; }
public abstract float HeatCritical { get; }
public abstract float TerminalHeat { get; }
public abstract float RobotFuelSafetyThreshold { get; }
public abstract float RobotCoolantSafetyThreshold { get; }
public abstract float RobotElectricitySafetyThreshold { get; }
public abstract float RobotHeatSafetyThreshold { get; }
public abstract float SourceAmount { get; }
public abstract float SourceIntensity { get; }
public abstract float DistanceAmountFalloff { get; }
public abstract float DistanceIntensityFalloff { get; }
public abstract float ConsumerRequiredAmount { get; }
public abstract float ConsumerRequiredIntensity { get; }
public abstract float LeakBaseAmount { get; }
public abstract float LeakAmountScale { get; }
public abstract float LeakIntensityScale { get; }
public abstract float FlowTransferRatio { get; }
public abstract float StrongFlowTransferRatio { get; }
public abstract float Warm1Amount { get; }
public abstract float Warm2Amount { get; }
public abstract float Quench1Amount { get; }
public abstract float Quench2Amount { get; }
public abstract float Short1Heat { get; }
public abstract float Short1Discharge { get; }
public abstract float Short2Heat { get; }
public abstract float Short2Discharge { get; }
public abstract float Ignite1Heat { get; }
public abstract float Ignite1FuelConsumption { get; }
public abstract float Ignite2Heat { get; }
public abstract float Ignite2FuelConsumption { get; }
public abstract int RemedyBlockTurns { get; }
public abstract int HeatShieldSteps { get; }
public abstract int InventoryCapacityPerRemedy { get; }
}