GlobalGameJame/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorPanel.cs
JonatanRek bea2dce063 Initial
test
2020-01-31 16:10:04 +01:00

153 lines
5.4 KiB
C#

using UnityEngine;
using UnityEditor;
namespace TMPro.EditorUtilities
{
[CustomEditor(typeof(TextMeshPro), true), CanEditMultipleObjects]
public class TMP_EditorPanel : TMP_BaseEditorPanel
{
static readonly GUIContent k_SortingLayerLabel = new GUIContent("Sorting Layer", "Name of the Renderer's sorting layer.");
static readonly GUIContent k_OrderInLayerLabel = new GUIContent("Order in Layer", "Renderer's order within a sorting layer.");
static readonly GUIContent k_OrthographicLabel = new GUIContent("Orthographic Mode", "Should be enabled when using an orthographic camera. Instructs the shader to not perform any perspective correction.");
static readonly GUIContent k_VolumetricLabel = new GUIContent("Volumetric Setup", "Use cubes rather than quads to render the text. Allows for volumetric rendering when combined with a compatible shader.");
SerializedProperty m_IsVolumetricTextProp;
SerializedProperty m_IsOrthographicProp;
Renderer m_Renderer;
protected override void OnEnable()
{
base.OnEnable();
m_IsOrthographicProp = serializedObject.FindProperty("m_isOrthographic");
m_IsVolumetricTextProp = serializedObject.FindProperty("m_isVolumetricText");
m_Renderer = m_TextComponent.GetComponent<Renderer>();
}
protected override void DrawExtraSettings()
{
Foldout.extraSettings = EditorGUILayout.Foldout(Foldout.extraSettings, k_ExtraSettingsLabel, true, TMP_UIStyleManager.boldFoldout);
if (Foldout.extraSettings)
{
EditorGUI.indentLevel += 1;
DrawMargins();
DrawSortingLayer();
DrawGeometrySorting();
DrawOrthographicMode();
DrawRichText();
DrawParsing();
DrawVolumetricSetup();
DrawKerning();
DrawPadding();
EditorGUI.indentLevel -= 1;
}
}
protected void DrawSortingLayer()
{
Undo.RecordObject(m_Renderer, "Sorting Layer Change");
EditorGUI.BeginChangeCheck();
// SORTING LAYERS
var sortingLayerNames = SortingLayerHelper.sortingLayerNames;
var textComponent = (TextMeshPro)m_TextComponent;
// Look up the layer name using the current layer ID
string oldName = SortingLayerHelper.GetSortingLayerNameFromID(textComponent.sortingLayerID);
// Use the name to look up our array index into the names list
int oldLayerIndex = System.Array.IndexOf(sortingLayerNames, oldName);
// Show the pop-up for the names
EditorGUIUtility.fieldWidth = 0f;
int newLayerIndex = EditorGUILayout.Popup(k_SortingLayerLabel, oldLayerIndex, sortingLayerNames);
// If the index changes, look up the ID for the new index to store as the new ID
if (newLayerIndex != oldLayerIndex)
{
textComponent.sortingLayerID = SortingLayerHelper.GetSortingLayerIDForIndex(newLayerIndex);
}
// Expose the manual sorting order
int newSortingLayerOrder = EditorGUILayout.IntField(k_OrderInLayerLabel, textComponent.sortingOrder);
if (newSortingLayerOrder != textComponent.sortingOrder)
{
textComponent.sortingOrder = newSortingLayerOrder;
}
if (EditorGUI.EndChangeCheck())
m_HavePropertiesChanged = true;
EditorGUILayout.Space();
}
protected void DrawOrthographicMode()
{
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(m_IsOrthographicProp, k_OrthographicLabel);
if (EditorGUI.EndChangeCheck())
m_HavePropertiesChanged = true;
}
protected void DrawVolumetricSetup()
{
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(m_IsVolumetricTextProp, k_VolumetricLabel);
if (EditorGUI.EndChangeCheck())
{
m_HavePropertiesChanged = true;
m_TextComponent.textInfo.ResetVertexLayout(m_IsVolumetricTextProp.boolValue);
}
EditorGUILayout.Space();
}
// Method to handle multi object selection
protected override bool IsMixSelectionTypes()
{
GameObject[] objects = Selection.gameObjects;
if (objects.Length > 1)
{
for (int i = 0; i < objects.Length; i++)
{
if (objects[i].GetComponent<TextMeshPro>() == null)
return true;
}
}
return false;
}
protected override void OnUndoRedo()
{
int undoEventId = Undo.GetCurrentGroup();
int lastUndoEventId = s_EventId;
if (undoEventId != lastUndoEventId)
{
for (int i = 0; i < targets.Length; i++)
{
//Debug.Log("Undo & Redo Performed detected in Editor Panel. Event ID:" + Undo.GetCurrentGroup());
TMPro_EventManager.ON_TEXTMESHPRO_PROPERTY_CHANGED(true, targets[i] as TextMeshPro);
s_EventId = undoEventId;
}
}
}
}
}