Files
Hasebe/Assets/Code/Debug/TestingLevel/TestingLevelSceneInstaller.cs
T
2026-09-20 15:26:03 +03:00

51 lines
1.6 KiB
C#

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<Container>(
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<IPlayerFactory>().InjectPlayer(container);
_onContainerBuildDisposable.Dispose();
_sceneContainerManager = container.Resolve<ISceneContainerManager>();
_sceneContainerManager.ScenesContainers.Add(SceneId.Testing, container);
}
public void Dispose()
{
_sceneContainerManager.ScenesContainers.Remove(SceneId.Testing);
}
}
}