69 lines
2.7 KiB
C#
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();
|
|
}
|
|
}
|
|
} |