moved input controls to addressables
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user