/// <summary> /// Pastes the copied objects. Supports undo/redo. /// </summary> /// <param name="pasteTargetActor">The target actor to paste copied data.</param> public void Paste(Actor pasteTargetActor) { // Get clipboard data var data = Clipboard.RawData; // Set paste target if only one actor is selected and no target provided if (pasteTargetActor == null && SelectionCount == 1 && Selection[0] is ActorNode actorNode) { pasteTargetActor = actorNode.Actor; } // Create paste action var pasteAction = PasteActorsAction.Paste(data, pasteTargetActor?.ID ?? Guid.Empty); if (pasteAction != null) { pasteAction.Do(out _, out var nodeParents); // Select spawned objects (parents only) var selectAction = new SelectionChangeAction(Selection.ToArray(), nodeParents.Cast<SceneGraphNode>().ToArray(), OnSelectionUndo); selectAction.Do(); // Build single compound undo action that pastes the actors and selects the created objects (parents only) Undo.AddAction(new MultiUndoAction(pasteAction, selectAction)); OnSelectionChanged(); } }
/// <summary> /// Pastes the copied objects. Supports undo/redo. /// </summary> /// <param name="pasteTargetActor">The target actor to paste copied data.</param> public void Paste(Actor pasteTargetActor) { // Get clipboard data var data = Application.ClipboardRawData; // Ser aste target if only one actor is selected and no target provided if (pasteTargetActor == null && SelectionCount == 1 && Selection[0] is ActorNode actorNode) { pasteTargetActor = actorNode.Actor; } // Create paste action var pasteAction = PasteActorsAction.Paste(data, pasteTargetActor?.ID ?? Guid.Empty); if (pasteAction != null) { OnPasteAcction(pasteAction); } }