83 lines
3.4 KiB
C#
83 lines
3.4 KiB
C#
using Code.App.StateMachine;
|
|
using Code.Configs;
|
|
using Code.Gameplay.Camera;
|
|
using Code.Input;
|
|
using Code.Scenes;
|
|
using Code.StaticData;
|
|
using Reflex.Core;
|
|
using Reflex.Injectors;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
|
|
namespace Code.App
|
|
{
|
|
public class BootstrapInstaller : MonoBehaviour, IInstaller
|
|
{
|
|
|
|
public void InstallBindings(ContainerBuilder containerBuilder)
|
|
{
|
|
InstallStaticData(containerBuilder, out IStaticDataService staticDataService);
|
|
|
|
InstallInfrastructureUnit(containerBuilder, staticDataService);
|
|
|
|
containerBuilder.AddSingleton(typeof(InputService), typeof(IInputService));
|
|
|
|
InitializeCamera(containerBuilder, staticDataService);
|
|
|
|
containerBuilder.AddSingleton(typeof(SceneLoaderService), typeof(ISceneLoaderService));
|
|
|
|
containerBuilder.OnContainerBuilt += Bootstrap;
|
|
}
|
|
|
|
private void InitializeCamera(ContainerBuilder containerBuilder, IStaticDataService staticDataService)
|
|
{
|
|
// CameraService cameraService = Instantiate(staticDataService.CameraConfig.cameraPrefab);
|
|
// containerBuilder.AddSingleton(cameraService);
|
|
// DontDestroyOnLoad(cameraService);
|
|
|
|
Camera camera = Instantiate(staticDataService.CameraConfig.cameraPrefab);
|
|
DontDestroyOnLoad(camera);
|
|
containerBuilder.AddSingleton(camera);
|
|
}
|
|
|
|
private void InstallInfrastructureUnit(ContainerBuilder containerBuilder, IStaticDataService staticDataService)
|
|
{
|
|
GameObject infrastructureUnit = Instantiate(staticDataService.AppConfig.infrastructureUnitPrefab);
|
|
DontDestroyOnLoad(infrastructureUnit);
|
|
|
|
containerBuilder.AddSingleton(infrastructureUnit);
|
|
containerBuilder.AddSingleton(infrastructureUnit.GetComponent<ICoroutineRunner>(),
|
|
typeof(ICoroutineRunner));
|
|
containerBuilder.AddSingleton(infrastructureUnit.AddComponent<AppStateMachine>());
|
|
containerBuilder.AddSingleton(infrastructureUnit.AddComponent<CameraStateMachine>());
|
|
}
|
|
|
|
private void InstallStaticData(ContainerBuilder containerBuilder, out IStaticDataService staticDataService)
|
|
{
|
|
staticDataService = new StaticDataService();
|
|
staticDataService.Load();
|
|
|
|
containerBuilder.AddSingleton(staticDataService, typeof(IStaticDataService));
|
|
containerBuilder.AddSingleton(staticDataService.InputConfig.inputActionAsset, typeof(InputActionAsset));
|
|
containerBuilder.AddSingleton(staticDataService.CameraConfig, typeof(CameraConfig));
|
|
containerBuilder.AddSingleton(staticDataService.CharacterConfig, typeof(CharacterConfig));
|
|
}
|
|
|
|
private void Bootstrap(Container container)
|
|
{
|
|
AppStateMachine appStateMachine = container.Resolve<AppStateMachine>();
|
|
appStateMachine.Initialize();
|
|
|
|
AttributeInjector.Inject(appStateMachine.StateMachineContext, container);
|
|
|
|
CameraStateMachine cameraStateMachine = container.Resolve<CameraStateMachine>();
|
|
AttributeInjector.Inject(cameraStateMachine.StateMachineContext, container);
|
|
|
|
cameraStateMachine.Initialize();
|
|
|
|
// TODO: поменяно для теста
|
|
appStateMachine
|
|
.SwitchState(AppState.MovementDev);
|
|
}
|
|
}
|
|
} |