You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
56 lines
1.8 KiB
namespace Mapbox.Editor
|
|
{
|
|
using Mapbox.Unity.MeshGeneration.Modifiers;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
[CustomPropertyDrawer(typeof(AddMonoBehavioursModifierType))]
|
|
class AddMonoBehavioursModifierDrawer : PropertyDrawer
|
|
{
|
|
const int _offset = 40;
|
|
MonoScript _monoscript;
|
|
|
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
{
|
|
EditorGUI.BeginProperty(position, label, property);
|
|
|
|
position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
|
|
var scriptRect = new Rect(position.x, position.y, position.width, position.height - _offset);
|
|
var helpRect = new Rect(position.x, position.y + _offset / 2, position.width, _offset);
|
|
var typeStringProperty = property.FindPropertyRelative("_typeString");
|
|
var monoscriptProperty = property.FindPropertyRelative("_script");
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
|
|
_monoscript = monoscriptProperty.objectReferenceValue as MonoScript;
|
|
_monoscript = EditorGUI.ObjectField(scriptRect, _monoscript, typeof(MonoScript), false) as MonoScript;
|
|
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
var type = _monoscript.GetClass();
|
|
if (type != null && type.IsSubclassOf(typeof(MonoBehaviour)))
|
|
{
|
|
monoscriptProperty.objectReferenceValue = _monoscript;
|
|
typeStringProperty.stringValue = _monoscript.GetClass().ToString();
|
|
}
|
|
else
|
|
{
|
|
monoscriptProperty.objectReferenceValue = null;
|
|
typeStringProperty.stringValue = "";
|
|
}
|
|
}
|
|
|
|
if (monoscriptProperty.objectReferenceValue == null)
|
|
{
|
|
EditorGUI.HelpBox(helpRect, "Selected object is not a MonoBehaviour!", MessageType.Error);
|
|
}
|
|
|
|
EditorGUI.EndProperty();
|
|
}
|
|
|
|
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
|
{
|
|
return base.GetPropertyHeight(property, label) + _offset;
|
|
}
|
|
}
|
|
} |