Files
Infratest/Assets/Code/Infrastructure/Volume/VolumeService.cs
T
2026-01-23 20:39:55 +03:00

50 lines
1.5 KiB
C#

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<VolumeId, UnityEngine.Rendering.Volume> _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<IVolumeLoaded>(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);
}
}