Second commit
This commit is contained in:
commit
36840f3ad4
999 files changed
+61364
No files matched your search
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
using Code.Infrastructure.Configs;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||
|
||||
namespace Code.Infrastructure.Input
|
||||
{
|
||||
public interface IInputService
|
||||
{
|
||||
void EnableMap(ActionMappings actionMap);
|
||||
void DisableMap(ActionMappings actionMap);
|
||||
void BindActionPerformed(int mapId, int actionId, Action<InputAction.CallbackContext> action);
|
||||
void BindActionCancelled(int mapId, int actionId, Action<InputAction.CallbackContext> action);
|
||||
void UnbindActionPerformed(int mapId, int actionId, Action<InputAction.CallbackContext> action);
|
||||
void UnbindActionCancelled(int mapId, int actionId, Action<InputAction.CallbackContext> action);
|
||||
}
|
||||
|
||||
public interface IInputServiceInitializer
|
||||
{
|
||||
UniTask LoadConfigs();
|
||||
}
|
||||
|
||||
public class InputService : IInputService, IInputServiceInitializer
|
||||
{
|
||||
private InputActionAsset _inputActionAsset;
|
||||
|
||||
private AsyncOperationHandle<InputServiceConfig> _configHandle;
|
||||
private readonly AssetReference _configReference;
|
||||
|
||||
public InputService(IConfigLocator configLocator)
|
||||
{
|
||||
_configReference = configLocator.TryGetConfigAssetReference<InputServiceConfig>();
|
||||
}
|
||||
|
||||
public async UniTask LoadConfigs()
|
||||
{
|
||||
_configHandle = Addressables.LoadAssetAsync<InputServiceConfig>(_configReference);
|
||||
|
||||
await _configHandle.ToUniTask();
|
||||
|
||||
_inputActionAsset = _configHandle.Result.inputActionAsset;
|
||||
}
|
||||
|
||||
public void EnableMap(ActionMappings actionMap) => _inputActionAsset.actionMaps[(int)actionMap].Enable();
|
||||
public void DisableMap(ActionMappings actionMap) => _inputActionAsset.actionMaps[(int)actionMap].Disable();
|
||||
|
||||
public void BindActionPerformed(int mapId, int actionId, Action<InputAction.CallbackContext> action) => _inputActionAsset
|
||||
.actionMaps[mapId].actions[actionId].performed += action;
|
||||
|
||||
public void BindActionCancelled(int mapId, int actionId, Action<InputAction.CallbackContext> action) => _inputActionAsset
|
||||
.actionMaps[mapId].actions[actionId].canceled += action;
|
||||
|
||||
public void UnbindActionPerformed(int mapId, int actionId, Action<InputAction.CallbackContext> action) =>
|
||||
_inputActionAsset
|
||||
.actionMaps[mapId].actions[actionId].performed -= action;
|
||||
|
||||
public void UnbindActionCancelled(int mapId, int actionId, Action<InputAction.CallbackContext> action) =>
|
||||
_inputActionAsset
|
||||
.actionMaps[mapId].actions[actionId].canceled -= action;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2755e684d68a4f79994f0f92e8327a73
|
||||
timeCreated: 1766612399
|
||||
@@ -0,0 +1,13 @@
|
||||
using Code.Infrastructure.Generators;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace Code.Infrastructure.Input
|
||||
{
|
||||
[Config("Configs/InputService")]
|
||||
[CreateAssetMenu(fileName = "InputService", menuName = "Configs/InputService")]
|
||||
public class InputServiceConfig : ScriptableObject
|
||||
{
|
||||
public InputActionAsset inputActionAsset;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a3fe014c5e7645708654c530a664a11d
|
||||
timeCreated: 1785871062
|
||||
Reference in new issue
Block a user