using System; using GodotHostTest.Interfaces; using R3; namespace GodotHostTest.Game.Score; public class TotalScore : IScore, IDisposable { private readonly IDisposable _connectedObservableDisposable; public TotalScore(ITargetEventBus targetEventBus) { var connectedObservable = targetEventBus.Hit.Select(_ => 20) .Merge(targetEventBus.TimedOut.Select(_ => -5)) .Scan(0, (x1, x2) => x1 + x2) .Prepend(0) .Replay(1); _connectedObservableDisposable = connectedObservable.Connect(); Score = connectedObservable.AsObservable(); } public void Dispose() { _connectedObservableDisposable.Dispose(); GC.SuppressFinalize(this); } public Observable Score { get; } }