using System; using Code.Game.Gameplay.Player.Factory; using Code.Infrastructure.SceneLoader; using Cysharp.Threading.Tasks; using R3; using Reflex.Core; using UnityEngine; namespace Code.Game.TestingLevel { [Serializable] public struct TestingLevelData { public Transform playerSpawnPoint; } public class TestingLevelSceneInstaller: MonoBehaviour, IInstaller, IDisposable { private IDisposable _onContainerBuildDisposable; [SerializeField] private TestingLevelData testingLevelData; public void InstallBindings(ContainerBuilder containerBuilder) { containerBuilder.RegisterValue(testingLevelData); _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(); container.Resolve().InjectPlayer(container); _onContainerBuildDisposable.Dispose(); _sceneContainerManager = container.Resolve(); _sceneContainerManager.ScenesContainers.Add(SceneId.Testing, container); } public void Dispose() { _sceneContainerManager.ScenesContainers.Remove(SceneId.Testing); } } }