private bool IsValidInstance(T element, VerifyPrefabTypeAttribute attribute)
        {
            if (element == null)
            {
                return(true);
            }

            PrefabInstanceStatus prefabType = PrefabUtility.GetPrefabInstanceStatus(element);

            switch (prefabType)
            {
            case PrefabInstanceStatus.NotAPrefab:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.NotAPrefab));

            case PrefabInstanceStatus.Connected:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.Connected));

            case PrefabInstanceStatus.Disconnected:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.Disconnected));

            case PrefabInstanceStatus.MissingAsset:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.MissingAsset));
            }

            return(false);
        }
        protected override float GetElementHeight(GUIContent label, T element, VerifyPrefabTypeAttribute attribute, fiGraphMetadata metadata)
        {
            if (IsValidInstance(element, attribute) == false)
            {
                return(33 + Margin);
            }

            return(0);
        }
        protected override T Edit(Rect region, GUIContent label, T element, VerifyPrefabTypeAttribute attribute, fiGraphMetadata metadata)
        {
            if (IsValidInstance(element, attribute) == false)
            {
                region.height -= Margin;

                PrefabType actualPrefabType = PrefabUtility.GetPrefabType(element);
                EditorGUI.HelpBox(region, "This property needs to be a " + attribute.PrefabType + ", not a " + actualPrefabType, MessageType.Error);
            }

            return(element);
        }
        private bool IsValidInstance(T element, VerifyPrefabTypeAttribute attribute)
        {
            if (element == null)
            {
                return(true);
            }


            PrefabType prefabType = PrefabUtility.GetPrefabType(element);

            switch (prefabType)
            {
            case PrefabType.None:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.None));

            case PrefabType.Prefab:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.Prefab));

            case PrefabType.ModelPrefab:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.ModelPrefab));

            case PrefabType.PrefabInstance:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.PrefabInstance));

            case PrefabType.ModelPrefabInstance:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.ModelPrefabInstance));

            case PrefabType.MissingPrefabInstance:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.MissingPrefabInstance));

            case PrefabType.DisconnectedPrefabInstance:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.DisconnectedPrefabInstance));

            case PrefabType.DisconnectedModelPrefabInstance:
                return(IsFlagSet(attribute.PrefabType, VerifyPrefabTypeFlags.DisconnectedModelPrefabInstance));
            }

            return(false);
        }