113 lines
3.2 KiB
C#
113 lines
3.2 KiB
C#
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Boxophobic.StyledGUI
|
|
{
|
|
public class StyledLabelGizmo : StyledMonoBehaviour
|
|
{
|
|
public Transform basePosition;
|
|
public Transform labelPosition;
|
|
|
|
[Space(10)]
|
|
public Object pingObject;
|
|
|
|
public enum LabelAnchor
|
|
{
|
|
Center = 10,
|
|
Left = 20,
|
|
Right = 30,
|
|
}
|
|
|
|
[Space(10)]
|
|
public LabelAnchor labelAnchor = LabelAnchor.Center;
|
|
|
|
[TextArea]
|
|
public string labelText;
|
|
|
|
bool pingable;
|
|
|
|
void OnDrawGizmos()
|
|
{
|
|
var styleLabel = new GUIStyle(EditorStyles.whiteLabel)
|
|
{
|
|
richText = true,
|
|
alignment = UnityEngine.TextAnchor.MiddleLeft,
|
|
fontSize = 9,
|
|
};
|
|
|
|
if (basePosition == null)
|
|
{
|
|
basePosition = transform;
|
|
}
|
|
|
|
if (labelPosition == null)
|
|
{
|
|
labelPosition = transform;
|
|
}
|
|
|
|
var label = gameObject.name;
|
|
|
|
if (labelText != null && labelText.Length != 0)
|
|
{
|
|
label = labelText;
|
|
}
|
|
|
|
var size = styleLabel.CalcSize(new GUIContent(label));
|
|
var offset = 0f;
|
|
|
|
if (labelAnchor == LabelAnchor.Right)
|
|
{
|
|
offset = size.x + 6;
|
|
}
|
|
else if (labelAnchor == LabelAnchor.Center)
|
|
{
|
|
offset = (size.x + 6) / 2;
|
|
}
|
|
|
|
Handles.color = Color.black;
|
|
GUI.color = Color.white;
|
|
|
|
Handles.DrawLine(basePosition.position, labelPosition.position);
|
|
|
|
Handles.BeginGUI();
|
|
|
|
var basePos2D = HandleUtility.WorldToGUIPoint(basePosition.position);
|
|
var labelPos2D = HandleUtility.WorldToGUIPoint(labelPosition.position);
|
|
|
|
Handles.DrawSolidRectangleWithOutline(new Rect(labelPos2D.x - offset, labelPos2D.y - 24, size.x + 10, size.y + 10), Color.black, new Color(0, 0, 0, 0));
|
|
|
|
if (pingObject != null)
|
|
{
|
|
Event e = Event.current;
|
|
var mousePos = e.mousePosition;
|
|
|
|
if (mousePos.x > labelPos2D.x - offset && mousePos.x < labelPos2D.x - offset + size.x + 8 && mousePos.y > labelPos2D.y - 24 && mousePos.y < labelPos2D.y - 24 + size.y + 8)
|
|
{
|
|
GUI.color = new Color(0.9f, 0.8f, 0.3f, 1f);
|
|
//GUI.color = new Color(0.0f, 1f, 0.6f, 1f);
|
|
|
|
if (pingable && e.modifiers != EventModifiers.Alt)
|
|
{
|
|
EditorGUIUtility.PingObject(pingObject);
|
|
pingable = false;
|
|
}
|
|
|
|
//if (e.button == 0 && e.isMouse && e.modifiers != EventModifiers.Alt)
|
|
//{
|
|
// EditorGUIUtility.PingObject(pingObject);
|
|
//}
|
|
}
|
|
else
|
|
{
|
|
pingable = true;
|
|
}
|
|
}
|
|
|
|
GUI.Label(new Rect(labelPos2D.x + 4 - offset, labelPos2D.y - 20, size.x, size.y), label, styleLabel);
|
|
|
|
Handles.EndGUI();
|
|
}
|
|
}
|
|
}
|
|
#endif |