Exemple #1
0
        public void Update()
        {
            if (!m_Undo || null == m_Undo)
            {
                return;
            }

            RefreshAll();

            m_FrameChanges.Clear();
            m_Caretaker.Update();

            // Handle deleted objects
            foreach (var unregistered in m_Registry.AllUnregistered())
            {
                m_FrameChanges.Add(new Change {
                    Id = unregistered.Id, Version = m_Undo.Version, RegistryObject = unregistered, NextVersion = null, PreviousVersion = GetPreviousValue(unregistered)
                });
            }
            m_Registry.ClearUnregisteredObjects();

            if (m_FrameChanges.Count > 0)
            {
                if (TryMergeChanges())
                {
                    return;
                }

                //Debug.Log("UndoRedoable operation registered");
                // We didn't / couldn't merge the changes, push a new changeset.
                m_UndoableChanges.Add(new HashSet <Change>(m_FrameChanges, new ChangeComparer()));
                m_Undo.IncrementVersion();
                m_RedoableChanges.Clear();
                ++m_CurrentIndex;
            }
        }