Exemplo n.º 1
0
 protected virtual void OnFoldoutIconGUI(Rect position)
 {
     if (iconAccessor != null)
     {
         LudiqGUI.ObjectField(position, iconAccessor, UnityObjectFieldVisualType.Thumbnail, true, iconPlaceholder?[IconSize.Small]);
     }
     else if (staticIcon != null)
     {
         GUI.DrawTexture(position, staticIcon[IconSize.Small]);
     }
 }
        protected override void OnControlGUI(Rect position)
        {
            EditorGUI.BeginChangeCheck();

            var oldValue = (UnityObject)accessor.value;

            var fieldPosition = new Rect
                                (
                position.x,
                position.y,
                position.width,
                GetObjectFieldHeight(position.width)
                                );

            UnityObject newValue;

            if (fuzzy)
            {
                newValue = LudiqGUI.ObjectField
                           (
                    fieldPosition,
                    oldValue,
                    accessor.definedType,
                    scene,
                    allowAssetObjects,
                    typeLabel,
                    typeIcon,
                    Filter,
                    GetOptions,
                    visualType,
                    hidableFrame
                           );
            }
            else
            {
                newValue = EditorGUI.ObjectField
                           (
                    fieldPosition,
                    oldValue,
                    accessor.definedType,
                    scene != null
                           );
            }

            y += EditorGUIUtility.singleLineHeight;

            var isValid = Filter(newValue);

            if (!isValid)
            {
                y += EditorGUIUtility.standardVerticalSpacing;

                var message = InvalidValueMessage(newValue);

                var invalidValueMessagePosition = position.VerticalSection(ref y, LudiqGUIUtility.GetHelpBoxHeight(message, MessageType.Error, position.width));

                EditorGUI.HelpBox(invalidValueMessagePosition, message, MessageType.Error);

                if (newValue != null && GUI.Button(invalidValueMessagePosition, GUIContent.none, GUIStyle.none))
                {
                    EditorGUIUtility.PingObject(newValue);
                }
            }

            if (EditorGUI.EndChangeCheck())
            {
                if (isValid)
                {
                    accessor.RecordUndo();
                    accessor.value = newValue;
                }
                else
                {
                    Debug.LogWarning(InvalidValueMessage(newValue));
                }
            }
        }