39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
#nullable enable
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
|
|
namespace io.github.hatayama.uLoopMCP
|
|
{
|
|
// Tool instances are created fresh per invocation, so drag state
|
|
// between DragStart/DragMove/DragEnd must be held statically.
|
|
[InitializeOnLoad]
|
|
internal static class MouseDragState
|
|
{
|
|
internal static bool IsDragging => Target != null && PointerData != null;
|
|
internal static GameObject? Target { get; set; }
|
|
internal static PointerEventData? PointerData { get; set; }
|
|
|
|
static MouseDragState()
|
|
{
|
|
// PlayMode exit leaves dangling references to destroyed GameObjects
|
|
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
|
|
}
|
|
|
|
internal static void Clear()
|
|
{
|
|
Target = null;
|
|
PointerData = null;
|
|
}
|
|
|
|
private static void OnPlayModeStateChanged(PlayModeStateChange state)
|
|
{
|
|
if (state == PlayModeStateChange.ExitingPlayMode)
|
|
{
|
|
Clear();
|
|
SimulateMouseUiOverlayState.Clear();
|
|
}
|
|
}
|
|
}
|
|
}
|