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

@@ -44,14 +44,11 @@ namespace RebootKit.Engine.Services.Console {
public ConsoleService(Config config) {
_config = config;
}
public async UniTask OnWakeUp(CancellationToken cancellationToken) {
_logger.Info("Waking up");
_ui = UnityEngine.Object.Instantiate(_config.ConsoleUIPrefab);
UnityEngine.Object.DontDestroyOnLoad(_ui.gameObject);
await UniTask.Yield(cancellationToken);
_config.ToggleAction.Action.Enable();
_config.ToggleAction.Action.performed += OnToggleAction;
@@ -156,9 +153,11 @@ namespace RebootKit.Engine.Services.Console {
_ui.SetVisibility(!_ui.IsVisible);
if (_ui.IsVisible) {
// RR.Input().DisableControls();
RR.Input().DisableControls();
RR.Input().UnlockCursor();
} else {
RR.Input().EnableControls();
RR.Input().LockCursor();
}
}

View File

@@ -13,8 +13,10 @@ namespace RebootKit.Engine.Services.Console {
[SerializeField]
private bool _loadCVarsFromResources = true;
public override ConsoleService Create() {
public override ConsoleService Create(DIContext context) {
ConsoleService service = new(_config);
context.Inject(service);
foreach (CVar cvar in _initialCVars) {
service.Replace(cvar);
cvar.Reset();
@@ -28,7 +30,7 @@ namespace RebootKit.Engine.Services.Console {
}
}
return new ConsoleService(_config);
return service;
}
}
}

View File

@@ -1,26 +1,33 @@
using System.Text;
using UnityEngine;
using UnityEngine.UIElements;
using Logger = RebootKit.Engine.Foundation.Logger;
namespace RebootKit.Engine.Services.Console {
public class ConsoleUI : MonoBehaviour {
private static readonly Logger Logger = new(nameof(ConsoleUI));
private StringBuilder _content = new();
[SerializeField]
private UIDocument _document;
private Label _labelMessage;
private TextField _textField;
private Button _submitButton;
public bool IsVisible { get; private set; }
private void Awake() {
private void OnEnable() {
IsVisible = _document.enabled;
VisualElement root = _document.rootVisualElement;
return;
// _textField = root.Q<TextField>("console-text-field");
// _submitButton = root.Q<Button>("console-btn-submit");
// _submitButton.clicked += OnSubmitButtonClicked;
_labelMessage = root.Q<Label>("console-window-message");
_labelMessage.text = "SIEMA";
_textField = root.Q<TextField>("console-text-field");
_submitButton = root.Q<Button>("console-btn-submit");
_submitButton.clicked += OnSubmitButtonClicked;
}
private void OnSubmit(string input) {
@@ -30,22 +37,26 @@ namespace RebootKit.Engine.Services.Console {
public void SetVisibility(bool visible) {
_document.enabled = visible;
IsVisible = visible;
}
public void Write(string message) {
_content.Append(message);
//_textField.value = _content.ToString();
_labelMessage.text = _content.ToString();
_labelMessage.MarkDirtyRepaint();
}
public void Clear() {
_content.Clear();
_labelMessage.text = "";
if (_textField != null) {
_textField.value = "";
_textField.label = "";
}
}
private void OnSubmitButtonClicked() {
Logger.Info("Submit");
OnSubmit(_textField.value);
}
}

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

View File

@@ -7,8 +7,10 @@ namespace RebootKit.Engine.Services.Input {
[SerializeField]
private InputService.Config _config;
public override InputService Create() {
return new InputService(_config);
public override InputService Create(DIContext context) {
InputService instance = new(_config);
context.Inject(instance);
return instance;
}
}
}

View File

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