void FMarginTrackEditor::OnKeyMargin( float KeyTime, const FPropertyChangedParams* PropertyChangedParams ) { FMargin MarginValue = *PropertyChangedParams->GetPropertyValue<FMargin>(); FName PropertyName = PropertyChangedParams->PropertyPath.Last()->GetFName(); for( int32 ObjectIndex = 0; ObjectIndex < PropertyChangedParams->ObjectsThatChanged.Num(); ++ObjectIndex ) { UObject* Object = PropertyChangedParams->ObjectsThatChanged[ObjectIndex]; FMarginKey Key; Key.bAddKeyEvenIfUnchanged = !PropertyChangedParams->bRequireAutoKey; Key.CurveName = PropertyChangedParams->StructPropertyNameToKey; Key.Value = MarginValue; FGuid ObjectHandle = FindOrCreateHandleToObject( Object ); if (ObjectHandle.IsValid()) { UMovieSceneTrack* Track = GetTrackForObject( ObjectHandle, UMovieSceneMarginTrack::StaticClass(), PropertyName ); if( ensure( Track ) ) { UMovieSceneMarginTrack* MarginTrack = CastChecked<UMovieSceneMarginTrack>(Track); MarginTrack->SetPropertyNameAndPath( PropertyName, PropertyChangedParams->GetPropertyPathString() ); // Find or add a new section at the auto-key time and changing the property same property // AddKeyToSection is not actually a virtual, it's redefined in each class with a different type bool bSuccessfulAdd = MarginTrack->AddKeyToSection( KeyTime, Key ); if (bSuccessfulAdd) { MarginTrack->SetAsShowable(); } } } } }
void FAnimationTrackEditor::AddKeyInternal( float KeyTime, const TArray<UObject*> Objects, class UAnimSequence* AnimSequence ) { for( int32 ObjectIndex = 0; ObjectIndex < Objects.Num(); ++ObjectIndex ) { UObject* Object = Objects[ObjectIndex]; if (Object) { UMovieSceneTrack* Track = GetTrackForObject( Object, UMovieSceneAnimationTrack::StaticClass(), FName("Animation")); if (ensure(Track)) { Cast<UMovieSceneAnimationTrack>(Track)->AddNewAnimation( KeyTime, AnimSequence ); } } } }
void FParticleTrackEditor::AddKeyInternal( float KeyTime, const TArray<UObject*> Objects, bool bTrigger) { for( int32 ObjectIndex = 0; ObjectIndex < Objects.Num(); ++ObjectIndex ) { UObject* Object = Objects[ObjectIndex]; FGuid ObjectHandle = FindOrCreateHandleToObject( Object ); if (ObjectHandle.IsValid()) { UMovieSceneTrack* Track = GetTrackForObject( ObjectHandle, UMovieSceneParticleTrack::StaticClass(), FName("ParticleSystem")); if (ensure(Track)) { Cast<UMovieSceneParticleTrack>(Track)->AddNewParticleSystem( KeyTime, bTrigger ); } } } }
void F2DTransformTrackEditor::OnKeyTransform( float KeyTime, const FKeyPropertyParams* PropertyKeyParams ) { TArray<const void*> TransformValues; PropertyKeyParams->PropertyHandle->AccessRawData( TransformValues ); FName PropertyName = PropertyKeyParams->PropertyHandle->GetProperty()->GetFName(); for( int32 ObjectIndex = 0; ObjectIndex < PropertyKeyParams->ObjectsThatChanged.Num(); ++ObjectIndex ) { UObject* Object = PropertyKeyParams->ObjectsThatChanged[ObjectIndex]; FWidgetTransform TransformValue = *(const FWidgetTransform*)TransformValues[ObjectIndex]; F2DTransformKey Key; Key.bAddKeyEvenIfUnchanged = !PropertyKeyParams->bRequireAutoKey; Key.CurveName = PropertyKeyParams->InnerStructPropertyName; Key.Value = TransformValue; FGuid ObjectHandle = FindOrCreateHandleToObject( Object ); if (ObjectHandle.IsValid()) { UMovieSceneTrack* Track = GetTrackForObject( ObjectHandle, UMovieScene2DTransformTrack::StaticClass(), PropertyName ); if( ensure( Track ) ) { UMovieScene2DTransformTrack* TransformTrack = CastChecked<UMovieScene2DTransformTrack>(Track); TransformTrack->SetPropertyNameAndPath( PropertyName, PropertyKeyParams->PropertyPath ); // Find or add a new section at the auto-key time and changing the property same property // AddKeyToSection is not actually a virtual, it's redefined in each class with a different type bool bSuccessfulAdd = TransformTrack->AddKeyToSection( KeyTime, Key ); if (bSuccessfulAdd) { TransformTrack->SetAsShowable(); } } } } }