#pragma warning disable 618
        private void AddDNAConverterModifiers(DynamicDNAConverterBehaviour tempDNAAsset, int addMethod)
        {
            //Do we need to make sure the dna names are there as well? What is there is no dna asset?
            //now add the modifiers
            var currentModifiers = addMethod == 0 ? (target as DynamicDNAConverterBehaviour).skeletonModifiers : new List <SkeletonModifier>();

            for (int i = 0; i < tempDNAAsset.skeletonModifiers.Count; i++)
            {
                bool existed = false;
                for (int ci = 0; ci < currentModifiers.Count; ci++)
                {
                    if ((currentModifiers[ci].hash == tempDNAAsset.skeletonModifiers[i].hash) && currentModifiers[ci].property == tempDNAAsset.skeletonModifiers[i].property)
                    {
                        existed = true;
                        break;
                    }
                }
                if (!existed)
                {
                    currentModifiers.Add(new SkeletonModifier(tempDNAAsset.skeletonModifiers[i]));
                }
            }
            (target as DynamicDNAConverterBehaviour).skeletonModifiers = currentModifiers;
            serializedObject.Update();
        }
#pragma warning disable 618
        private void Init()
        {
            if (!initialized)
            {
                if (umaData != null)
                {
                    bonesInSkeleton = new List <string>(umaData.skeleton.BoneNames);
                }
                bonesInSkeleton.Sort();
                UpdateNames();

                //Style for Tips
                foldoutTipStyle           = new GUIStyle(EditorStyles.foldout);
                foldoutTipStyle.fontStyle = FontStyle.Bold;

                _target = target as DynamicDNAConverterBehaviour;

                converterControllerProp = serializedObject.FindProperty("_converterController");

                if (converterControllerProp.objectReferenceValue == null)
                {
                    drawAsLegacy = false;
                }
                else
                {
                    drawAsLegacy = true;
                }

                initialized = true;
            }
        }
        private void RecursiveScanFoldersForAssets(string path, Delegate callback, int addMethod)
        {
            var assetFiles = System.IO.Directory.GetFiles(path, "*.prefab");

            foreach (var assetFile in assetFiles)
            {
                var tempDnaGO = AssetDatabase.LoadAssetAtPath(assetFile, typeof(GameObject)) as GameObject;
                DynamicDNAConverterBehaviour tempDnaAsset = tempDnaGO.GetComponent <DynamicDNAConverterBehaviour>();
                if (tempDnaAsset)
                {
                    callback.DynamicInvoke(tempDnaAsset, addMethod);
                }
            }
            foreach (var subFolder in System.IO.Directory.GetDirectories(path))
            {
                RecursiveScanFoldersForAssets(subFolder.Replace('\\', '/'), callback, addMethod);
            }
        }
        private void ImportConverterDropArea(Rect dropArea, int addMethod, Action <DynamicDNAConverterBehaviour, int> callback)
        {
            Event evt = Event.current;

            if (evt.type == EventType.DragUpdated)
            {
                if (dropArea.Contains(evt.mousePosition))
                {
                    DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                }
                Event.current.Use();
                return;
            }
            if (evt.type == EventType.DragPerform)
            {
                if (dropArea.Contains(evt.mousePosition))
                {
                    DragAndDrop.AcceptDrag();

                    UnityEngine.Object[] draggedObjects = DragAndDrop.objectReferences as UnityEngine.Object[];
                    for (int i = 0; i < draggedObjects.Length; i++)
                    {
                        if (draggedObjects[i])
                        {
                            GameObject tempDnaGO = draggedObjects[i] as GameObject;
                            DynamicDNAConverterBehaviour tempDnaAsset = tempDnaGO.GetComponent <DynamicDNAConverterBehaviour>();
                            if (tempDnaAsset)
                            {
                                callback.DynamicInvoke(tempDnaAsset, addMethod);
                                continue;
                            }

                            var path = AssetDatabase.GetAssetPath(draggedObjects[i]);
                            if (System.IO.Directory.Exists(path))
                            {
                                RecursiveScanFoldersForAssets(path, callback, addMethod);
                            }
                        }
                    }
                }
                Event.current.Use();
                return;
            }
        }
        public void Init(DynamicDNAConverterBehaviour targetDDCB, SerializedObject DDCBSO, UMAData umaData, DynamicDNAConverterCustomizer DDCC, List <string> bonesList)
        {
            if (_skelModPropDrawer == null)
            {
                _skelModPropDrawer = new SkeletonModifierPropertyDrawer();
            }
            _skelModPropDrawer.AllowLegacyDNADrawer = true;
            target           = targetDDCB;
            serializedObject = DDCBSO;
            this.umaData     = umaData;
            thisDDCC         = DDCC;
            bonesInSkeleton  = bonesList;
            this.minimalMode = thisDDCC != null;
            UpdateNames();
            //Style for Tips
            foldoutTipStyle           = new GUIStyle(EditorStyles.foldout);
            foldoutTipStyle.fontStyle = FontStyle.Bold;

            initialized = true;
        }