1
1
Ответвление 0
InsAsterix/InsAsterix/Library/PackageCache/com.unity.visualscripting@1.8.0/Editor/VisualScripting.Core/Inspection/OptimizedEditor.cs
2023-03-02 20:21:33 +01:00

57 строки
1,6 КиБ
C#

using System.Collections.Generic;
using UnityEditor;
namespace Unity.VisualScripting
{
public abstract class OptimizedEditor<TIndividual> : UnityEditor.Editor
where TIndividual : IndividualEditor, new()
{
private TIndividual GetIndividualDrawer(SerializedObject serializedObject)
{
var hash = serializedObject.GetHashCode();
if (!individualDrawers.ContainsKey(hash))
{
var individualDrawer = new TIndividual();
individualDrawer.Initialize(serializedObject, this);
individualDrawers.Add(hash, individualDrawer);
}
return individualDrawers[hash];
}
public sealed override void OnInspectorGUI()
{
if (serializedObject.isEditingMultipleObjects)
{
EditorGUILayout.HelpBox("Multi-object editing is not supported.", MessageType.Info);
return;
}
GetIndividualDrawer(serializedObject).OnGUI();
}
static OptimizedEditor()
{
individualDrawers = new Dictionary<int, TIndividual>();
EditorApplicationUtility.onSelectionChange += ClearCache;
}
private static Dictionary<int, TIndividual> individualDrawers;
private static void ClearCache()
{
try
{
foreach (var individualDrawer in individualDrawers.Values)
{
individualDrawer.Dispose();
}
}
finally
{
individualDrawers.Clear();
}
}
}
}