void Copy(IEnumerable data, Clipboard.SelectionArea area) { List <ChartObject> chartObjectsCopy = new List <ChartObject>(); foreach (ChartObject chartObject in data) { ChartObject objectToAdd = (ChartObject)chartObject.Clone(); chartObjectsCopy.Add(objectToAdd); } ClipboardObjectController.SetData(chartObjectsCopy.ToArray(), area, editor.currentSong); }
public void Copy() { const float DEFAULT_LEFT = -2; const float DEFAULT_RIGHT = 2; var songObjectsCopy = new SongObject[selectedObjectsManager.currentSelectedObjects.Count]; float?left = null, right = null; float position = 0; bool containsNotes = false; // Scan through all the current objects to determine width of scanned area for (int i = 0; i < selectedObjectsManager.currentSelectedObjects.Count; ++i) { if (!containsNotes && selectedObjectsManager.currentSelectedObjects[i].GetType() == typeof(Note)) { containsNotes = true; } songObjectsCopy[i] = selectedObjectsManager.currentSelectedObjects[i].Clone(); position = SongObjectController.GetXPos(selectedObjectsManager.currentSelectedObjects[i]); if (left == null || position < left) { left = position; } if (right == null || position > right) { right = position; } } // Default collision size if (containsNotes) { if (left > DEFAULT_LEFT) { left = DEFAULT_LEFT; } if (right < DEFAULT_RIGHT) { right = DEFAULT_RIGHT; } } if (left == null) { left = DEFAULT_LEFT; } if (right == null) { right = DEFAULT_RIGHT; } Vector2 bottomLeft = Vector2.zero; Vector2 upperRight = Vector2.zero; var area = new Clipboard.SelectionArea(); if (selectedObjectsManager.currentSelectedObjects.Count > 0) { bottomLeft = new Vector2((float)left, currentSong.TickToWorldYPosition(songObjectsCopy[0].tick)); upperRight = new Vector2((float)right, currentSong.TickToWorldYPosition(songObjectsCopy[songObjectsCopy.Length - 1].tick)); area = new Clipboard.SelectionArea(bottomLeft, upperRight, songObjectsCopy[0].tick, songObjectsCopy[songObjectsCopy.Length - 1].tick); } ClipboardObjectController.SetData(songObjectsCopy, area, currentSong); }