void FFloatPropertySection::GenerateSectionLayout(class ISectionLayoutBuilder& LayoutBuilder) const { UMovieSceneFloatSection* FloatSection = Cast<UMovieSceneFloatSection>(&SectionObject); TAttribute<TOptional<float>> ExternalValue; if (CanGetPropertyValue()) { ExternalValue.Bind(TAttribute<TOptional<float>>::FGetter::CreateLambda([&] { return GetPropertyValue<float>(); })); } TSharedRef<FFloatCurveKeyArea> KeyArea = MakeShareable( new FFloatCurveKeyArea(&FloatSection->GetFloatCurve(), ExternalValue, FloatSection)); LayoutBuilder.SetSectionAsKeyArea(KeyArea); }
bool UMovieSceneFloatTrack::AddKeyToSection( float Time, float Value ) { const UMovieSceneSection* NearestSection = MovieSceneHelpers::FindNearestSectionAtTime( Sections, Time ); if (!NearestSection || CastChecked<UMovieSceneFloatSection>(NearestSection)->NewKeyIsNewData(Time, Value)) { Modify(); UMovieSceneFloatSection* NewSection = Cast<UMovieSceneFloatSection>( FindOrAddSection( Time ) ); NewSection->AddKey( Time, Value ); return true; } return false; }
void FMatineeImportTools::CopyInterpFloatTrack( TSharedRef<ISequencer> Sequencer, UInterpTrackFloatBase* MatineeFloatTrack, UMovieSceneFloatTrack* FloatTrack ) { const FScopedTransaction Transaction( NSLOCTEXT( "Sequencer", "PasteMatineeFloatTrack", "Paste Matinee float track" ) ); bool bSectionCreated = false; FloatTrack->Modify(); float KeyTime = MatineeFloatTrack->GetKeyframeTime( 0 ); UMovieSceneFloatSection* Section = Cast<UMovieSceneFloatSection>( MovieSceneHelpers::FindSectionAtTime( FloatTrack->GetAllSections(), KeyTime ) ); if ( Section == nullptr ) { Section = Cast<UMovieSceneFloatSection>( FloatTrack->CreateNewSection() ); FloatTrack->AddSection( *Section ); bSectionCreated = true; } if (Section->TryModify()) { float SectionMin = Section->GetStartTime(); float SectionMax = Section->GetEndTime(); FRichCurve& FloatCurve = Section->GetFloatCurve(); for ( const auto& Point : MatineeFloatTrack->FloatTrack.Points ) { FMatineeImportTools::SetOrAddKey( FloatCurve, Point.InVal, Point.OutVal, Point.ArriveTangent, Point.LeaveTangent, Point.InterpMode ); SectionMin = FMath::Min( SectionMin, Point.InVal ); SectionMax = FMath::Max( SectionMax, Point.InVal ); } Section->SetStartTime( SectionMin ); Section->SetEndTime( SectionMax ); if ( bSectionCreated ) { Sequencer->NotifyMovieSceneDataChanged(); } } }
void FFloatPropertySection::GenerateSectionLayout( class ISectionLayoutBuilder& LayoutBuilder ) const { UMovieSceneFloatSection* FloatSection = Cast<UMovieSceneFloatSection>( &SectionObject ); KeyArea = MakeShareable( new FFloatCurveKeyArea( &FloatSection->GetFloatCurve(), FloatSection ) ); LayoutBuilder.SetSectionAsKeyArea( KeyArea.ToSharedRef() ); }