Files
2024-11-20 15:21:28 +01:00

97 lines
3.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace EPOOutline
{
[CustomEditor(typeof(Outliner))]
public class OutlinerEditor : Editor
{
public override void OnInspectorGUI()
{
var maskProperty = serializedObject.FindProperty("outlineLayerMask");
var currentMask = maskProperty.longValue;
var maskValue = "Mask: none";
if (currentMask == -1 || currentMask == long.MaxValue)
maskValue = "Mask: all";
else if (currentMask != 0)
maskValue = "Mask: mixed";
if (GUILayout.Button(maskValue, EditorStyles.layerMaskField))
{
var maskMenu = new GenericMenu();
maskMenu.AddItem(new GUIContent("none"), currentMask == 0, () =>
{
maskProperty.longValue = 0;
serializedObject.ApplyModifiedProperties();
});
maskMenu.AddItem(new GUIContent("all"), currentMask == -1 || currentMask == long.MaxValue, () =>
{
maskProperty.longValue = -1;
serializedObject.ApplyModifiedProperties();
});
for (var index = 0; index < sizeof(long) * 8; index++)
{
var capturedIndex = index;
if (index >= 20)
{
var decima = index / 10;
var lowerDecima = decima * 10;
var higherDecima = (decima + 1) * 10;
if (higherDecima > 63)
higherDecima = 63;
maskMenu.AddItem(new GUIContent(lowerDecima + "-" + higherDecima + "/" + index), (currentMask & 1 << index) != 0, () =>
{
maskProperty.longValue = currentMask ^ (1 << capturedIndex);
serializedObject.ApplyModifiedProperties();
});
}
else
{
maskMenu.AddItem(new GUIContent(index.ToString()), (currentMask & 1 << index) != 0, () =>
{
maskProperty.longValue = currentMask ^ (1 << capturedIndex);
serializedObject.ApplyModifiedProperties();
});
}
}
maskMenu.ShowAsContext();
}
#if (URP_OUTLINE || HDRP_OUTLINE) && UNITY_EDITOR && UNITY_2019_1_OR_NEWER
var isHDRP = PipelineAssetUtility.IsHDRP(PipelineAssetUtility.CurrentAsset);
#else
var isHDRP = false;
#endif
if (isHDRP)
{
DrawPropertiesExcluding(serializedObject,
"m_Script",
"outlineLayerMask",
"infoRendererScale",
"primaryRendererScale");
}
else
{
DrawPropertiesExcluding(serializedObject,
"m_Script",
"outlineLayerMask",
"infoRendererScale");
}
if (!isHDRP)
EditorGUILayout.PropertyField(serializedObject.FindProperty("infoRendererScale"));
serializedObject.ApplyModifiedProperties();
}
}
}