Files
CourierOld/Game/CourierOld/Assets/Code/Input/InputService.cs
T

202 lines
7.4 KiB
C#

using System;
using UnityEngine;
using UnityEngine.InputSystem;
namespace Code.Input
{
public class InputService : IInputService, IDisposable
{
private readonly InputActionAsset _inputActionAsset;
public Vector2 LookInput { get; private set; }
public float ZoomInput { get; private set; }
public Vector2 MoveInput { get; private set; }
public bool JumpPressed { get; private set; }
public bool SlidePressed { get; private set; }
public bool DashPressed { get; private set; }
public bool ToggleCameraModePressed { get; private set; }
public InputService(InputActionAsset inputActionAsset)
{
_inputActionAsset = inputActionAsset;
SetupInputCallbacks();
inputActionAsset.actionMaps[(int)ActionMappings.Debug].Enable();
}
// Обработка всех карт ввода
private void SetupInputCallbacks()
{
SetupGameplayInputCallbacks();
}
// Обработка геймплейной карты ввода
private void SetupGameplayInputCallbacks()
{
// Инициализация геймплейной карты ввода
var gameplayMap = _inputActionAsset.FindActionMap("Gameplay");
// Обработка взгляда (камера)
var lookAction = gameplayMap.FindAction("Look");
if (lookAction != null)
{
lookAction.performed += OnLookPerformed;
lookAction.canceled += OnLookCanceled;
}
// Обработка зума (камера)
var zoomAction = gameplayMap.FindAction("Zoom");
if (zoomAction != null)
{
zoomAction.performed += OnZoomPerformed;
zoomAction.canceled += OnZoomCanceled;
}
// Обработка движения (персонаж)
var moveAction = gameplayMap.FindAction("Move");
if (moveAction != null)
{
moveAction.performed += OnMovePerformed;
moveAction.canceled += OnMoveCanceled;
}
// Обработка прыжков (персонаж)
var jumpAction = gameplayMap.FindAction("Jump");
if (jumpAction != null)
{
jumpAction.performed += OnJumpPerformed;
jumpAction.canceled += OnJumpCanceled;
}
// Обработка слайда (персонаж)
var slideAction = gameplayMap.FindAction("Slide");
if (slideAction != null)
{
slideAction.performed += OnSlidePerformed;
slideAction.canceled += OnSlideCanceled;
}
// Обработка слайда (персонаж)
var dashAction = gameplayMap.FindAction("Dash");
if (dashAction != null)
{
dashAction.performed += OnDashPerformed;
dashAction.canceled += OnDashCanceled;
}
// Обработка переключения режима камеры
var toggleCameraModeAction = gameplayMap.FindAction("ToggleCameraMode");
if (toggleCameraModeAction != null)
{
toggleCameraModeAction.performed += OnToggleCameraModePerformed;
toggleCameraModeAction.canceled += OnToggleCameraModeCanceled;
}
}
private void OnLookPerformed(InputAction.CallbackContext context)
{
LookInput = context.ReadValue<Vector2>();
}
private void OnLookCanceled(InputAction.CallbackContext context)
{
LookInput = Vector2.zero;
}
private void OnZoomPerformed(InputAction.CallbackContext context)
{
ZoomInput = context.ReadValue<float>();
}
private void OnZoomCanceled(InputAction.CallbackContext context)
{
ZoomInput = 0f;
}
private void OnMovePerformed(InputAction.CallbackContext context)
{
MoveInput = context.ReadValue<Vector2>();
}
private void OnMoveCanceled(InputAction.CallbackContext context)
{
MoveInput = Vector2.zero;
}
private void OnJumpPerformed(InputAction.CallbackContext context)
{
JumpPressed = true;
}
private void OnJumpCanceled(InputAction.CallbackContext context)
{
JumpPressed = false;
}
private void OnSlidePerformed(InputAction.CallbackContext context)
{
SlidePressed = true;
}
private void OnSlideCanceled(InputAction.CallbackContext context)
{
SlidePressed = false;
}
private void OnDashPerformed(InputAction.CallbackContext context)
{
DashPressed = true;
}
private void OnDashCanceled(InputAction.CallbackContext context)
{
DashPressed = false;
}
private void OnToggleCameraModePerformed(InputAction.CallbackContext context)
{
ToggleCameraModePressed = true;
}
private void OnToggleCameraModeCanceled(InputAction.CallbackContext context)
{
ToggleCameraModePressed = false;
}
public void EnableMap(ActionMappings actionMap) => _inputActionAsset.actionMaps[(int)actionMap].Enable();
public void DisableMap(ActionMappings actionMap) => _inputActionAsset.actionMaps[(int)actionMap].Disable();
public void DebugBindAction(int mapId, int actionId, Action<InputAction.CallbackContext> action) => _inputActionAsset
.actionMaps[mapId].actions[actionId].performed += action;
public void DebugUnbindAction(int mapId, int actionId, Action<InputAction.CallbackContext> action) =>
_inputActionAsset
.actionMaps[mapId].actions[actionId].performed -= action;
public void Dispose()
{
var gameplayMap = _inputActionAsset.FindActionMap("Gameplay");
gameplayMap.FindAction("Look").performed -= OnLookPerformed;
gameplayMap.FindAction("Look").canceled -= OnLookCanceled;
gameplayMap.FindAction("Zoom").performed -= OnZoomPerformed;
gameplayMap.FindAction("Zoom").canceled -= OnZoomCanceled;
gameplayMap.FindAction("Move").performed -= OnMovePerformed;
gameplayMap.FindAction("Move").canceled -= OnMoveCanceled;
gameplayMap.FindAction("Jump").performed -= OnJumpPerformed;
gameplayMap.FindAction("Jump").canceled -= OnJumpCanceled;
gameplayMap.FindAction("Slide").performed -= OnSlidePerformed;
gameplayMap.FindAction("Slide").canceled -= OnSlideCanceled;
gameplayMap.FindAction("Dash").performed -= OnDashPerformed;
gameplayMap.FindAction("Dash").canceled -= OnDashCanceled;
gameplayMap.FindAction("ToggleCameraMode").performed -= OnToggleCameraModePerformed;
gameplayMap.FindAction("ToggleCameraMode").canceled -= OnToggleCameraModeCanceled;
}
}
}