1
This commit is contained in:
170
Assets/Dreamteck/Utilities/Editor/DreamteckEditorGUI.cs
Normal file
170
Assets/Dreamteck/Utilities/Editor/DreamteckEditorGUI.cs
Normal file
@@ -0,0 +1,170 @@
|
||||
namespace Dreamteck
|
||||
{
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public static class DreamteckEditorGUI
|
||||
{
|
||||
public static Texture2D blankImage
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_blankImage == null)
|
||||
{
|
||||
_blankImage = new Texture2D(1, 1);
|
||||
_blankImage.SetPixel(0, 0, Color.white);
|
||||
_blankImage.Apply();
|
||||
}
|
||||
return _blankImage;
|
||||
}
|
||||
}
|
||||
private static Texture2D _blankImage = null;
|
||||
|
||||
public static readonly Color backgroundColor = new Color(0.95f, 0.95f, 0.95f);
|
||||
public static Color iconColor = Color.black;
|
||||
|
||||
public static readonly Color highlightColor = new Color(0f, 0.564f, 1f, 1f);
|
||||
public static readonly Color highlightContentColor = new Color(1f, 1f, 1f, 0.95f);
|
||||
|
||||
|
||||
public static readonly Color inactiveColor = new Color(0.7f, 0.7f, 0.7f, 0.5f);
|
||||
public static readonly Color activeColor = new Color(1f, 1f, 1f, 1f);
|
||||
|
||||
public static readonly Color baseColor = Color.white;
|
||||
public static readonly Color lightColor = Color.white;
|
||||
public static readonly Color lightDarkColor = Color.white;
|
||||
public static readonly Color darkColor = Color.white;
|
||||
public static readonly Color borderColor = Color.white;
|
||||
|
||||
private static List<int> layerNumbers = new List<int>();
|
||||
|
||||
public static readonly GUIStyle labelText = null;
|
||||
private static float scale = -1f;
|
||||
|
||||
static DreamteckEditorGUI()
|
||||
{
|
||||
baseColor = EditorGUIUtility.isProSkin ? new Color32(56, 56, 56, 255) : new Color32(194, 194, 194, 255);
|
||||
lightColor = EditorGUIUtility.isProSkin ? new Color32(84, 84, 84, 255) : new Color32(222, 222, 222, 255);
|
||||
lightDarkColor = EditorGUIUtility.isProSkin ? new Color32(30, 30, 30, 255) : new Color32(180, 180, 180, 255);
|
||||
darkColor = EditorGUIUtility.isProSkin ? new Color32(15, 15, 15, 255) : new Color32(152, 152, 152, 255);
|
||||
borderColor = EditorGUIUtility.isProSkin ? new Color32(5, 5, 5, 255) : new Color32(100, 100, 100, 255);
|
||||
backgroundColor = baseColor;
|
||||
backgroundColor -= new Color(0.1f, 0.1f, 0.1f, 0f);
|
||||
iconColor = GUI.skin.label.normal.textColor;
|
||||
|
||||
labelText = new GUIStyle(GUI.skin.GetStyle("label"));
|
||||
labelText.fontStyle = FontStyle.Bold;
|
||||
labelText.alignment = TextAnchor.MiddleRight;
|
||||
labelText.normal.textColor = Color.white;
|
||||
SetScale(1f);
|
||||
}
|
||||
|
||||
public static void SetScale(float newScale)
|
||||
{
|
||||
if (scale == newScale) return;
|
||||
scale = newScale;
|
||||
labelText.fontSize = Mathf.RoundToInt(12f * scale);
|
||||
}
|
||||
|
||||
public static void Label(Rect position, string text, bool active = true, GUIStyle style = null)
|
||||
{
|
||||
if (style == null) style = labelText;
|
||||
if (!active) GUI.color = inactiveColor;
|
||||
else GUI.color = activeColor;
|
||||
GUI.color = new Color(0f, 0f, 0f, GUI.color.a * 0.5f);
|
||||
GUI.Label(new Rect(position.x - 1, position.y + 1, position.width, position.height), text, style);
|
||||
if (!active) GUI.color = inactiveColor;
|
||||
else GUI.color = activeColor;
|
||||
GUI.Label(position, text, style);
|
||||
}
|
||||
|
||||
public static LayerMask LayermaskField(string label, LayerMask layerMask)
|
||||
{
|
||||
string[] layers = UnityEditorInternal.InternalEditorUtility.layers;
|
||||
|
||||
layerNumbers.Clear();
|
||||
|
||||
for (int i = 0; i < layers.Length; i++)
|
||||
{
|
||||
layerNumbers.Add(LayerMask.NameToLayer(layers[i]));
|
||||
}
|
||||
|
||||
int maskWithoutEmpty = 0;
|
||||
for (int i = 0; i < layerNumbers.Count; i++)
|
||||
{
|
||||
if (((1 << layerNumbers[i]) & layerMask.value) > 0)
|
||||
{
|
||||
maskWithoutEmpty |= (1 << i);
|
||||
}
|
||||
}
|
||||
|
||||
maskWithoutEmpty = EditorGUILayout.MaskField(label, maskWithoutEmpty, layers);
|
||||
|
||||
int mask = 0;
|
||||
for (int i = 0; i < layerNumbers.Count; i++)
|
||||
{
|
||||
if ((maskWithoutEmpty & (1 << i)) > 0)
|
||||
{
|
||||
mask |= (1 << layerNumbers[i]);
|
||||
}
|
||||
}
|
||||
|
||||
layerMask.value = mask;
|
||||
|
||||
return layerMask;
|
||||
}
|
||||
|
||||
public static bool DropArea<T>(Rect rect, out T[] content, bool acceptProjectAssets = false)
|
||||
{
|
||||
content = new T[0];
|
||||
switch (Event.current.type)
|
||||
{
|
||||
case EventType.DragUpdated:
|
||||
case EventType.DragPerform:
|
||||
if (!rect.Contains(Event.current.mousePosition)) return false;
|
||||
|
||||
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
|
||||
|
||||
if (Event.current.type == EventType.DragPerform)
|
||||
{
|
||||
DragAndDrop.AcceptDrag();
|
||||
List<T> contentList = new List<T>();
|
||||
foreach (object dragged_object in DragAndDrop.objectReferences)
|
||||
{
|
||||
if (dragged_object is GameObject)
|
||||
{
|
||||
GameObject gameObject = (GameObject)dragged_object;
|
||||
if (acceptProjectAssets || !AssetDatabase.Contains(gameObject))
|
||||
{
|
||||
if (gameObject.GetComponent<T>() != null) contentList.Add(gameObject.GetComponent<T>());
|
||||
}
|
||||
}
|
||||
}
|
||||
content = contentList.ToArray();
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static Gradient GradientField(string label, Gradient gradient, params GUILayoutOption[] options)
|
||||
{
|
||||
return EditorGUILayout.GradientField(label, gradient, options);
|
||||
}
|
||||
|
||||
public static void DrawSeparator()
|
||||
{
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
GUILayout.FlexibleSpace();
|
||||
Rect rect = GUILayoutUtility.GetRect(Screen.width / 2f, 2f);
|
||||
EditorGUI.DrawRect(rect, darkColor);
|
||||
GUILayout.FlexibleSpace();
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.Space();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user