50 lines
1.5 KiB
C#
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);
|
|
}
|
|
} |