moved input controls to addressables

This commit is contained in:
2025-06-18 17:24:34 +02:00
parent 518fd29d75
commit 62b484fa49
3 changed files with 61 additions and 14 deletions

View File

@@ -99,22 +99,48 @@ namespace RebootKit.Engine.Main {
} }
// Assets API // Assets API
static readonly List<GameModeAsset> s_gameModesAssets = new List<GameModeAsset>(); static readonly List<GameModeAsset> s_GameModesAssets = new List<GameModeAsset>();
static readonly List<WorldConfigAsset> s_worldConfigsAssets = new List<WorldConfigAsset>(); static readonly List<WorldConfigAsset> s_WorldConfigsAssets = new List<WorldConfigAsset>();
public static IReadOnlyList<GameModeAsset> GameModesAssets => s_gameModesAssets; public static IReadOnlyList<GameModeAsset> GameModesAssets => s_GameModesAssets;
public static IReadOnlyList<WorldConfigAsset> WorldConfigsAssets => s_worldConfigsAssets; public static IReadOnlyList<WorldConfigAsset> WorldConfigsAssets => s_WorldConfigsAssets;
public static async UniTask InitializeAssetsAsync(CancellationToken cancellationToken) { public static async UniTask InitializeAssetsAsync(CancellationToken cancellationToken) {
s_gameModesAssets.Clear(); s_GameModesAssets.Clear();
s_worldConfigsAssets.Clear(); s_WorldConfigsAssets.Clear();
s_Logger.Info("Loading game assets"); s_Logger.Info("Loading game assets");
await Addressables.LoadAssetsAsync<GameModeAsset>("game_mode", asset => { s_gameModesAssets.Add(asset); }).ToUniTask(cancellationToken: cancellationToken); await Addressables.LoadAssetsAsync<GameModeAsset>("game_mode", asset => { s_GameModesAssets.Add(asset); }).ToUniTask(cancellationToken: cancellationToken);
s_Logger.Info($"Loaded {s_gameModesAssets.Count} game modes"); s_Logger.Info($"Loaded {s_GameModesAssets.Count} game modes");
await Addressables.LoadAssetsAsync<WorldConfigAsset>("world", asset => { s_worldConfigsAssets.Add(asset); }).ToUniTask(cancellationToken: cancellationToken); await Addressables.LoadAssetsAsync<WorldConfigAsset>("world", asset => { s_WorldConfigsAssets.Add(asset); }).ToUniTask(cancellationToken: cancellationToken);
}
public static GameModeAsset GetGameMode(string name) {
if (string.IsNullOrEmpty(name)) {
throw new ArgumentException("Game mode name cannot be null or empty", nameof(name));
}
GameModeAsset gameMode = s_GameModesAssets.Find(asset => asset.name.Equals(name, StringComparison.Ordinal));
if (!gameMode) {
throw new KeyNotFoundException($"Game mode '{name}' not found");
}
return gameMode;
}
public static WorldConfigAsset GetWorldConfigAsset(string name) {
if (string.IsNullOrEmpty(name)) {
throw new ArgumentException("World config name cannot be null or empty", nameof(name));
}
WorldConfigAsset worldConfig = s_WorldConfigsAssets.Find(asset => asset.Config.name.Equals(name, StringComparison.Ordinal));
if (!worldConfig) {
throw new KeyNotFoundException($"World config '{name}' not found");
}
return worldConfig;
} }
// Game API // Game API

View File

@@ -1,29 +1,45 @@
using System; using System;
using RebootKit.Engine.Foundation; using RebootKit.Engine.Foundation;
using UnityEngine; using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
using UnityEngine.ResourceManagement.AsyncOperations;
namespace RebootKit.Engine.Services.Input { namespace RebootKit.Engine.Services.Input {
public class InputService : IService { public class InputService : IService {
readonly Config m_Config; readonly Config m_Config;
AsyncOperationHandle<InputActionAsset> m_Handle;
InputActionAsset m_InputActionAsset;
public InputService(Config config) { public InputService(Config config) {
m_Config = config; m_Config = config;
m_Handle = Addressables.LoadAssetAsync<InputActionAsset>(m_Config.inputAssetReference);
m_InputActionAsset = m_Handle.WaitForCompletion();
} }
public void Dispose() { public void Dispose() {
m_InputActionAsset = null;
Addressables.Release(m_Handle);
m_Handle = default;
} }
public void EnableControls() { public void EnableControls() {
m_Config.inputAsset.Enable(); m_InputActionAsset.Enable();
} }
public void DisableControls() { public void DisableControls() {
m_Config.inputAsset.Disable(); m_InputActionAsset.Disable();
}
public bool AreControlsEnabled() {
return m_InputActionAsset.enabled;
} }
public InputAction FindInputAction(string path) { public InputAction FindInputAction(string path) {
return m_Config.inputAsset.FindAction(path); return m_InputActionAsset.FindAction(path);
} }
public void LockCursor() { public void LockCursor() {
@@ -38,7 +54,7 @@ namespace RebootKit.Engine.Services.Input {
[Serializable] [Serializable]
public class Config { public class Config {
public InputActionAsset inputAsset; public AssetReferenceT<InputActionAsset> inputAssetReference;
} }
} }
} }

View File

@@ -13,4 +13,9 @@ MonoBehaviour:
m_Name: service_input m_Name: service_input
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Config: m_Config:
inputAsset: {fileID: -944628639613478452, guid: f991e9abd9a53ee4b94b329a5ce96cb2, type: 3} inputAssetReference:
m_AssetGUID: f991e9abd9a53ee4b94b329a5ce96cb2
m_SubObjectName:
m_SubObjectGUID:
m_SubObjectType:
m_EditorAssetChanged: 0