Files
Infratest/Assets/Code/Infrastructure/App/PapaInstaller.cs
T
ThomasCharester 5f5ace1b52 Essentials + extra crap
Loadings
Startups
Movement
Camera
2026-01-12 18:43:51 +03:00

69 lines
2.7 KiB
C#

using Code.Infrastructure.Camera;
using Code.Infrastructure.Configs;
using Code.Infrastructure.Input;
using Code.Infrastructure.Loadings;
using Code.Infrastructure.SceneLoader;
using Reflex.Core;
using UnityEngine;
namespace Code.Infrastructure.App
{
public class PapaInstaller : MonoBehaviour, IInstaller, ISceneConfigsLoadedHandle, IInputServiceInitializedHandle, ICameraInitializedHandle
{
public void InstallBindings(ContainerBuilder containerBuilder)
{
containerBuilder.AddSingleton(typeof(EventBus.EventBus));
containerBuilder.AddSingleton(typeof(ConfigLocator), typeof(IConfigLocator));
containerBuilder.AddSingleton(typeof(SceneLoader.SceneLoader));
containerBuilder.AddSingleton(typeof(InputService),typeof(IInputService));
containerBuilder.OnContainerBuilt += Bootstrap;
containerBuilder.AddSingleton(typeof(AppStateMachine));
containerBuilder.AddSingleton(typeof(AppStateMachineContext));
containerBuilder.AddSingleton(typeof(CameraFactory));
containerBuilder.AddSingleton(typeof(CameraStateMachine));
containerBuilder.AddSingleton(typeof(CameraStateMachineContext));
}
private Loading initialLoading;
private Container _thatRightContainer;
private void Bootstrap(Container container)
{
_thatRightContainer = container;
container.Resolve<EventBus.EventBus>().Subscribe(this);
container.Resolve<SceneLoader.SceneLoader>();
container.Resolve<IInputService>();
container.Resolve<CameraFactory>().CreateCameraStateMachine(container.Resolve<CameraStateMachine>()).Forget();
initialLoading = new Loading(3, () => EssentialLoadEnded(container));
}
private void EssentialLoadEnded(Container container)
{
container.Resolve<AppStateMachine>().SwitchState(AppStates.Bootstrap).AllowStateTransition(AppStates.Gameplay);
container.Resolve<EventBus.EventBus>().Unsubscribe(this);
}
public void SceneConfigsLoaded()
{
initialLoading.DoProgress();
}
public void InputServiceInitialized()
{
initialLoading.DoProgress();
}
public void CameraInitialized(CameraStateMachineContext.CameraLoadedData data)
{
_thatRightContainer.Resolve<CameraStateMachineContext>().cameraLoadedData = data;
_thatRightContainer.Resolve<CameraStateMachine>().SwitchState(CameraMode.None)
.AllowStateTransition(CameraMode.FirstPerson);
initialLoading.DoProgress();
}
}
}