Files
RebootKit/Runtime/Engine/Code/RR.cs
2025-03-30 16:06:57 +02:00

68 lines
2.2 KiB
C#

using System;
using System.Threading;
using Cysharp.Threading.Tasks;
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;
using UnityEngine.Assertions;
using UnityEngine.Events;
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");
ConsoleService m_ConsoleService;
DIContext m_DIContext;
EngineConfigAsset m_EngineConfigAsset;
GameService m_GameService;
InputService m_InputService;
WorldService m_WorldService;
readonly UnityEvent<string, CVarValue> m_CVarChanged = new();
public void Dispose() {
m_CVarChanged.RemoveAllListeners();
}
public async UniTask Init(EngineConfigAsset configAsset, CancellationToken cancellationToken) {
Assert.IsNotNull(configAsset, "Config asset is required");
s_logger.Info("Waking up");
m_EngineConfigAsset = configAsset;
m_DIContext = new DIContext();
m_DIContext.AddInjector(new CVarFieldInjector());
CreateCoreServices();
InitializeAppStateMachine();
await UniTask.Yield(cancellationToken);
}
public void Run() {
OpenMainMenu();
}
TService CreateService<TService>(ServiceAsset<TService> asset) where TService : class, IService {
TService service = asset.Create(m_DIContext);
m_DIContext.Bind(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);
}
}
}