diff options
Diffstat (limited to 'Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs')
| -rw-r--r-- | Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs | 208 | 
1 files changed, 0 insertions, 208 deletions
| diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs b/Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs deleted file mode 100644 index 1f30e4e2..00000000 --- a/Assets/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs +++ /dev/null @@ -1,208 +0,0 @@ -//-----------------------------------------------------------------------
 -// <copyright file="FixBrokenUnityObjectWrapperDrawer.cs" company="Sirenix IVS">
 -// Copyright (c) Sirenix IVS. All rights reserved.
 -// </copyright>
 -//-----------------------------------------------------------------------
 -
 -#if UNITY_EDITOR && UNITY_2018_3_OR_NEWER
 -#pragma warning disable
 -
 -namespace Sirenix.OdinInspector.Editor.Drawers
 -{
 -    using Sirenix.OdinInspector;
 -    using Sirenix.OdinInspector.Editor;
 -    using Sirenix.Utilities;
 -    using Sirenix.Utilities.Editor;
 -    using System.Linq;
 -    using UnityEditor;
 -    using UnityEngine;
 -
 -    [DrawerPriority(0.001, 0, 0)]
 -    public class FixBrokenUnityObjectWrapperDrawer<T> : OdinValueDrawer<T>, IDefinesGenericMenuItems
 -        where T : UnityEngine.Component
 -    {
 -        private const string AUTO_FIX_PREFS_KEY = "TemporarilyBrokenUnityObjectWrapperDrawer.autoFix";
 -
 -        private bool isBroken = false;
 -        private T realWrapperInstance;
 -        private bool allowSceneViewObjects;
 -        private static bool autoFix;
 -
 -        protected override void Initialize()
 -        {
 -            this.allowSceneViewObjects = this.ValueEntry.Property.GetAttribute<AssetsOnlyAttribute>() == null;
 -            autoFix = EditorPrefs.HasKey(AUTO_FIX_PREFS_KEY);
 -        }
 -
 -        protected override void DrawPropertyLayout(GUIContent label)
 -        {
 -            if (!(this.ValueEntry.ValueState == PropertyValueState.NullReference || this.ValueEntry.ValueState == PropertyValueState.ReferenceValueConflict))
 -            {
 -                this.CallNextDrawer(label);
 -                return;
 -            }
 -
 -            if (Event.current.type == EventType.Layout)
 -            {
 -                this.isBroken = false;
 -                var count = this.ValueEntry.ValueCount;
 -                for (int i = 0; i < count; i++)
 -                {
 -                    var component = this.ValueEntry.Values[i];
 -
 -                    if (ComponentIsBroken(component, ref this.realWrapperInstance))
 -                    {
 -                        this.isBroken = true;
 -                        break;
 -                    }
 -                }
 -
 -                if (this.isBroken && autoFix)
 -                {
 -                    this.isBroken = false;
 -
 -                    for (int i = 0; i < this.ValueEntry.ValueCount; i++)
 -                    {
 -                        T fixedComponent = null;
 -                        if (ComponentIsBroken(this.ValueEntry.Values[i], ref fixedComponent) && fixedComponent)
 -                        {
 -                            (this.ValueEntry as IValueEntryActualValueSetter<T>).SetActualValue(i, fixedComponent);
 -                        }
 -                    }
 -
 -                    this.ValueEntry.Update();
 -                }
 -            }
 -
 -            if (!this.isBroken)
 -            {
 -                this.CallNextDrawer(label);
 -                return;
 -            }
 -
 -            var rect = EditorGUILayout.GetControlRect(label != null);
 -            var btnRect = rect.AlignRight(20);
 -            var controlRect = rect.SetXMax(btnRect.xMin - 5);
 -
 -            object newInstance = null;
 -
 -            EditorGUI.BeginChangeCheck();
 -            {
 -                if (this.ValueEntry.BaseValueType.IsInterface)
 -                {
 -                    newInstance = SirenixEditorFields.PolymorphicObjectField(controlRect,
 -                        label,
 -                        this.realWrapperInstance,
 -                        this.ValueEntry.BaseValueType,
 -                        this.allowSceneViewObjects);
 -                }
 -                else
 -                {
 -                    newInstance = SirenixEditorFields.UnityObjectField(
 -                        controlRect,
 -                        label,
 -                        this.realWrapperInstance,
 -                        this.ValueEntry.BaseValueType,
 -                        this.allowSceneViewObjects) as Component;
 -                }
 -            }
 -            if (EditorGUI.EndChangeCheck())
 -            {
 -                this.ValueEntry.WeakSmartValue = newInstance;
 -            }
 -
 -            if (GUI.Button(btnRect, " ", EditorStyles.miniButton))
 -            {
 -                var popup = new FixBrokenUnityObjectWrapperPopup(this.ValueEntry);
 -                OdinEditorWindow.InspectObjectInDropDown(popup, 300);
 -            }
 -
 -            if (Event.current.type == EventType.Repaint)
 -            {
 -                GUI.DrawTexture(btnRect, EditorIcons.ConsoleWarnicon, ScaleMode.ScaleToFit);
 -            }
 -        }
 -
 -        private static bool ComponentIsBroken(T component, ref T realInstance)
 -        {
 -            var uObj = component;
 -            var oObj = (object)uObj;
 -
 -            if (oObj != null && uObj == null)
 -            {
 -                var instanceId = uObj.GetInstanceID();
 -                if (AssetDatabase.Contains(instanceId))
 -                {
 -                    var path = AssetDatabase.GetAssetPath(instanceId);
 -                    var realWrapper = AssetDatabase.LoadAllAssetsAtPath(path).FirstOrDefault(n => n.GetInstanceID() == instanceId) as T;
 -                    if (realWrapper)
 -                    {
 -                        realInstance = realWrapper;
 -                        return true;
 -                    }
 -                }
 -            }
 -
 -            return false;
 -        }
 -
 -        public void PopulateGenericMenu(InspectorProperty property, GenericMenu genericMenu)
 -        {
 -            if (EditorPrefs.HasKey(AUTO_FIX_PREFS_KEY))
 -            {
 -                genericMenu.AddItem(new GUIContent("Disable auto-fix of broken prefab instance references"), false, (x) =>
 -                {
 -                    EditorPrefs.DeleteKey(AUTO_FIX_PREFS_KEY);
 -                    autoFix = false;
 -                }, null);
 -            }
 -        }
 -
 -        [TypeInfoBox("This asset reference is temporarily broken until the next reload, because of an error in Unity where the C# wrapper object of a prefab asset is destroyed when changes are made to that prefab asset. This error has been reported to Unity.\n\nMeanwhile, Odin can fix this for you by getting a new, valid wrapper object from the asset database and replacing the broken wrapper instance with the new one.")]
 -        private class FixBrokenUnityObjectWrapperPopup
 -        {
 -            private IPropertyValueEntry<T> valueEntry;
 -
 -            public FixBrokenUnityObjectWrapperPopup(IPropertyValueEntry<T> valueEntry)
 -            {
 -                this.valueEntry = valueEntry;
 -            }
 -
 -            [HorizontalGroup, Button(ButtonSizes.Large)]
 -            public void FixItThisTime()
 -            {
 -                for (int i = 0; i < this.valueEntry.ValueCount; i++)
 -                {
 -                    var localI = i;
 -                    T fixedComponent = null;
 -                    if (ComponentIsBroken(this.valueEntry.Values[i], ref fixedComponent) && fixedComponent)
 -                    {
 -                        this.valueEntry.Property.Tree.DelayActionUntilRepaint(() =>
 -                        {
 -                            (this.valueEntry as IValueEntryActualValueSetter<T>).SetActualValue(localI, fixedComponent);
 -                        });
 -                    }
 -                }
 -
 -                if (GUIHelper.CurrentWindow) 
 -                {
 -                    EditorApplication.delayCall += GUIHelper.CurrentWindow.Close;
 -                }
 -            }
 -
 -            [HorizontalGroup, Button(ButtonSizes.Large)]
 -            public void FixItAlways()
 -            {
 -                EditorPrefs.SetBool(AUTO_FIX_PREFS_KEY, true);
 -                autoFix = true;
 -
 -                if (GUIHelper.CurrentWindow) 
 -                {
 -                    EditorApplication.delayCall += GUIHelper.CurrentWindow.Close;
 -                }
 -            }
 -        }
 -    }
 -}
 -
 -#endif
\ No newline at end of file | 
