mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
Initial commit
This commit is contained in:
commit
3c7cc0c973
8391 changed files with 704313 additions and 0 deletions
|
@ -0,0 +1,78 @@
|
|||
using UnityEngine;
|
||||
|
||||
namespace UnityEditor.U2D.Animation
|
||||
{
|
||||
internal class Slider2D
|
||||
{
|
||||
private static Vector2 s_CurrentMousePosition;
|
||||
private static Vector2 s_DragStartScreenPosition;
|
||||
private static Vector2 s_DragScreenOffset;
|
||||
private static double s_Time;
|
||||
|
||||
public static Vector2 Do(int controlID, Vector2 position, Handles.CapFunction drawCapFunction = null)
|
||||
{
|
||||
EventType type = Event.current.GetTypeForControl(controlID);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case EventType.MouseDown:
|
||||
if (Event.current.button == 0 && HandleUtility.nearestControl == controlID && !Event.current.alt)
|
||||
{
|
||||
s_Time = EditorApplication.timeSinceStartup;
|
||||
|
||||
GUIUtility.keyboardControl = controlID;
|
||||
GUIUtility.hotControl = controlID;
|
||||
s_CurrentMousePosition = Event.current.mousePosition;
|
||||
s_DragStartScreenPosition = Event.current.mousePosition;
|
||||
Vector2 b = HandleUtility.WorldToGUIPoint(position);
|
||||
s_DragScreenOffset = s_CurrentMousePosition - b;
|
||||
|
||||
Event.current.Use();
|
||||
}
|
||||
break;
|
||||
case EventType.MouseUp:
|
||||
if (GUIUtility.hotControl == controlID && (Event.current.button == 0 || Event.current.button == 2))
|
||||
{
|
||||
GUIUtility.hotControl = 0;
|
||||
Event.current.Use();
|
||||
}
|
||||
break;
|
||||
case EventType.MouseDrag:
|
||||
if (GUIUtility.hotControl == controlID)
|
||||
{
|
||||
s_CurrentMousePosition = Event.current.mousePosition;
|
||||
float screenDisplacement = (s_CurrentMousePosition - s_DragStartScreenPosition).magnitude;
|
||||
Vector2 center = position;
|
||||
Vector2 screenPosition = s_CurrentMousePosition - s_DragScreenOffset;
|
||||
position = Handles.inverseMatrix.MultiplyPoint(screenPosition);
|
||||
float displacement = (center - position).magnitude;
|
||||
|
||||
if (!Mathf.Approximately(displacement, 0f) && (EditorApplication.timeSinceStartup - s_Time > 0.15 || screenDisplacement >= 10f))
|
||||
GUI.changed = true;
|
||||
|
||||
Event.current.Use();
|
||||
}
|
||||
break;
|
||||
case EventType.KeyDown:
|
||||
if (GUIUtility.hotControl == controlID && Event.current.keyCode == KeyCode.Escape)
|
||||
{
|
||||
position = Handles.inverseMatrix.MultiplyPoint(s_DragStartScreenPosition - s_DragScreenOffset);
|
||||
GUIUtility.hotControl = 0;
|
||||
GUI.changed = true;
|
||||
Event.current.Use();
|
||||
}
|
||||
break;
|
||||
case EventType.Layout:
|
||||
if (drawCapFunction != null)
|
||||
drawCapFunction(controlID, position, Quaternion.identity, 1f, EventType.Layout);
|
||||
break;
|
||||
case EventType.Repaint:
|
||||
if (drawCapFunction != null)
|
||||
drawCapFunction(controlID, position, Quaternion.identity, 1f, EventType.Repaint);
|
||||
break;
|
||||
}
|
||||
|
||||
return position;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue