51 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|
|
} |