using System.Collections.Generic; using Code.Infrastructure.EventBus; namespace Code.Infrastructure.Volume { public interface IVolumeService { void TryLoadVolume(VolumeId volumeId); void TryRemoveVolume(VolumeId volumeId); } public class VolumeService : IVolumeLoadedHandle, IVolumeService { private Dictionary _loadedVolumes = new(); private EventBus.EventBus _eventBus; private IVolumeFactory _factory; public VolumeService(EventBus.EventBus eventBus, IVolumeFactory factory) { _eventBus = eventBus; _eventBus.Subscribe(this); _factory = factory; } public void TryLoadVolume(VolumeId volumeId) => _factory.LoadVolume(volumeId); public void VolumeLoaded(UnityEngine.Rendering.Volume volume, VolumeId volumeId) { _loadedVolumes.Add(volumeId, volume); _eventBus.RaiseEvent(ui=> ui.VolumeLoaded(volumeId)); } public void TryRemoveVolume(VolumeId volumeId) { // TODO Close it RemoveVolume(volumeId); } private void RemoveVolume(VolumeId volumeId) { _factory.ReleaseVolume(_loadedVolumes[volumeId]); _loadedVolumes.Remove(volumeId); } } public interface IVolumeLoaded : IGlobalSubscriber { void VolumeLoaded(VolumeId volumeId); } }