74 lines
4.8 KiB
C#
74 lines
4.8 KiB
C#
using Sand.Core;
|
|
|
|
namespace Sand.App;
|
|
|
|
internal sealed class CoreSimulationBackend : ISimulationBackend
|
|
{
|
|
private readonly SandSimulation _simulation;
|
|
private readonly AppSimulationFrameStats _frameStats = new();
|
|
|
|
public CoreSimulationBackend(SandSimulation simulation)
|
|
{
|
|
_simulation = simulation;
|
|
}
|
|
|
|
public string BackendName => "dense";
|
|
public SimulationSettings Settings => _simulation.Settings;
|
|
public AppSimulationFrameStats FrameStats
|
|
{
|
|
get
|
|
{
|
|
var source = _simulation.FrameStats;
|
|
_frameStats.Frame = source.Frame;
|
|
_frameStats.ProcessedCells = source.ProcessedCells;
|
|
_frameStats.ParticleCount = source.ParticleCount;
|
|
_frameStats.MinActiveX = source.MinActiveX;
|
|
_frameStats.MinActiveY = source.MinActiveY;
|
|
_frameStats.MaxActiveX = source.MaxActiveX;
|
|
_frameStats.MaxActiveY = source.MaxActiveY;
|
|
_frameStats.LoadedChunkCount = source.LoadedChunkCount;
|
|
_frameStats.ActiveChunkCount = source.ActiveChunkCount;
|
|
_frameStats.DirtyChunkCount = source.DirtyChunkCount;
|
|
_frameStats.SteppedChunkCount = source.SteppedChunkCount;
|
|
_frameStats.SleepingChunkCount = source.SleepingChunkCount;
|
|
_frameStats.FieldPageCount = source.FieldPageCount;
|
|
_frameStats.MoveAttemptCount = source.MoveAttemptCount;
|
|
_frameStats.VerticalMoveAttemptCount = source.VerticalMoveAttemptCount;
|
|
_frameStats.DiagonalMoveAttemptCount = source.DiagonalMoveAttemptCount;
|
|
_frameStats.LateralMoveAttemptCount = source.LateralMoveAttemptCount;
|
|
_frameStats.SuccessfulMoveCount = source.SuccessfulMoveCount;
|
|
_frameStats.SwapAttemptCount = source.SwapAttemptCount;
|
|
_frameStats.StalledMovableCount = source.StalledMovableCount;
|
|
_frameStats.MovementOnlyFastPathCount = source.MovementOnlyFastPathCount;
|
|
_frameStats.FullRuntimeStepCount = source.FullRuntimeStepCount;
|
|
_frameStats.FullRuntimeSolidCount = source.FullRuntimeSolidCount;
|
|
_frameStats.FullRuntimeLiquidCount = source.FullRuntimeLiquidCount;
|
|
_frameStats.FullRuntimeGasCount = source.FullRuntimeGasCount;
|
|
_frameStats.MovedParticleCount = source.MovedParticleCount;
|
|
_frameStats.SwappedParticleCount = source.SwappedParticleCount;
|
|
_frameStats.VisualDirtyPageCount = source.VisualDirtyPageCount;
|
|
_frameStats.FrameBuildBytesTouched = source.FrameBuildBytesTouched;
|
|
_frameStats.ActivationTimeMicroseconds = source.ActivationTimeMicroseconds;
|
|
_frameStats.MovementTimeMicroseconds = source.MovementTimeMicroseconds;
|
|
_frameStats.RuntimeTimeMicroseconds = source.RuntimeTimeMicroseconds;
|
|
_frameStats.FieldDecayTimeMicroseconds = source.FieldDecayTimeMicroseconds;
|
|
_frameStats.RenderTimeMicroseconds = source.RenderTimeMicroseconds;
|
|
return _frameStats;
|
|
}
|
|
}
|
|
public int Frame => _simulation.Frame;
|
|
public int ParticleCount => _simulation.ParticleCount;
|
|
public ReadOnlySpan<byte> BuildRgbaFrame() => _simulation.BuildRgbaFrame();
|
|
public void Step(float dt) => _simulation.Step(dt);
|
|
public void Clear() => _simulation.Clear();
|
|
public void RefreshSettingsState() => _simulation.RefreshSettingsState();
|
|
public void ClearParticleCircle(int centerX, int centerY, int brushRadius) => _simulation.ClearParticleCircle(centerX, centerY, brushRadius);
|
|
public void ClearParticlePourAtPixel(int centerX, int centerY, int brushRadius, int maxParticles, int seed) => _simulation.ClearParticlePourAtPixel(centerX, centerY, brushRadius, maxParticles, seed);
|
|
public void CreateParticleCircle(int centerX, int centerY, int brushRadius, string particleId) => _simulation.CreateParticleCircle(centerX, centerY, brushRadius, particleId);
|
|
public void CreateParticlePourAtPixel(int centerX, int centerY, int brushRadius, string particleId, int maxParticles, int seed) => _simulation.CreateParticlePourAtPixel(centerX, centerY, brushRadius, particleId, maxParticles, seed);
|
|
public void ApplyWindBrushAtPixel(int centerX, int centerY, int brushRadius, float forceX, float forceY) => _simulation.ApplyWindBrushAtPixel(centerX, centerY, brushRadius, forceX, forceY);
|
|
public void ApplyAirBrushAtPixel(int centerX, int centerY, int brushRadius, float forceX, float forceY) => _simulation.ApplyAirBrushAtPixel(centerX, centerY, brushRadius, forceX, forceY);
|
|
public void ApplyGravityBrushAtPixel(int centerX, int centerY, int brushRadius, float strength) => _simulation.ApplyGravityBrushAtPixel(centerX, centerY, brushRadius, strength);
|
|
public void ApplyRepulsorBrushAtPixel(int centerX, int centerY, int brushRadius, float strength) => _simulation.ApplyRepulsorBrushAtPixel(centerX, centerY, brushRadius, strength);
|
|
}
|