using Chickensoft.Collections; using Godot; namespace Zennysoft.Game.Ma.Implementation; public interface IGameRepo : IDisposable { void Pause(); void Resume(); IAutoProp IsPaused { get; } } public class GameRepo : IGameRepo { public event Action? Ended; public IAutoProp IsPaused => _isPaused; private readonly AutoProp _isPaused; public int MaxItemSize => 20; private bool _disposedValue; public GameRepo() { _isPaused = new AutoProp(true); } public void Pause() { _isPaused.OnNext(true); GD.Print("Paused"); } public void Resume() { _isPaused.OnNext(false); GD.Print("Resume"); } public void OnGameEnded() { Pause(); Ended?.Invoke(); } protected void Dispose(bool disposing) { if (!_disposedValue) { if (disposing) { _isPaused.OnCompleted(); _isPaused.Dispose(); } _disposedValue = true; } } public void Dispose() { Dispose(disposing: true); GC.SuppressFinalize(this); } }