Files
Hasebe/Assets/Code/Infrastructure/Input/InputService.cs
T
2026-09-20 15:26:03 +03:00

63 lines
2.7 KiB
C#

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