78 lines
1.9 KiB
C#
78 lines
1.9 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using UnityEditor;
|
|
|
|
|
|
namespace Coffee.UIExtensions.Editors
|
|
{
|
|
/// <summary>
|
|
/// SoftMask editor.
|
|
/// </summary>
|
|
[CustomEditor(typeof(SoftMask))]
|
|
[CanEditMultipleObjects]
|
|
public class SoftMaskEditor : Editor
|
|
{
|
|
//%%%% Context menu for editor %%%%
|
|
[MenuItem("CONTEXT/Mask/Convert To SoftMask", true)]
|
|
static bool _ConvertToSoftMask(MenuCommand command)
|
|
{
|
|
return CanConvertTo<SoftMask>(command.context);
|
|
}
|
|
|
|
[MenuItem("CONTEXT/Mask/Convert To SoftMask", false)]
|
|
static void ConvertToSoftMask(MenuCommand command)
|
|
{
|
|
ConvertTo<SoftMask>(command.context);
|
|
}
|
|
|
|
[MenuItem("CONTEXT/Mask/Convert To Mask", true)]
|
|
static bool _ConvertToMask(MenuCommand command)
|
|
{
|
|
return CanConvertTo<Mask>(command.context);
|
|
}
|
|
|
|
[MenuItem("CONTEXT/Mask/Convert To Mask", false)]
|
|
static void ConvertToMask(MenuCommand command)
|
|
{
|
|
ConvertTo<Mask>(command.context);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verify whether it can be converted to the specified component.
|
|
/// </summary>
|
|
protected static bool CanConvertTo<T>(Object context)
|
|
where T : MonoBehaviour
|
|
{
|
|
return context && context.GetType() != typeof(T);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Convert to the specified component.
|
|
/// </summary>
|
|
protected static void ConvertTo<T>(Object context) where T : MonoBehaviour
|
|
{
|
|
var target = context as MonoBehaviour;
|
|
var so = new SerializedObject(target);
|
|
so.Update();
|
|
|
|
bool oldEnable = target.enabled;
|
|
target.enabled = false;
|
|
|
|
// Find MonoScript of the specified component.
|
|
foreach (var script in Resources.FindObjectsOfTypeAll<MonoScript>())
|
|
{
|
|
if (script.GetClass() != typeof(T))
|
|
continue;
|
|
|
|
// Set 'm_Script' to convert.
|
|
so.FindProperty("m_Script").objectReferenceValue = script;
|
|
so.ApplyModifiedProperties();
|
|
break;
|
|
}
|
|
|
|
(so.targetObject as MonoBehaviour).enabled = oldEnable;
|
|
}
|
|
}
|
|
} |