public static AnimationEvent FromClipboard(AnimationWindowEventClipboard e) { return(new AnimationEvent { time = e.time, functionName = e.functionName, stringParameter = e.stringParam, objectReferenceParameter = InternalEditorUtility.GetObjectFromInstanceID(e.objectParam), floatParameter = e.floatParam, intParameter = e.intParam, messageOptions = e.messageOptions }); }
internal static AnimationEvent[] AddPastedEvents(AnimationEvent[] events, float time, out bool[] selected) { selected = null; var data = Clipboard.GetCustomValue <AnimationWindowEventsClipboard>(); if (data?.events == null || data.events.Length == 0) { return(null); } var minTime = data.events.Min(e => e.time); var origEventsCount = events.Length; // Append new events to the end first, var newEvents = new List <AnimationEvent>(); foreach (var e in data.events) { var t = e.time - minTime + time; var newEvent = AnimationWindowEventClipboard.FromClipboard(e); newEvent.time = t; newEvents.Add(newEvent); } events = events.Concat(newEvents).ToArray(); // Re-sort events by time var order = new int[events.Length]; for (var i = 0; i < order.Length; i++) { order[i] = i; } Array.Sort(events, order, new AnimationEventTimeLine.EventComparer()); // Mark pasted ones as selected selected = new bool[events.Length]; for (var i = 0; i < order.Length; ++i) { selected[i] = order[i] >= origEventsCount; } return(events); }