Exemplo n.º 1
0
        internal static void DuplicateBindings(TrackAsset track, TrackAsset newTrack, PlayableDirector director)
        {
            var originalTracks = track.GetFlattenedChildTracks().Append(track);
            var newTracks      = newTrack.GetFlattenedChildTracks().Append(newTrack);
            var toBind         = new List <Tuple <TrackAsset, Object> >();

            // Collect all track bindings to duplicate
            var originalIt = originalTracks.GetEnumerator();
            var newIt      = newTracks.GetEnumerator();

            while (originalIt.MoveNext() && newIt.MoveNext())
            {
                var binding = director.GetGenericBinding(originalIt.Current);
                if (binding != null)
                {
                    toBind.Add(new Tuple <TrackAsset, Object>(newIt.Current, binding));
                }
            }

            //Only create Director undo if there are bindings to duplicate
            if (toBind.Count > 0)
            {
                TimelineUndo.PushUndo(TimelineEditor.inspectedDirector, L10n.Tr("Duplicate"));
            }

            //Assign bindings for all tracks after undo.
            foreach (var binding in toBind)
            {
                TimelineEditor.inspectedDirector.SetGenericBinding(binding.Item1, binding.Item2);
            }
        }