예제 #1
0
 public void RemoveCurves(IEnumerable <EditorCurveBinding> bindings)
 {
     m_DataSource.RemoveCurves(bindings);
     m_BindingHierarchy.RefreshTree();
     TimelineWindow.instance.state.CalculateRowRects();
     m_LastClipVersion = m_DataSource.GetClipVersion();
 }
예제 #2
0
        internal void RemovePropertiesByIds(IEnumerable <int> ids, bool removeCompleteGroup = true)
        {
            List <EditorCurveBinding> bindingsToRemove = new List <EditorCurveBinding>();

            foreach (int selectedId in ids)
            {
                BindingTreeViewDataSource bindingTree = m_BindingHierarchy.treeViewController.data as BindingTreeViewDataSource;
                CurveTreeViewNode         node        = bindingTree.FindItem(selectedId) as CurveTreeViewNode;
                if (node == null)
                {
                    continue;
                }
                foreach (EditorCurveBinding editorCurveBinding in node.bindings)
                {
                    if (bindingsToRemove.Contains(editorCurveBinding))
                    {
                        continue;
                    }
                    CurveTreeViewNode currentNode = node;
                    do
                    {
                        //check if property is part of a group
                        bool isRoot  = currentNode.depth == 0;
                        bool isGroup = currentNode.displayName == BindingTreeViewDataSource.GroupName(editorCurveBinding);
                        if (!isRoot && !isGroup && removeCompleteGroup)
                        {
                            currentNode = currentNode.parent as CurveTreeViewNode;
                        }
                        else
                        {
                            if (!AnimationWindowUtility.ForceGrouping(editorCurveBinding))
                            {
                                bindingsToRemove.Add(editorCurveBinding);
                            }
                            else //Group to remove
                            {
                                bindingsToRemove.AddRange(currentNode.bindings);
                            }
                            break;
                        }
                    }while (currentNode != null);
                }
            }

            RemoveProperty(bindingsToRemove);
            m_BindingHierarchy.RefreshTree();
            TimelineWindow.instance.state.CalculateRowRects();
        }
예제 #3
0
        void UpdateCurveEditorIfNeeded(WindowState state)
        {
            if ((Event.current.type != EventType.Layout) || (m_DataSource == null) || (m_BindingHierarchy == null) || (m_DataSource.animationClip == null))
            {
                return;
            }

            AnimationClipCurveInfo curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(m_DataSource.animationClip);
            int version = curveInfo.version;

            if (version != m_LastClipVersion)
            {
                // tree has changed
                if (m_LastCurveCount != curveInfo.curves.Length)
                {
                    m_BindingHierarchy.RefreshTree();
                    m_LastCurveCount = curveInfo.curves.Length;
                }
                else
                {
                    // update just the curves
                    m_BindingHierarchy.RefreshCurves();
                }

                // auto frame the clip only at first update
                if (m_LastClipVersion == -1)
                {
                    FrameClip();
                }

                m_LastClipVersion = version;
            }

            if (state.timeInFrames)
            {
                m_CurveEditor.state = new FrameFormatCurveEditorState();
            }
            else
            {
                m_CurveEditor.state = new UnformattedCurveEditorState();
            }

            m_CurveEditor.invSnap = state.referenceSequence.frameRate;
        }