// Copyright Epic Games, Inc. All Rights Reserved. #include "Conditions/MovieSceneDirectorBlueprintConditionUtils.h" #include "K2Node.h" #include "K2Node_FunctionEntry.h" #include "MovieSceneSequence.h" #include "MovieSceneDirectorBlueprintConditionExtension.h" void FMovieSceneDirectorBlueprintConditionUtils::SetEndpoint(UMovieScene* MovieScene, FMovieSceneDirectorBlueprintConditionData* DirectorBlueprintConditionData, UK2Node* NewEndpoint) { UK2Node* ExistingEndpoint = CastChecked(DirectorBlueprintConditionData->WeakEndpoint.Get(), ECastCheckedType::NullAllowed); if (ExistingEndpoint) { ExistingEndpoint->OnUserDefinedPinRenamed().RemoveAll(MovieScene); } if (NewEndpoint) { checkf( NewEndpoint->IsA(), TEXT("Only functions are supported as dynamic binding endpoints")); NewEndpoint->OnUserDefinedPinRenamed().AddUObject(MovieScene, &UMovieScene::OnDirectorBlueprintConditionUserDefinedPinRenamed); DirectorBlueprintConditionData->WeakEndpoint = NewEndpoint; } else { DirectorBlueprintConditionData->WeakEndpoint = nullptr; } } void FMovieSceneDirectorBlueprintConditionUtils::EnsureBlueprintExtensionCreated(UMovieSceneSequence* MovieSceneSequence, UBlueprint* Blueprint) { if (!Blueprint) { return; } check(MovieSceneSequence); for (const TObjectPtr& Extension : Blueprint->GetExtensions()) { UMovieSceneDirectorBlueprintConditionExtension* DirectorBlueprintConditionExtension = Cast(Extension); if (DirectorBlueprintConditionExtension) { DirectorBlueprintConditionExtension->BindTo(MovieSceneSequence); return; } } UMovieSceneDirectorBlueprintConditionExtension* DirectorBlueprintConditionExtension = NewObject(Blueprint); DirectorBlueprintConditionExtension->BindTo(MovieSceneSequence); Blueprint->AddExtension(DirectorBlueprintConditionExtension); }