void FSlomoTrackEditor::HandleAddSlomoTrackMenuEntryExecute() { UMovieSceneSequence* FocusedSequence = GetSequencer()->GetFocusedMovieSceneSequence(); UMovieScene* MovieScene = FocusedSequence->GetMovieScene(); if (MovieScene == nullptr) { return; } UMovieSceneTrack* SlomoTrack = MovieScene->FindMasterTrack( UMovieSceneSlomoTrack::StaticClass() ); if (SlomoTrack != nullptr) { return; } const FScopedTransaction Transaction(NSLOCTEXT("Sequencer", "AddSlomoTrack_Transaction", "Add Play Rate Track")); MovieScene->Modify(); SlomoTrack = GetMasterTrack( UMovieSceneSlomoTrack::StaticClass() ); ensure(SlomoTrack); SlomoTrack->AddSection(SlomoTrack->CreateNewSection()); GetSequencer()->NotifyMovieSceneDataChanged(); }
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); } } }
void FSequencer::AddSubMovieScene( UMovieScene* SubMovieScene ) { // @todo Sequencer - sub-moviescenes This should be moved to the sub-moviescene editor SubMovieScene->SetFlags( RF_Transactional ); // Grab the MovieScene that is currently focused. THis is the movie scene that will contain the sub-moviescene UMovieScene* OwnerMovieScene = GetFocusedMovieScene(); // @todo sequencer: Undo doesn't seem to be working at all const FScopedTransaction Transaction( LOCTEXT("UndoAddingObject", "Add Object to MovieScene") ); OwnerMovieScene->Modify(); UMovieSceneTrack* Type = OwnerMovieScene->FindMasterTrack( USubMovieSceneTrack::StaticClass() ) ; if( !Type ) { Type = OwnerMovieScene->AddMasterTrack( USubMovieSceneTrack::StaticClass() ); } USubMovieSceneTrack* SubMovieSceneType = CastChecked<USubMovieSceneTrack>( Type ); SubMovieSceneType->AddMovieSceneSection( SubMovieScene, ScrubPosition ); }