80 lines
2.5 KiB
C#
80 lines
2.5 KiB
C#
using System;
|
|
using System.Threading;
|
|
using Cysharp.Threading.Tasks;
|
|
using R3;
|
|
using RebootKit.Engine.Foundation;
|
|
using RebootKit.Engine.Services.Console;
|
|
using RebootKit.Engine.Services.Game;
|
|
using RebootKit.Engine.Services.Input;
|
|
using RebootKit.Engine.Services.Simulation;
|
|
using UnityEngine.Assertions;
|
|
using Logger = RebootKit.Engine.Foundation.Logger;
|
|
|
|
namespace RebootKit.Engine {
|
|
public partial class RR : IDisposable {
|
|
internal static RR s_Shared;
|
|
|
|
static readonly Logger s_logger = new("RR");
|
|
|
|
DIContext m_DIContext;
|
|
|
|
ConsoleService m_ConsoleService;
|
|
|
|
EngineConfigAsset m_EngineConfigAsset;
|
|
GameService m_GameService;
|
|
InputService m_InputService;
|
|
WorldService m_WorldService;
|
|
|
|
DisposableBag m_DisposableBag;
|
|
|
|
public RR() {
|
|
m_DisposableBag = new DisposableBag();
|
|
|
|
m_DIContext = new DIContext();
|
|
// m_DIContext.AddInjector(new CVarFieldInjector());
|
|
}
|
|
|
|
public void Dispose() {
|
|
s_logger.Info("Shutting down");
|
|
m_DisposableBag.Dispose();
|
|
}
|
|
|
|
public async UniTask Init(EngineConfigAsset configAsset, CancellationToken cancellationToken) {
|
|
Assert.IsNotNull(configAsset, "Config asset is required");
|
|
|
|
s_logger.Info("Initializing");
|
|
m_EngineConfigAsset = configAsset;
|
|
|
|
CreateCoreServices();
|
|
CreateServices();
|
|
|
|
await UniTask.Yield(cancellationToken);
|
|
}
|
|
|
|
public void Run() {
|
|
StartGameMode(m_EngineConfigAsset.appConfig.gameConfig.defaultGameMode);
|
|
}
|
|
|
|
TService CreateService<TService>(ServiceAsset<TService> asset) where TService : class, IService {
|
|
TService service = asset.Create(m_DIContext);
|
|
m_DIContext.Bind(service);
|
|
m_DisposableBag.Add(service);
|
|
return service;
|
|
}
|
|
|
|
void CreateCoreServices() {
|
|
s_logger.Debug("Registering core services");
|
|
|
|
m_ConsoleService = CreateService(m_EngineConfigAsset.coreServices.consoleService);
|
|
m_InputService = CreateService(m_EngineConfigAsset.coreServices.inputService);
|
|
m_WorldService = CreateService(m_EngineConfigAsset.coreServices.worldService);
|
|
m_GameService = CreateService(m_EngineConfigAsset.coreServices.gameService);
|
|
}
|
|
|
|
void CreateServices() {
|
|
foreach (ServiceAsset serviceAsset in m_EngineConfigAsset.services) {
|
|
CreateService(serviceAsset);
|
|
}
|
|
}
|
|
}
|
|
} |