common extensions and some utilities

This commit is contained in:
2025-03-19 00:18:40 +01:00
parent f80fd22a00
commit e62bd2aa6d
35 changed files with 323 additions and 58 deletions

View File

@@ -9,12 +9,13 @@ namespace RebootKit.Engine.Services.Game {
public ControllerAsset[] Controllers;
}
public abstract class GameModeAsset : ScriptableObject {
public abstract class GameModeAsset : FactoryAsset<GameMode> {
[field: SerializeField]
public GameModeConfig GameModeConfig { get; private set; }
public GameMode Create() {
GameMode gameMode = new GameMode(GameModeConfig);
public override GameMode Create(DIContext context) {
GameMode gameMode = new(GameModeConfig);
context.Inject(gameMode);
ConfigureGameMode(gameMode);
return gameMode;
}
@@ -25,6 +26,9 @@ namespace RebootKit.Engine.Services.Game {
public class GameMode : IDisposable {
private readonly GameModeConfig _config;
private readonly ControllersManager _controllersManager;
[Inject]
private DIContext _diContext;
private CancellationTokenSource _destroyCancellationTokenSource;
@@ -44,7 +48,7 @@ namespace RebootKit.Engine.Services.Game {
}
public async Awaitable<bool> Start(CancellationToken cancellationToken) {
_controllersManager.Add(_config.Controllers);
_controllersManager.Add(_config.Controllers, _diContext);
await _controllersManager.Start(cancellationToken);
_isRunning = true;

View File

@@ -1,21 +1,19 @@
using System.Threading;
using Cysharp.Threading.Tasks;
using RebootKit.Engine.Foundation;
using RebootKit.Engine.Services.Console;
using UnityEngine.Assertions;
namespace RebootKit.Engine.Services.Game {
public class GameService : IService {
private static readonly Logger Logger = new(nameof(GameService));
[Inject]
private DIContext _diContext;
private GameModeAsset _gameModeAsset;
private GameMode _gameMode;
private bool _running;
public async UniTask OnWakeUp(CancellationToken cancellationToken) {
await UniTask.Yield(cancellationToken);
}
public void Dispose() {
_running = false;
_gameMode.Dispose();
@@ -24,7 +22,7 @@ namespace RebootKit.Engine.Services.Game {
public async UniTask Start(GameModeAsset asset, CancellationToken cancellationToken) {
Assert.IsNotNull(asset);
_gameMode = asset.Create();
_gameMode = asset.Create(_diContext);
await _gameMode.Start(cancellationToken);
Run(cancellationToken).Forget();

View File

@@ -4,8 +4,9 @@ using UnityEngine;
namespace RebootKit.Engine.Services.Game {
[CreateAssetMenu(menuName = RConsts.ServiceAssetMenu + "Game")]
public class GameServiceAsset : ServiceAsset<GameService> {
public override GameService Create() {
return new GameService();
public override GameService Create(DIContext context) {
GameService service = context.Create<GameService>();
return service;
}
}
}