Example #1
0
        private void Decouple(SmartReferenceBase toDecouple, List <Component> components)
        {
            SmartReferenceBase copied = Instantiate(toDecouple);

            foreach (Component component in components)
            {
                System.Type type   = component.GetType();
                FieldInfo[] fields =
                    type.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

                foreach (FieldInfo field in fields)
                {
                    //In case of a smart reference - replace the reference inside
                    if (field.FieldType.IsSubclassOf(typeof(SmartVariableBase)))
                    {
                        object       smartVariable = field.GetValue(component);
                        System.Type  typeTest      = smartVariable.GetType();
                        PropertyInfo referenceFieldfInSmartVariable = typeTest.GetProperty("Reference");
#pragma warning disable CS0252 // Possible unintended reference comparison; It is completely intended
                        if (referenceFieldfInSmartVariable.GetValue(smartVariable, null) == toDecouple)
                        {
                            referenceFieldfInSmartVariable.SetValue(smartVariable, copied, null);
                        }
                    }
                    else if (field.GetValue(component) == toDecouple)
#pragma warning restore CS0252
                    {
                        field.SetValue(component, copied);
                    }
                }
            }
        }
Example #2
0
        public void OnAssetAddedToCollection(Object asset)
        {
#if UNITY_EDITOR
            SmartReferenceBase addedVariable = asset as SmartReferenceBase;
            if (addedVariable != null)
            {
                variables.Add(addedVariable);
                if (variableSaver != null)
                {
                    addedVariable.VariableSaver = variableSaver;
                }

                return;
            }

            SmartVariableSaverBase addedVariableSaver = asset as SmartVariableSaverBase;
            if (addedVariableSaver != null)
            {
                if (variableSaver != null)
                {
                }
                else
                {
                    variableSaver = addedVariableSaver;
                    foreach (SmartReferenceBase variable in variables)
                    {
                        variable.VariableSaver = addedVariableSaver;
                    }
                }

                return;
            }
#endif
        }
Example #3
0
        void OnGUI()
        {
            if (Selection.activeGameObject == null)
            {
                return;
            }

            SmartReferenceBase selectedVariable = Selection.activeObject as SmartReferenceBase;

            if (selectedVariable != null)
            {
                Debug.Log("Tranalksnad");
            }

            List <SmartLocalCollection> visibleCollections = new List <SmartLocalCollection>();
            List <SmartLocalCollection> parentCollections  = new List <SmartLocalCollection>();

            Selection.activeGameObject.GetComponentsInChildren(true, visibleCollections);
            Selection.activeGameObject.GetComponentsInParent(true, parentCollections);

            visibleCollections.AddRange(parentCollections.Where(x => !visibleCollections.Contains(x)));

            Editor collectionEditor = null;

            foreach (SmartLocalCollection collection in visibleCollections)
            {
                DrawVariableCollection(collection, ref collectionEditor);
            }

            DestroyImmediate(collectionEditor);
        }
Example #4
0
        public void AddToCollection(SmartReferenceBase variable)
        {
#if UNITY_EDITOR
            string oldPath = AssetDatabase.GetAssetPath(variable);
            variables.Add(variable);
            AssetDatabase.RemoveObjectFromAsset(variable);
            if (AssetDatabase.LoadAllAssetsAtPath(oldPath).Length == 0)
            {
                AssetDatabase.DeleteAsset(oldPath);
            }

            AssetDatabase.SaveAssets();
#endif
        }
Example #5
0
        public override void OnInspectorGUI()
        {
            SmartLocalCollection collection = target as SmartLocalCollection;

            //Drag in variable to add
            Object             draggedInObject   = EditorGUILayout.ObjectField("Add To Collection", null, typeof(SmartReferenceBase), false);
            SmartReferenceBase draggedInVariable = draggedInObject as SmartReferenceBase;

            if (draggedInVariable != null)
            {
                collection.AddToCollection(draggedInVariable);
            }

            //Draw foldout editors for variables
            Editor editor = null;

            foreach (SmartReferenceBase variable in collection.variables)
            {
                Editor.CreateCachedEditor(variable, typeof(SmartReferenceLocalEditor), ref editor);
                DrawFoldoutInspector(variable, ref editor);
            }
            DestroyImmediate(editor);
        }
Example #6
0
        public void OnAssetRemovedFromCollection(Object asset)
        {
#if UNITY_EDITOR
            SmartVariableSaverBase removedVariableSaver = asset as SmartVariableSaverBase;
            if (removedVariableSaver != null)
            {
                foreach (SmartReferenceBase variable in variables)
                {
                    variable.VariableSaver = null;
                }

                variableSaver = null;
                return;
            }

            SmartReferenceBase removedVariable = asset as SmartReferenceBase;
            if (removedVariable != null)
            {
                removedVariable.VariableSaver = null;
                variables.Remove(removedVariable);
                return;
            }
#endif
        }