/// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="selectReason">
        /// If there were any objects which were selected, this specifies the selection reason.
        /// </param>
        /// <param name="objectsWhichWereSelected">
        /// The objects which were selected. If the select reason is 'None', this list is empty.
        /// This can be null or empty when the select reason is 'None'.
        /// </param>
        /// <param name="deselectReason">
        /// If there were any objects which were deselected, this secifies the reason why they
        /// were deselected.
        /// </param>
        /// <param name="objectsWhichWereDeselected">
        /// The objects which were deselected. If the select reason is 'None', this list is empty.
        /// This can be null or empty when the deselect reason is 'None'.
        /// </param>
        /// <param name="undoRedoSnapshot">
        /// If the object selection was changed because of an Undo/Redo operation, this has to point
        /// to a snapshot instance which represents the state of the object selection before being
        /// modified. Otherwise, this has to be null.
        /// </param>
        public ObjectSelectionChangedEventArgs(ObjectSelectReason selectReason, List <GameObject> objectsWhichWereSelected,
                                               ObjectDeselectReason deselectReason, List <GameObject> objectsWhichWereDeselected,
                                               ObjectSelectionSnapshot undoRedoSnapshot = null)
        {
            _selectReason = selectReason;
            if (objectsWhichWereSelected != null)
            {
                _objectsWhichWereSelected = new List <GameObject>(objectsWhichWereSelected);
            }
            else
            {
                _objectsWhichWereSelected = new List <GameObject>();
            }

            _deselectReason = deselectReason;
            if (objectsWhichWereDeselected != null)
            {
                _objectsWhichWereDeselected = new List <GameObject>(objectsWhichWereDeselected);
            }
            else
            {
                _objectsWhichWereDeselected = new List <GameObject>();
            }

            if (_selectReason == ObjectSelectReason.Undo || _selectReason == ObjectSelectReason.Redo ||
                _deselectReason == ObjectDeselectReason.Undo || _deselectReason == ObjectDeselectReason.Redo)
            {
                _undoRedoSnapshot = undoRedoSnapshot;
            }
        }
        public void Execute()
        {
            // Only delete if we haven't deleted already
            if (_postDeleteSnapshot == null && _selectedObjects.Count != 0)
            {
                // Loop through each selected object
                _deletedObjects = new List <GameObject>(_selectedObjects.Count);
                foreach (var selectedObject in _selectedObjects)
                {
                    // Add the object to the deleted list and make it inactive
                    _deletedObjects.Add(selectedObject);
                    selectedObject.SetActive(false);
                }

                // Take a post delete snapshot to allow us to redo
                _postDeleteSnapshot = new ObjectSelectionSnapshot();
                _postDeleteSnapshot.Snapshot();

                // Record th action with the Undo/Redo system
                RTUndoRedo.Get.RecordAction(this);
                _canDestroyObjects = true;
            }
        }
 public DeleteSelectedObjectsAction(List <GameObject> selectedObjects, ObjectSelectionSnapshot preDeleteSnapshot)
 {
     _selectedObjects   = new List <GameObject>(selectedObjects);
     _preDeleteSnapshot = preDeleteSnapshot;
 }
 public PostObjectSelectionChangedAction(ObjectSelectionSnapshot preChangeSnapshot, ObjectSelectionSnapshot postChangeSnapshot)
 {
     _preChangeSnapshot  = preChangeSnapshot;
     _postChangeSnapshot = postChangeSnapshot;
 }
 public ObjectSelectionSnapshot(ObjectSelectionSnapshot copy)
 {
     _snapshotObjects = copy.SnapshotObjects;
     _gizmosSnapshot  = copy.GizmosSnapshot;
 }