using System; using Code.Infrastructure.SceneLoader; using Cysharp.Threading.Tasks; using R3; using Reflex.Core; using UnityEngine; namespace Code.OfficeGame.BattleMode { public class BattleStateSceneInstaller: MonoBehaviour, IInstaller, IDisposable { private IDisposable _onContainerBuildDisposable; public void InstallBindings(ContainerBuilder containerBuilder) { _onContainerBuildDisposable = Observable .FromEvent( h => containerBuilder.OnContainerBuilt += h, h => containerBuilder.OnContainerBuilt -= h) .Subscribe(x => OnContainerBuilt(x).Forget()); } private ISceneContainerManager _sceneContainerManager; private async UniTaskVoid OnContainerBuilt(Container container) { await UniTask.Yield(); _onContainerBuildDisposable.Dispose(); _sceneContainerManager = container.Resolve(); _sceneContainerManager.ScenesContainers.Add(SceneId.Battle, container); } public void Dispose() { _sceneContainerManager.ScenesContainers.Remove(SceneId.Battle); } } }