Files
CourierOld/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs
T
MrTorex fb85b22e96 Вынос настроек персонажа в конфиг
В который сейчас будет добавлено пару новых настроек
2025-10-29 11:17:27 +03:00

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);
}
}
}