2025-05-01 01:48:08 -07:00

52 lines
2.0 KiB
C#

#if ENABLE_PROPERTY_VARIANTS || PACKAGE_DOCS_GENERATION
using UnityEngine;
using UnityEngine.Localization.PropertyVariants;
namespace UnityEditor.Localization.UI.PropertyVariants
{
[CustomEditor(typeof(GameObjectLocalizer))]
class GameObjectLocalizerEditor : UnityEditor.Editor
{
ReorderableListExtended m_TrackedObjectsList;
/// <summary>
/// Allows property drawers to know the current target being drawn.
/// </summary>
public static Object CurrentTarget { get; private set; }
void OnEnable()
{
var trackedObjects = serializedObject.FindProperty("m_TrackedObjects");
m_TrackedObjectsList = new ReorderableListExtended(serializedObject, trackedObjects);
m_TrackedObjectsList.drawElementCallback = DrawElement;
m_TrackedObjectsList.Header = EditorGUIUtility.TrTextContent("Tracked Objects");
m_TrackedObjectsList.displayAdd = false;
}
public override void OnInspectorGUI()
{
serializedObject.Update();
m_TrackedObjectsList.DoLayoutList();
serializedObject.ApplyModifiedProperties();
}
void DrawElement(Rect rect, int idx, bool isActive, bool isFocused)
{
var element = m_TrackedObjectsList.serializedProperty.GetArrayElementAtIndex(idx);
var trackedObject = element.FindPropertyRelative("m_Target");
CurrentTarget = trackedObject.objectReferenceValue;
var icon = trackedObject.objectReferenceValue != null ? AssetPreview.GetMiniTypeThumbnail(CurrentTarget.GetType()) : null;
var label = new GUIContent(ManagedReferenceUtility.GetDisplayName(element.managedReferenceFullTypename).text, icon);
rect.xMin += 8; // Prevent the foldout arrow(>) being drawn over the reorder icon(=) when showing LocalizationSettings in the inspector.
EditorGUI.PropertyField(rect, element, label, true);
CurrentTarget = null;
}
}
}
#endif