Files
Hasebe/Assets/Code/D/Cleaning/CleaningService.cs
T
2026-09-20 15:26:03 +03:00

58 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using R3;
using UnityEngine;
namespace Code.D.Cleaning
{
public interface ICleaningService
{
}
public class CleaningService : IDisposable, ICleaningService
{
private List<Cleanable> _cleanableSurfaces = new();
private IDisposable _surfaces;
public ReactiveProperty<bool> 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();
}
}
}