summaryrefslogtreecommitdiff
path: root/AlienSurvival/Assets/Tools/EditorGUIHelper/Editor/EditorHandlesHelper.cs
diff options
context:
space:
mode:
Diffstat (limited to 'AlienSurvival/Assets/Tools/EditorGUIHelper/Editor/EditorHandlesHelper.cs')
-rw-r--r--AlienSurvival/Assets/Tools/EditorGUIHelper/Editor/EditorHandlesHelper.cs279
1 files changed, 0 insertions, 279 deletions
diff --git a/AlienSurvival/Assets/Tools/EditorGUIHelper/Editor/EditorHandlesHelper.cs b/AlienSurvival/Assets/Tools/EditorGUIHelper/Editor/EditorHandlesHelper.cs
deleted file mode 100644
index 6a07ab4..0000000
--- a/AlienSurvival/Assets/Tools/EditorGUIHelper/Editor/EditorHandlesHelper.cs
+++ /dev/null
@@ -1,279 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEditor;
-
-// https://docs.unity3d.com/ScriptReference/Handles.html
-
-// Scene视图中的自定义handles
-public static class EditorHandlesHelper
-{
-
- static int s_ValueScaleHandleHash;
- static int s_PositionArrowHandleHash;
-
- // limit value 数据
- static float s_StartScale;
- static float s_ValueDrag;
- static float s_ScaleDrawLength;
-
- static Vector3 s_LastPosition;
-
- // style
- static GUIStyle s_StyleBlackLabel;
- static GUIStyle s_StyleWhiteLabel;
- static Dictionary<int/*color*/, GUIStyle> s_StyleLabels;
-
- static EditorHandlesHelper()
- {
- s_ValueScaleHandleHash = "ValueScaleHandle".GetHashCode();
- s_PositionArrowHandleHash = "PositionArrowHandle".GetHashCode();
-
-
- SetupStyles();
- }
-
- static void SetupStyles()
- {
- s_StyleBlackLabel = new GUIStyle();
- s_StyleBlackLabel.normal.textColor = Color.black;
- s_StyleWhiteLabel = new GUIStyle();
- s_StyleWhiteLabel.normal.textColor = Color.white;
- s_StyleLabels = new Dictionary<int, GUIStyle>();
- }
-
- #region 单一handle
-
- /// <summary>
- /// 无事件箭头
- /// </summary>
- /// <param name="position"></param>
- /// <param name="direction"></param>
- /// <param name="length"></param>
- /// <param name="arrowSize"></param>
- /// <param name="dotted"></param>
- public static void Arrow(Vector3 position, Vector3 direction, float length = 1f, float arrowSize = 0.1f, bool dotted = false)
- {
- direction = direction.normalized;
- if(!dotted)
- Handles.DrawLine(position, position + direction * length);
- else
- Handles.DrawDottedLine(position, position + direction * length,1f);
- Handles.ConeHandleCap(0, position + direction * length, Quaternion.LookRotation(direction, Vector3.up), arrowSize, EventType.Repaint);
- }
-
- /// <summary>
- /// 处理位置的可拖拽箭头
- /// </summary>
- /// <param name="currentValue"></param>
- /// <param name="position"></param>
- /// <param name="direction"></param>
- /// <param name="length"></param>
- /// <param name="arrowSize"></param>
- /// <param name="dotted"></param>
- /// <returns></returns>
- public static Vector3 PositionArrow(Vector3 position, Vector3 direction, float length, float arrowSize, bool dotted = false)
- {
- direction = direction.normalized;
-
- Vector3 value = Vector3.zero;
- Handles.CapFunction capFunc = Handles.ConeHandleCap;
-
- Quaternion capRot = Quaternion.LookRotation(direction, Vector3.up);
- float size = arrowSize;
- Vector3 arrowPos = position + direction * length;
-
- int id = GUIUtility.GetControlID(s_PositionArrowHandleHash, FocusType.Keyboard);
-
- Event current = Event.current;
- switch (current.GetTypeForControl(id))
- {
- case EventType.MouseDown:
- if ((HandleUtility.nearestControl == id && current.button == 0) || (GUIUtility.keyboardControl == id && current.button == 2))
- {
- s_LastPosition = Camera.current.ScreenToWorldPoint(Event.current.mousePosition);
-
- GUIUtility.keyboardControl = id;
- GUIUtility.hotControl = id;
- current.Use();
- EditorGUIUtility.SetWantsMouseJumping(1);
- }
- break;
- case EventType.MouseUp:
- if (GUIUtility.hotControl == id && (current.button == 0 || current.button == 2))
- {
- GUIUtility.keyboardControl = 0;
- GUIUtility.hotControl = 0;
- current.Use();
- EditorGUIUtility.SetWantsMouseJumping(0);
- }
- break;
- case EventType.MouseDrag:
- if (GUIUtility.hotControl == id)
- {
- Vector3 worldpos = Camera.current.ScreenToWorldPoint(Event.current.mousePosition);
- value = worldpos - s_LastPosition;
-
- s_LastPosition = worldpos;
-
- GUI.changed = true;
- current.Use();
- }
- break;
- //case EventType.KeyDown:
- // if (GUIUtility.hotControl == id && current.keyCode == KeyCode.Escape)
- // {
- // GUIUtility.hotControl = 0;
- // GUI.changed = true;
- // current.Use();
- // }
- // break;
- case EventType.Repaint:
- {
- Color color = Color.white;
- if (id == GUIUtility.keyboardControl)
- {
- color = Handles.color;
- Handles.color = Handles.selectedColor;
- }
- capFunc(id, arrowPos, capRot, size * 0.15f, EventType.Repaint);
- DottedLine(position, arrowPos, 1f, dotted);
- if (id == GUIUtility.keyboardControl)
- {
- Handles.color = color;
- }
- break;
- }
- case EventType.Layout:
- HandleUtility.AddControl(id, HandleUtility.DistanceToCircle(arrowPos, size * 0.15f));
- break;
- }
-
- return value;
- }
-
- public static void DottedLine(Vector3 p1, Vector3 p2, float length, bool dotted = true)
- {
- if (!dotted)
- Handles.DrawLine(p1, p2);
- else
- Handles.DrawDottedLine(p1, p2, 1f);
- }
-
- // 控制数值的箭头
- public static float ScaleValue(float value, Vector3 position, Vector3 direction, float length, Handles.CapFunction capFunc, Quaternion capRot, float size, float snap = 0)
- {
- Handles.DrawLine(position, position + direction * length);
- value = ScaleValue(value, position + direction, capRot, size, capFunc, snap);
- return value;
- }
-
- // 控制数值的handle
- public static float ScaleValue(float value, Vector3 position, Quaternion rotation, float size, Handles.CapFunction capFunc, float snap)
- {
- int controlID = GUIUtility.GetControlID(s_ValueScaleHandleHash, FocusType.Keyboard);
- int id = controlID;
- Event current = Event.current;
- switch (current.GetTypeForControl(id))
- {
- case EventType.MouseDown:
- if ((HandleUtility.nearestControl == id && current.button == 0) || (GUIUtility.keyboardControl == id && current.button == 2))
- {
- GUIUtility.keyboardControl = id;
- GUIUtility.hotControl = id;
- s_StartScale = value;
- s_ValueDrag = 0f;
- current.Use();
- EditorGUIUtility.SetWantsMouseJumping(1);
- }
- break;
- case EventType.MouseUp:
- if (GUIUtility.hotControl == id && (current.button == 0 || current.button == 2))
- {
- GUIUtility.hotControl = 0;
- s_ScaleDrawLength = 1f;
- current.Use();
- EditorGUIUtility.SetWantsMouseJumping(0);
- }
- break;
- case EventType.MouseDrag:
- if (GUIUtility.hotControl == id)
- {
- s_ValueDrag += HandleUtility.niceMouseDelta * 0.01f;
- //value = (Handles.SnapValue(s_ValueDrag, snap) + 1f) * s_StartScale;
- value = Camera.current.ScreenToWorldPoint(Event.current.mousePosition).x - 1;
- s_ScaleDrawLength = value / s_StartScale;
- GUI.changed = true;
- current.Use();
- }
- break;
- case EventType.KeyDown:
- if (GUIUtility.hotControl == id && current.keyCode == KeyCode.Escape)
- {
- value = s_StartScale;
- s_ScaleDrawLength = 1f;
- GUIUtility.hotControl = 0;
- GUI.changed = true;
- current.Use();
- }
- break;
- case EventType.Repaint:
- {
- Color color = Color.white;
- if (id == GUIUtility.keyboardControl)
- {
- color = Handles.color;
- Handles.color = Handles.selectedColor;
- }
- capFunc(id, position, rotation, size * 0.15f, EventType.Repaint);
- if (id == GUIUtility.keyboardControl)
- {
- Handles.color = color;
- }
- break;
- }
- case EventType.Layout:
- HandleUtility.AddControl(id, HandleUtility.DistanceToCircle(position, size * 0.15f));
- break;
- }
- return value;
- }
-
- // 带背景的label
- public static void Label(Vector3 position, string label, Color textColor)
- {
- GUIStyle textStyle = TryGetLabelStyleOrCreate(textColor);
- Handles.Label(position, label, textStyle);
- }
-
- public static void WireCube(Vector3 position, Vector3 size, Color col)
- {
- Color c = Handles.color;
- Handles.color = col;
- Handles.DrawWireCube(position, size);
- Handles.color = c;
- }
-
- #endregion
-
- #region 复合handle
-
- #endregion
-
- #region 内部方法
-
- static GUIStyle TryGetLabelStyleOrCreate(Color color)
- {
- GUIStyle style;
- if (!s_StyleLabels.TryGetValue(color.GetHashCode(), out style))
- {
- style = new GUIStyle();
- style.normal.textColor = color;
- s_StyleLabels.Add(color.GetHashCode(), style);
- }
- return style;
- }
-
- #endregion
-
-}