private TreeViewItem AddScriptableObjectToHierarchy(ScriptableObject scriptableObject, AnimationClip clip, TreeViewItem parent)
        {
            EditorCurveBinding[] animatableBindings = AnimationUtility.GetAnimatableBindings(scriptableObject);
            EditorCurveBinding[] array = (from c in animatableBindings
                                          where !AnimationWindowUtility.IsCurveCreated(clip, c)
                                          select c).ToArray <EditorCurveBinding>();
            TreeViewItem treeViewItem;

            if (array.Length > 0)
            {
                treeViewItem = this.AddAnimatableObjectToHierarchy(array, parent, "");
            }
            else
            {
                treeViewItem = new AddCurvesPopupObjectNode(parent, "", scriptableObject.name);
            }
            if (this.m_RootItem == null)
            {
                this.m_RootItem = treeViewItem;
            }
            return(treeViewItem);
        }
        private TreeViewItem AddScriptableObjectToHierarchy(ScriptableObject scriptableObject, AnimationClip clip, TreeViewItem parent)
        {
            EditorCurveBinding[] allCurveBindings  = AnimationUtility.GetAnimatableBindings(scriptableObject);
            EditorCurveBinding[] availableBindings = allCurveBindings.Where(c => !AnimationWindowUtility.IsCurveCreated(clip, c)).ToArray();

            TreeViewItem node = null;

            if (availableBindings.Length > 0)
            {
                node = AddAnimatableObjectToHierarchy(availableBindings, parent, "");
            }
            else
            {
                node = new AddCurvesPopupObjectNode(parent, "", scriptableObject.name);
            }

            if (m_RootItem == null)
            {
                m_RootItem = node;
            }

            return(node);
        }
        private TreeViewItem AddGameObjectToHierarchy(GameObject gameObject, GameObject rootGameObject, AnimationClip animationClip, TreeViewItem parent)
        {
            string              path       = AnimationUtility.CalculateTransformPath(gameObject.transform, rootGameObject.transform);
            TreeViewItem        node       = new AddCurvesPopupGameObjectNode(gameObject, parent, gameObject.name);
            List <TreeViewItem> childNodes = new List <TreeViewItem>();

            if (m_RootItem == null)
            {
                m_RootItem = node;
            }

            // Iterate over all animatable objects
            EditorCurveBinding[]      allCurveBindings     = AnimationUtility.GetAnimatableBindings(gameObject, rootGameObject);
            List <EditorCurveBinding> singleObjectBindings = new List <EditorCurveBinding>();

            for (int i = 0; i < allCurveBindings.Length; i++)
            {
                EditorCurveBinding curveBinding = allCurveBindings[i];

                singleObjectBindings.Add(curveBinding);

                // Don't create group for GameObject.m_IsActive. It looks messy
                if (curveBinding.propertyName == "m_IsActive")
                {
                    // Don't show for the root go
                    if (curveBinding.path != "")
                    {
                        TreeViewItem newNode = CreateNode(singleObjectBindings.ToArray(), node);
                        if (newNode != null)
                        {
                            childNodes.Add(newNode);
                        }
                        singleObjectBindings.Clear();
                    }
                    else
                    {
                        singleObjectBindings.Clear();
                    }
                }
                else
                {
                    // We expect allCurveBindings to come sorted by type

                    bool isLastItemOverall     = (i == allCurveBindings.Length - 1);
                    bool isLastItemOnThisGroup = false;

                    if (!isLastItemOverall)
                    {
                        isLastItemOnThisGroup = (allCurveBindings[i + 1].type != curveBinding.type);
                    }

                    // Let's not add those that already have a existing curve.
                    if (AnimationWindowUtility.IsCurveCreated(animationClip, curveBinding))
                    {
                        singleObjectBindings.Remove(curveBinding);
                    }

                    // Remove animator enabled property which shouldn't be animated.
                    if (curveBinding.type == typeof(Animator) && curveBinding.propertyName == "m_Enabled")
                    {
                        singleObjectBindings.Remove(curveBinding);
                    }

                    if ((isLastItemOverall || isLastItemOnThisGroup) && singleObjectBindings.Count > 0)
                    {
                        childNodes.Add(AddAnimatableObjectToHierarchy(singleObjectBindings.ToArray(), node, path));
                        singleObjectBindings.Clear();
                    }
                }
            }

            if (showEntireHierarchy)
            {
                // Iterate over all child GOs
                for (int i = 0; i < gameObject.transform.childCount; i++)
                {
                    Transform    childTransform = gameObject.transform.GetChild(i);
                    TreeViewItem childNode      = AddGameObjectToHierarchy(childTransform.gameObject, rootGameObject, animationClip, node);
                    if (childNode != null)
                    {
                        childNodes.Add(childNode);
                    }
                }
            }

            TreeViewUtility.SetChildParentReferences(childNodes, node);
            return(node);
        }
        private TreeViewItem AddGameObjectToHierarchy(GameObject gameObject, GameObject rootGameObject, AnimationClip animationClip, TreeViewItem parent)
        {
            string              path         = AnimationUtility.CalculateTransformPath(gameObject.transform, rootGameObject.transform);
            TreeViewItem        treeViewItem = new AddCurvesPopupGameObjectNode(gameObject, parent, gameObject.name);
            List <TreeViewItem> list         = new List <TreeViewItem>();

            if (this.m_RootItem == null)
            {
                this.m_RootItem = treeViewItem;
            }
            EditorCurveBinding[]      animatableBindings = AnimationUtility.GetAnimatableBindings(gameObject, rootGameObject);
            List <EditorCurveBinding> list2 = new List <EditorCurveBinding>();

            for (int i = 0; i < animatableBindings.Length; i++)
            {
                EditorCurveBinding editorCurveBinding = animatableBindings[i];
                list2.Add(editorCurveBinding);
                if (editorCurveBinding.propertyName == "m_IsActive")
                {
                    if (editorCurveBinding.path != "")
                    {
                        TreeViewItem treeViewItem2 = this.CreateNode(list2.ToArray(), treeViewItem);
                        if (treeViewItem2 != null)
                        {
                            list.Add(treeViewItem2);
                        }
                        list2.Clear();
                    }
                    else
                    {
                        list2.Clear();
                    }
                }
                else
                {
                    bool flag  = i == animatableBindings.Length - 1;
                    bool flag2 = false;
                    if (!flag)
                    {
                        flag2 = (animatableBindings[i + 1].type != editorCurveBinding.type);
                    }
                    if (AnimationWindowUtility.IsCurveCreated(animationClip, editorCurveBinding))
                    {
                        list2.Remove(editorCurveBinding);
                    }
                    if (editorCurveBinding.type == typeof(Animator) && editorCurveBinding.propertyName == "m_Enabled")
                    {
                        list2.Remove(editorCurveBinding);
                    }
                    if ((flag || flag2) && list2.Count > 0)
                    {
                        list.Add(this.AddAnimatableObjectToHierarchy(list2.ToArray(), treeViewItem, path));
                        list2.Clear();
                    }
                }
            }
            if (AddCurvesPopupHierarchyDataSource.showEntireHierarchy)
            {
                for (int j = 0; j < gameObject.transform.childCount; j++)
                {
                    Transform    child         = gameObject.transform.GetChild(j);
                    TreeViewItem treeViewItem3 = this.AddGameObjectToHierarchy(child.gameObject, rootGameObject, animationClip, treeViewItem);
                    if (treeViewItem3 != null)
                    {
                        list.Add(treeViewItem3);
                    }
                }
            }
            TreeViewUtility.SetChildParentReferences(list, treeViewItem);
            return(treeViewItem);
        }
        private TreeViewItem AddGameObjectToHierarchy(GameObject gameObject, TreeViewItem parent)
        {
            string              path         = AnimationUtility.CalculateTransformPath(gameObject.transform, this.state.activeRootGameObject.transform);
            TreeViewItem        parentNode   = new AddCurvesPopupGameObjectNode(gameObject, parent, gameObject.name);
            List <TreeViewItem> visibleItems = new List <TreeViewItem>();

            if (parent == null)
            {
                base.m_RootItem = parentNode;
            }
            EditorCurveBinding[]      animatableBindings = AnimationUtility.GetAnimatableBindings(gameObject, this.state.activeRootGameObject);
            List <EditorCurveBinding> list2 = new List <EditorCurveBinding>();

            for (int i = 0; i < animatableBindings.Length; i++)
            {
                EditorCurveBinding item = animatableBindings[i];
                list2.Add(item);
                if (item.propertyName == "m_IsActive")
                {
                    if (item.path != string.Empty)
                    {
                        TreeViewItem item2 = this.CreateNode(list2.ToArray(), parentNode);
                        if (item2 != null)
                        {
                            visibleItems.Add(item2);
                        }
                        list2.Clear();
                    }
                    else
                    {
                        list2.Clear();
                    }
                }
                else
                {
                    bool flag  = i == (animatableBindings.Length - 1);
                    bool flag2 = false;
                    if (!flag)
                    {
                        flag2 = animatableBindings[i + 1].type != item.type;
                    }
                    if (AnimationWindowUtility.IsCurveCreated(this.state.activeAnimationClip, item))
                    {
                        list2.Remove(item);
                    }
                    if ((flag || flag2) && (list2.Count > 0))
                    {
                        visibleItems.Add(this.AddAnimatableObjectToHierarchy(this.state.activeRootGameObject, list2.ToArray(), parentNode, path));
                        list2.Clear();
                    }
                }
            }
            if (showEntireHierarchy)
            {
                for (int j = 0; j < gameObject.transform.childCount; j++)
                {
                    Transform    child = gameObject.transform.GetChild(j);
                    TreeViewItem item3 = this.AddGameObjectToHierarchy(child.gameObject, parentNode);
                    if (item3 != null)
                    {
                        visibleItems.Add(item3);
                    }
                }
            }
            TreeViewUtility.SetChildParentReferences(visibleItems, parentNode);
            return(parentNode);
        }
Esempio n. 6
0
        private TreeViewItem AddGameObjectToHierarchy(GameObject gameObject, TreeViewItem parent)
        {
            string              transformPath = AnimationUtility.CalculateTransformPath(gameObject.transform, this.state.activeRootGameObject.transform);
            TreeViewItem        treeViewItem  = (TreeViewItem) new AddCurvesPopupGameObjectNode(gameObject, parent, gameObject.name);
            List <TreeViewItem> visibleItems  = new List <TreeViewItem>();

            if (parent == null)
            {
                this.m_RootItem = treeViewItem;
            }
            EditorCurveBinding[]      animatableBindings     = AnimationUtility.GetAnimatableBindings(gameObject, this.state.activeRootGameObject);
            List <EditorCurveBinding> editorCurveBindingList = new List <EditorCurveBinding>();

            for (int index = 0; index < animatableBindings.Length; ++index)
            {
                EditorCurveBinding binding = animatableBindings[index];
                editorCurveBindingList.Add(binding);
                if (binding.propertyName == "m_IsActive")
                {
                    if (binding.path != string.Empty)
                    {
                        TreeViewItem node = this.CreateNode(editorCurveBindingList.ToArray(), treeViewItem);
                        if (node != null)
                        {
                            visibleItems.Add(node);
                        }
                        editorCurveBindingList.Clear();
                    }
                    else
                    {
                        editorCurveBindingList.Clear();
                    }
                }
                else
                {
                    bool flag1 = index == animatableBindings.Length - 1;
                    bool flag2 = false;
                    if (!flag1)
                    {
                        flag2 = animatableBindings[index + 1].type != binding.type;
                    }
                    if (AnimationWindowUtility.IsCurveCreated(this.state.activeAnimationClip, binding))
                    {
                        editorCurveBindingList.Remove(binding);
                    }
                    if ((flag1 || flag2) && editorCurveBindingList.Count > 0)
                    {
                        visibleItems.Add(this.AddAnimatableObjectToHierarchy(this.state.activeRootGameObject, editorCurveBindingList.ToArray(), treeViewItem, transformPath));
                        editorCurveBindingList.Clear();
                    }
                }
            }
            if (AddCurvesPopupHierarchyDataSource.showEntireHierarchy)
            {
                for (int index = 0; index < gameObject.transform.childCount; ++index)
                {
                    TreeViewItem hierarchy = this.AddGameObjectToHierarchy(gameObject.transform.GetChild(index).gameObject, treeViewItem);
                    if (hierarchy != null)
                    {
                        visibleItems.Add(hierarchy);
                    }
                }
            }
            TreeViewUtility.SetChildParentReferences(visibleItems, treeViewItem);
            return(treeViewItem);
        }