using System; using System.Collections.Generic; using R3; using UnityEngine; namespace Code.D.Cleaning { public interface ICleaningService { } public class CleaningService : IDisposable, ICleaningService { private List _cleanableSurfaces = new(); private IDisposable _surfaces; public ReactiveProperty LevelCleaned { get; } = new(); public CleaningService(Cleanable[] cleanableSurfaces) { DisposableBuilder builder = new DisposableBuilder(); foreach (var cleanable in cleanableSurfaces) { _cleanableSurfaces.Add(cleanable); builder.Add(cleanable.Cleaned .Subscribe(x => CheckProgress(cleanable))); } _surfaces = builder.Build(); } private void CheckProgress(Cleanable cleanable) { if(cleanable.Cleaned.CurrentValue) Debug.Log($"{cleanable.name} cleaned"); CheckOverallProgress(); } private void CheckOverallProgress() { if (LevelCleaned.CurrentValue) return; foreach (var t in _cleanableSurfaces) if (!t.Cleaned.CurrentValue) return; Debug.Log($"VICTORY!!!"); LevelCleaned.Value = true; } public void Dispose() { _surfaces?.Dispose(); } } }