202 lines
7.4 KiB
C#
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;
|
|
}
|
|
}
|
|
} |