void FSequencerDragOperation::GetSectionSnapTimes(TArray<float>& OutSnapTimes, UMovieSceneSection* Section, TSharedPtr<FTrackNode> SequencerNode, bool bIgnoreOurSectionCustomSnaps) { // @todo Sequencer handle dilation snapping better // Collect all the potential snap times from other section borders const TArray< TSharedRef<ISequencerSection> >& Sections = SequencerNode->GetSections(); for (int32 SectionIndex = 0; SectionIndex < Sections.Num(); ++SectionIndex) { const UMovieSceneSection* InSection = Sections[SectionIndex]->GetSectionObject(); bool bIsThisSection = Section == InSection; if (!bIgnoreOurSectionCustomSnaps || !bIsThisSection) { InSection->GetSnapTimes(OutSnapTimes, Section != InSection); } } // snap to director track if it exists, and we are not the director track UMovieSceneTrack* OuterTrack = Cast<UMovieSceneTrack>(Section->GetOuter()); UMovieScene* MovieScene = Cast<UMovieScene>(OuterTrack->GetOuter()); UMovieSceneTrack* ShotTrack = MovieScene->FindMasterTrack(UMovieSceneShotTrack::StaticClass()); if (ShotTrack && OuterTrack != ShotTrack) { const TArray<UMovieSceneSection*>& ShotSections = ShotTrack->GetAllSections(); for (int32 SectionIndex = 0; SectionIndex < ShotSections.Num(); ++SectionIndex) { auto Shot = ShotSections[SectionIndex]; Shot->GetSnapTimes(OutSnapTimes, true); } } }
FMovieSceneSequenceInstance::FMovieSceneSequenceInstance(const UMovieSceneTrack& InMovieSceneTrack) { TimeRange = CastChecked<UMovieScene>(InMovieSceneTrack.GetOuter())->GetPlaybackRange(); }