97 lines
3.5 KiB
C#
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();
|
|
}
|
|
}
|
|
} |