68 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|
|
} |