Files
Infratest/Assets/Code/Infrastructure/Input/InputService.cs
T
2026-01-20 20:38:20 +03:00

61 lines
2.6 KiB
C#

using System;
using Code.Infrastructure.Configs;
using Code.Infrastructure.EventBus;
using Cysharp.Threading.Tasks;
using UnityEngine.AddressableAssets;
using UnityEngine.InputSystem;
using UnityEngine.ResourceManagement.AsyncOperations;
namespace Code.Infrastructure.Input
{
[Config("Configs/InputService")]
public class InputService : IInputService
{
[ToConfig] public InputActionAsset inputActionAsset;
private EventBus.EventBus _eventBus;
public InputService(IConfigLocator configLocator, EventBus.EventBus eventBus)
{
_eventBus = eventBus;
LoadConfigs(configLocator.TryGetConfigAssetReference<InputServiceConfig>()).Forget();
}
private AsyncOperationHandle<InputServiceConfig> _configHandle;
private async UniTaskVoid LoadConfigs(AssetReference configReference)
{
_configHandle = Addressables.LoadAssetAsync<InputServiceConfig>(configReference);
await _configHandle.ToUniTask();
inputActionAsset = _configHandle.Result.inputActionAsset;
// inputActionAsset.actionMaps[(int)ActionMappings.Debug].Enable();
// inputActionAsset.actionMaps[(int)ActionMappings.Gameplay].Enable();
_eventBus.RaiseEvent<IInputServiceInitializedHandle>(h => h.InputServiceInitialized());
}
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 BindActionCancel(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 UnbindActionCanceled(int mapId, int actionId, Action<InputAction.CallbackContext> action) =>
inputActionAsset
.actionMaps[mapId].actions[actionId].canceled -= action;
}
public interface IInputServiceInitializedHandle : IGlobalSubscriber
{
void InputServiceInitialized();
}
}