123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- using UnityEngine;
- namespace UnityEditor.U2D.Animation
- {
- internal struct SliderData
- {
- public Vector3 position;
- public Vector3 forward;
- public Vector3 up;
- public Vector3 right;
- public static readonly SliderData zero = new SliderData() { position = Vector3.zero, forward = Vector3.forward, up = Vector3.up, right = Vector3.right };
- }
- internal interface IGUIWrapper
- {
- Vector2 mousePosition { get; }
- int mouseButton { get; }
- int clickCount { get; }
- bool isShiftDown { get; }
- bool isAltDown { get; }
- bool isActionKeyDown { get; }
- EventType eventType { get; }
- string commandName { get; }
- bool IsMouseDown(int button);
- bool IsMouseUp(int button);
- bool IsKeyDown(KeyCode keyCode);
- int GetControlID(int hint, FocusType focusType);
- void LayoutControl(int controlID, float distance);
- bool IsControlNearest(int controlID);
- bool IsControlHot(int controlID);
- bool IsMultiStepControlHot(int controlID);
- void SetControlHot(int controlID);
- void SetMultiStepControlHot(int controlID);
- bool DoSlider(int id, SliderData sliderData, out Vector3 newPosition);
- void UseCurrentEvent();
- float DistanceToSegment(Vector3 p1, Vector3 p2);
- float DistanceToSegmentClamp(Vector3 p1, Vector3 p2);
- float DistanceToCircle(Vector3 center, float radius);
- Vector3 GUIToWorld(Vector2 guiPosition);
- Vector3 GUIToWorld(Vector2 guiPosition, Vector3 planeNormal, Vector3 planePosition);
- void Repaint();
- bool IsRepainting();
- bool IsEventOutsideWindow();
- void SetGuiChanged(bool changed);
- float GetHandleSize(Vector3 position);
- bool IsViewToolActive();
- bool HasCurrentCamera();
- }
- internal class GUIWrapper : IGUIWrapper
- {
- private Handles.CapFunction nullCap = (int c, Vector3 p , Quaternion r, float s, EventType ev) => {};
- private int m_MultiStepHotControl = 0;
- public Vector2 mousePosition
- {
- get { return Event.current.mousePosition; }
- }
- public int mouseButton
- {
- get { return Event.current.button; }
- }
- public int clickCount
- {
- get { return Event.current.clickCount; }
- }
- public bool isShiftDown
- {
- get { return Event.current.shift; }
- }
- public bool isAltDown
- {
- get { return Event.current.alt; }
- }
- public bool isActionKeyDown
- {
- get { return EditorGUI.actionKey; }
- }
- public EventType eventType
- {
- get { return Event.current.type; }
- }
- public string commandName
- {
- get { return Event.current.commandName; }
- }
- public bool IsMouseDown(int button)
- {
- return Event.current.type == EventType.MouseDown && Event.current.button == button;
- }
- public bool IsMouseUp(int button)
- {
- return Event.current.type == EventType.MouseUp && Event.current.button == button;
- }
- public bool IsKeyDown(KeyCode keyCode)
- {
- return Event.current.type == EventType.KeyDown && Event.current.keyCode == keyCode;
- }
- public int GetControlID(int hint, FocusType focusType)
- {
- return GUIUtility.GetControlID(hint, focusType);
- }
- public void LayoutControl(int controlID, float distance)
- {
- if (Event.current.type == EventType.Layout)
- HandleUtility.AddControl(controlID, distance);
- }
- public bool IsControlNearest(int controlID)
- {
- return HandleUtility.nearestControl == controlID;
- }
- public bool IsControlHot(int controlID)
- {
- return GUIUtility.hotControl == controlID;
- }
- public bool IsMultiStepControlHot(int controlID)
- {
- return m_MultiStepHotControl == controlID;
- }
- public void SetControlHot(int controlID)
- {
- GUIUtility.hotControl = controlID;
- }
- public void SetMultiStepControlHot(int controlID)
- {
- m_MultiStepHotControl = controlID;
- }
- public bool DoSlider(int id, SliderData sliderData, out Vector3 newPosition)
- {
- EditorGUI.BeginChangeCheck();
- if (HasCurrentCamera())
- newPosition = Handles.Slider2D(id, sliderData.position, sliderData.forward, sliderData.right, sliderData.up, 1f, nullCap, Vector2.zero);
- else
- newPosition = Slider2D.Do(id, sliderData.position, null);
- return EditorGUI.EndChangeCheck();
- }
- public void UseCurrentEvent()
- {
- Event.current.Use();
- }
- public float DistanceToSegment(Vector3 p1, Vector3 p2)
- {
- p1 = HandleUtility.WorldToGUIPoint(p1);
- p2 = HandleUtility.WorldToGUIPoint(p2);
- return HandleUtility.DistancePointToLineSegment(mousePosition, p1, p2);
- }
- public float DistanceToSegmentClamp(Vector3 p1, Vector3 p2)
- {
- p1 = HandleUtility.WorldToGUIPoint(p1);
- p2 = HandleUtility.WorldToGUIPoint(p2);
- return MathUtility.DistanceToSegmentClamp(mousePosition, p1, p2);
- }
- public float DistanceToCircle(Vector3 center, float radius)
- {
- return HandleUtility.DistanceToCircle(center, radius);
- }
- public Vector3 GUIToWorld(Vector2 guiPosition)
- {
- return ModuleUtility.GUIToWorld(guiPosition);
- }
- public Vector3 GUIToWorld(Vector2 guiPosition, Vector3 planeNormal, Vector3 planePosition)
- {
- return ModuleUtility.GUIToWorld(guiPosition, planeNormal, planePosition);
- }
- public void Repaint()
- {
- HandleUtility.Repaint();
- }
- public bool IsRepainting()
- {
- return eventType == EventType.Repaint;
- }
- public void SetGuiChanged(bool changed)
- {
- GUI.changed = true;
- }
- public bool IsEventOutsideWindow()
- {
- return Event.current.type == EventType.Ignore;
- }
- public float GetHandleSize(Vector3 position)
- {
- return HandleUtility.GetHandleSize(position);
- }
- public bool IsViewToolActive()
- {
- return UnityEditor.Tools.current == Tool.View || isAltDown || mouseButton == 1 || mouseButton == 2;
- }
- public bool HasCurrentCamera()
- {
- return Camera.current != null;
- }
- }
- }
|