Files
RebootKit/Runtime/Engine/Code/RR.cs
2025-04-14 23:22:38 +02:00

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