void UTimelineTemplate::PostDuplicate(bool bDuplicateForPIE) { Super::PostDuplicate(bDuplicateForPIE); UObject* NewCurveOuter = GetOuter(); #if WITH_EDITOR // The outer should always be a BlueprintGeneratedClass, however the Curves get put into the Blueprint, however if they belong to the Transient package, that's where the duplicated Blueprint should be. if(GetOutermost() != GetTransientPackage()) { if(UBlueprintGeneratedClass* BPClass = Cast<UBlueprintGeneratedClass>(GetOuter())) { NewCurveOuter = BPClass->ClassGeneratedBy; } } #endif // WITH_EDITOR for(TArray<struct FTTFloatTrack>::TIterator It = FloatTracks.CreateIterator();It;++It) { FTTFloatTrack& Track = *It; if( Track.CurveFloat != NULL ) { // Do not duplicate external curves unless duplicating to a transient package if(!Track.CurveFloat->GetOuter()->IsA(UPackage::StaticClass()) || GetOutermost() == GetTransientPackage()) { Track.CurveFloat = DuplicateObject<UCurveFloat>(Track.CurveFloat, NewCurveOuter, *MakeUniqueCurveName(Track.CurveFloat, NewCurveOuter)); } } else { UE_LOG(LogBlueprint, Warning, TEXT("Timeline %s Track %s in %s has an invalid curve. Please fix!"), *TimelineTemplateNameToVariableName(GetFName()), *Track.TrackName.ToString(), *GetPathNameSafe(GetOuter())); } } for(TArray<struct FTTEventTrack>::TIterator It = EventTracks.CreateIterator();It;++It) { FTTEventTrack& Track = *It; if( Track.CurveKeys != NULL ) { // Do not duplicate external curves unless duplicating to a transient package if(!Track.CurveKeys->GetOuter()->IsA(UPackage::StaticClass()) || GetOutermost() == GetTransientPackage()) { Track.CurveKeys = DuplicateObject<UCurveFloat>(Track.CurveKeys, NewCurveOuter, *MakeUniqueCurveName(Track.CurveKeys, NewCurveOuter)); } } else { UE_LOG(LogBlueprint, Warning, TEXT("Timeline %s Track %s in %s has an invalid curve. Please fix!"), *TimelineTemplateNameToVariableName(GetFName()), *Track.TrackName.ToString(), *GetPathNameSafe(GetOuter())); } } for(TArray<struct FTTVectorTrack>::TIterator It = VectorTracks.CreateIterator();It;++It) { FTTVectorTrack& Track = *It; if( Track.CurveVector != NULL ) { // Do not duplicate external curves unless duplicating to a transient package if(!Track.CurveVector->GetOuter()->IsA(UPackage::StaticClass()) || GetOutermost() == GetTransientPackage()) { Track.CurveVector = DuplicateObject<UCurveVector>(Track.CurveVector, NewCurveOuter, *MakeUniqueCurveName(Track.CurveVector, NewCurveOuter)); } } else { UE_LOG(LogBlueprint, Warning, TEXT("Timeline %s Track %s in %s has an invalid curve. Please fix!"), *TimelineTemplateNameToVariableName(GetFName()), *Track.TrackName.ToString(), *GetPathNameSafe(GetOuter())); } } for(TArray<struct FTTLinearColorTrack>::TIterator It = LinearColorTracks.CreateIterator();It;++It) { FTTLinearColorTrack& Track = *It; if( Track.CurveLinearColor != NULL ) { // Do not duplicate external curves unless duplicating to a transient package if(!Track.CurveLinearColor->GetOuter()->IsA(UPackage::StaticClass()) || GetOutermost() == GetTransientPackage()) { Track.CurveLinearColor = DuplicateObject<UCurveLinearColor>(Track.CurveLinearColor, NewCurveOuter, *MakeUniqueCurveName(Track.CurveLinearColor, NewCurveOuter)); } } else { UE_LOG(LogBlueprint, Warning, TEXT("Timeline %s Track %s in %s has an invalid curve. Please fix!"), *TimelineTemplateNameToVariableName(GetFName()), *Track.TrackName.ToString(), *GetPathNameSafe(GetOuter())); } } TimelineGuid = FGuid::NewGuid(); }
void UTimelineTemplate::PostDuplicate(bool bDuplicateForPIE) { Super::PostDuplicate(bDuplicateForPIE); for(TArray<struct FTTFloatTrack>::TIterator It = FloatTracks.CreateIterator();It;++It) { FTTFloatTrack& Track = *It; if( Track.CurveFloat != NULL ) { Track.CurveFloat = DuplicateObject<UCurveFloat>(Track.CurveFloat, Track.CurveFloat->GetOuter(), *MakeUniqueCurveName(Track.CurveFloat)); } else { UE_LOG(LogBlueprint, Warning, TEXT("Track %s has an invalid curve. Please fix!"), *Track.TrackName.ToString()); } } for(TArray<struct FTTEventTrack>::TIterator It = EventTracks.CreateIterator();It;++It) { FTTEventTrack& Track = *It; if( Track.CurveKeys != NULL ) { Track.CurveKeys = DuplicateObject<UCurveFloat>(Track.CurveKeys, Track.CurveKeys->GetOuter(), *MakeUniqueCurveName(Track.CurveKeys)); } else { UE_LOG(LogBlueprint, Warning, TEXT("Track %s has an invalid curve. Please fix!"), *Track.TrackName.ToString()); } } for(TArray<struct FTTVectorTrack>::TIterator It = VectorTracks.CreateIterator();It;++It) { FTTVectorTrack& Track = *It; if( Track.CurveVector != NULL ) { Track.CurveVector = DuplicateObject<UCurveVector>(Track.CurveVector, Track.CurveVector->GetOuter(), *MakeUniqueCurveName(Track.CurveVector)); } else { UE_LOG(LogBlueprint, Warning, TEXT("Track %s has an invalid curve. Please fix!"), *Track.TrackName.ToString()); } } for(TArray<struct FTTLinearColorTrack>::TIterator It = LinearColorTracks.CreateIterator();It;++It) { FTTLinearColorTrack& Track = *It; if( Track.CurveLinearColor != NULL ) { Track.CurveLinearColor = DuplicateObject<UCurveLinearColor>(Track.CurveLinearColor, Track.CurveLinearColor->GetOuter(), *MakeUniqueCurveName(Track.CurveLinearColor)); } else { UE_LOG(LogBlueprint, Warning, TEXT("Track %s has an invalid curve. Please fix!"), *Track.TrackName.ToString()); } } TimelineGuid = FGuid::NewGuid(); }