2025-07-09 09:45:11 +00:00
|
|
|
using System;
|
2025-07-08 10:46:31 +00:00
|
|
|
using UnityEngine;
|
|
|
|
using UnityEngine.InputSystem;
|
|
|
|
|
|
|
|
namespace DDD
|
|
|
|
{
|
|
|
|
public enum InputActionMaps
|
|
|
|
{
|
|
|
|
None = 0,
|
|
|
|
Ui = 1,
|
|
|
|
Restaurant = 2,
|
|
|
|
}
|
2025-07-09 09:45:11 +00:00
|
|
|
|
|
|
|
[Flags]
|
|
|
|
public enum RestaurantActions
|
2025-07-08 10:46:31 +00:00
|
|
|
{
|
2025-07-09 09:45:11 +00:00
|
|
|
None = 0,
|
|
|
|
Move = 1<<0,
|
|
|
|
Dash = 1<<1,
|
|
|
|
Interact = 1<<2
|
2025-07-08 10:46:31 +00:00
|
|
|
}
|
|
|
|
|
2025-07-09 09:45:11 +00:00
|
|
|
public class InputManager : Singleton<InputManager>
|
2025-07-08 10:46:31 +00:00
|
|
|
{
|
|
|
|
private PlayerInput _currentPlayerInput;
|
|
|
|
|
|
|
|
protected override void OnAwake()
|
|
|
|
{
|
|
|
|
base.OnAwake();
|
|
|
|
|
|
|
|
_currentPlayerInput = GetComponent<PlayerInput>();
|
|
|
|
}
|
|
|
|
|
2025-07-10 10:18:07 +00:00
|
|
|
// public void ChangeScene(SceneType sceneType)
|
|
|
|
// {
|
|
|
|
// switch (sceneType)
|
|
|
|
// {
|
|
|
|
// case SceneType.Title:
|
|
|
|
// SwitchCurrentActionMap(InputActionMaps.Ui);
|
|
|
|
// break;
|
|
|
|
// case SceneType.Restaurant:
|
|
|
|
// SwitchCurrentActionMap(InputActionMaps.Restaurant);
|
|
|
|
// break;
|
|
|
|
// default:
|
|
|
|
// throw new System.Exception("Invalid scene name");
|
|
|
|
// }
|
|
|
|
// }
|
2025-07-08 10:46:31 +00:00
|
|
|
|
|
|
|
private bool IsNullCurrentPlayerInput()
|
|
|
|
{
|
|
|
|
if (_currentPlayerInput && _currentPlayerInput.enabled) return false;
|
|
|
|
|
|
|
|
Debug.Log("CurrentPlayerInput가 할당되지 않았습니다.");
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public InputAction GetAction(InputActionMaps actionMapName, string actionName)
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return null;
|
|
|
|
|
|
|
|
var actionMap = _currentPlayerInput.actions.FindActionMap(actionMapName.ToString(), true);
|
|
|
|
if (actionMap == null)
|
|
|
|
{
|
|
|
|
Debug.LogError($"Action Map '{actionMapName}' not found!");
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
var action = actionMap.FindAction(actionName, true);
|
|
|
|
if (action == null)
|
|
|
|
{
|
|
|
|
Debug.LogError($"Action '{actionName}' not found in Action Map '{actionMapName}'!");
|
|
|
|
}
|
|
|
|
|
|
|
|
return action;
|
|
|
|
}
|
|
|
|
|
|
|
|
public string GetBoundKey(InputActionMaps actionMapName, string actionName)
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return null;
|
|
|
|
|
|
|
|
var actionMap = _currentPlayerInput.actions.FindActionMap(actionMapName.ToString(), true);
|
|
|
|
if (actionMap == null)
|
|
|
|
{
|
|
|
|
Debug.LogError($"Action Map '{actionMapName}' not found!");
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
var action = actionMap.FindAction(actionName, true);
|
|
|
|
if (action == null)
|
|
|
|
{
|
|
|
|
Debug.LogError($"Action '{actionName}' not found in Action Map '{actionMapName}'!");
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 첫 번째 바인딩에서 키 이름 가져오기
|
|
|
|
foreach (var binding in action.bindings)
|
|
|
|
{
|
|
|
|
if (!string.IsNullOrEmpty(binding.path))
|
|
|
|
{
|
|
|
|
// 키 이름만 추출
|
|
|
|
var key = InputControlPath.ToHumanReadableString(binding.path,
|
|
|
|
InputControlPath.HumanReadableStringOptions.OmitDevice);
|
|
|
|
return key;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Debug.LogWarning($"No bindings found for action '{actionName}' in Action Map '{actionMapName}'.");
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public string GetBoundKey(InputAction inputAction)
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return null;
|
|
|
|
|
|
|
|
if (inputAction == null)
|
|
|
|
{
|
|
|
|
Debug.LogError($"Action not found'!");
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 첫 번째 바인딩에서 키 이름 가져오기
|
|
|
|
foreach (var binding in inputAction.bindings)
|
|
|
|
{
|
|
|
|
if (!string.IsNullOrEmpty(binding.path))
|
|
|
|
{
|
|
|
|
// 키 이름만 추출
|
|
|
|
var key = InputControlPath.ToHumanReadableString(binding.path,
|
|
|
|
InputControlPath.HumanReadableStringOptions.OmitDevice);
|
|
|
|
return key;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Debug.LogWarning($"No bindings found for action '{inputAction}'");
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool IsCurrentActionMap(InputActionMaps inputActionMaps)
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return false;
|
|
|
|
|
|
|
|
return _currentPlayerInput.currentActionMap.ToString() == inputActionMaps.ToString();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void SwitchCurrentActionMap(string inputActionMaps)
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return;
|
|
|
|
|
|
|
|
_currentPlayerInput.SwitchCurrentActionMap(inputActionMaps);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void SwitchCurrentActionMap(InputActionMaps inputActionMaps)
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return;
|
|
|
|
|
|
|
|
_currentPlayerInput.SwitchCurrentActionMap(inputActionMaps.ToString());
|
|
|
|
}
|
|
|
|
|
|
|
|
public InputActionMap GetCurrentInputActionMap()
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return null;
|
|
|
|
|
|
|
|
return _currentPlayerInput.currentActionMap;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void EnableCurrentPlayerInput()
|
|
|
|
{
|
|
|
|
if (!_currentPlayerInput) return;
|
|
|
|
|
|
|
|
_currentPlayerInput.enabled = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void DisableCurrentPlayerInput()
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return;
|
|
|
|
|
|
|
|
_currentPlayerInput.enabled = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void DisableAllActionMaps()
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return;
|
|
|
|
|
|
|
|
foreach (var element in _currentPlayerInput.actions.actionMaps)
|
|
|
|
{
|
|
|
|
element.Disable();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void DisableAllActionsExcept(string exceptActionName)
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return;
|
|
|
|
|
|
|
|
var exceptAction = _currentPlayerInput.currentActionMap.FindAction(exceptActionName);
|
|
|
|
|
|
|
|
foreach (var action in _currentPlayerInput.currentActionMap.actions)
|
|
|
|
{
|
|
|
|
if (action != exceptAction)
|
|
|
|
{
|
|
|
|
action.Disable();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
action.Enable();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void EnableAllActionsMaps()
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return;
|
|
|
|
|
|
|
|
foreach (var action in _currentPlayerInput.actions)
|
|
|
|
{
|
|
|
|
action.Enable();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void EnableAction(string actionName)
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return;
|
|
|
|
|
|
|
|
var action = _currentPlayerInput.currentActionMap.FindAction(actionName);
|
|
|
|
if (action == null)
|
|
|
|
{
|
|
|
|
Debug.Log($"현재 Action Map인 {_currentPlayerInput.currentActionMap}에는 {actionName} Action이 존재하지 않습니다");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
action.Enable();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void DisableAction(string actionName)
|
|
|
|
{
|
|
|
|
if (IsNullCurrentPlayerInput()) return;
|
|
|
|
|
|
|
|
var action = _currentPlayerInput.currentActionMap.FindAction(actionName);
|
|
|
|
if (action == null)
|
|
|
|
{
|
|
|
|
Debug.Log($"현재 Action Map인 {_currentPlayerInput.currentActionMap}에는 {actionName} Action이 존재하지 않습니다");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
action.Disable();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|