common extensions and some utilities
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user