Neg_Utils/NEG/UI/UnityUi/MonoUiInputManger.cs
2025-10-06 17:31:41 +02:00

115 lines
4.1 KiB
C#

using NEG.UI.UnityUi.Window;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.UI;
namespace NEG.UI.UnityUi
{
public enum SelectionSource
{
Pointer,
Direction
}
public class UiInputModule
{
public SelectionSource CurrentSelectionSource { get; protected set; }
}
public class DefaultInputModule : UiInputModule
{
public DefaultInputModule()
{
// var defaultActions = new DefaultInputActions();
// InputActionReference.Create(defaultActions.UI.Navigate).action.performed +=
// ctx => OnSelectionChangeStarted();
// InputActionReference.Create(defaultActions.UI.Cancel).action.performed +=
// _ => UiManager.Instance.UseBack();
// defaultActions.Enable();
if (Gamepad.current != null)
SetDirectionInput();
else
SetPointerInput();
//var keyboardAction = new InputAction(binding: "/<Keyboard>/*");
//keyboardAction.performed += (context) => CurrentInputSource = EInputSource.Keyboard;
//keyboardAction.Enable();
//var gamepadAction = new InputAction(binding: "/<Gamepad>/*");
//gamepadAction.performed += (context) => OnSelectionChangeStarted();
//gamepadAction.Enable();
var mouseAction = new InputAction(binding: "/<Mouse>/*");
mouseAction.performed += context =>
{
if (CurrentSelectionSource == SelectionSource.Pointer)
return;
SetPointerInput();
};
mouseAction.Enable();
}
private void OnSelectionChangeStarted()
{
if (CurrentSelectionSource == SelectionSource.Direction &&
EventSystem.current.currentSelectedGameObject != null)
return;
SetDirectionInput();
}
private void SetDirectionInput()
{
// if (EventSystem.current == null || MonoUiManager.Instance == null) return;
// CurrentSelectionSource = SelectionSource.Direction;
// Cursor.visible = false;
// if (EventSystem.current.currentSelectedGameObject == null &&
// MonoUiManager.Instance.CurrentMainWindow != null)
// {
// EventSystem.current.SetSelectedGameObject(((MonoWindow)MonoUiManager.Instance.CurrentMainWindow)
// .DefaultSelectedItem);
// return;
// }
//
// var data = new PointerEventData(EventSystem.current);
// var currentSelected = EventSystem.current.currentSelectedGameObject;
// if (currentSelected != null)
// {
// for (var current = EventSystem.current.currentSelectedGameObject.transform;
// current != null;
// current = current.parent)
// ExecuteEvents.Execute(current.gameObject, data, ExecuteEvents.pointerExitHandler);
// }
//
// EventSystem.current.SetSelectedGameObject(currentSelected);
}
private void SetPointerInput()
{
CurrentSelectionSource = SelectionSource.Pointer;
Cursor.visible = true;
if (EventSystem.current == null)
{
SetDirectionInput();
return;
}
if (EventSystem.current.currentInputModule == null)
return;
EventSystem.current.SetSelectedGameObject(null);
var module = (InputSystemUIInputModule)EventSystem.current.currentInputModule;
var result = module.GetLastRaycastResult(0);
if (result.gameObject == null)
return;
var data = new PointerEventData(EventSystem.current);
for (var current = result.gameObject.transform;
current != null;
current = current.parent)
ExecuteEvents.Execute(current.gameObject, data, ExecuteEvents.pointerEnterHandler);
}
}
}