本文整理汇总了C++中UMovieSceneSection::SetEndTime方法的典型用法代码示例。如果您正苦于以下问题:C++ UMovieSceneSection::SetEndTime方法的具体用法?C++ UMovieSceneSection::SetEndTime怎么用?C++ UMovieSceneSection::SetEndTime使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UMovieSceneSection
的用法示例。
在下文中一共展示了UMovieSceneSection::SetEndTime方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SplitSection
UMovieSceneSection* UMovieSceneSection::SplitSection(float SplitTime)
{
if (!IsTimeWithinSection(SplitTime))
{
return nullptr;
}
SetFlags(RF_Transactional);
if (TryModify())
{
float SectionEndTime = GetEndTime();
// Trim off the right
SetEndTime(SplitTime);
// Create a new section
UMovieSceneTrack* Track = CastChecked<UMovieSceneTrack>(GetOuter());
Track->Modify();
UMovieSceneSection* NewSection = DuplicateObject<UMovieSceneSection>(this, Track);
check(NewSection);
NewSection->SetStartTime(SplitTime);
NewSection->SetEndTime(SectionEndTime);
Track->AddSection(*NewSection);
return NewSection;
}
return nullptr;
}
示例2: PasteKeys
void FNameCurveKeyArea::PasteKeys(const FMovieSceneClipboardKeyTrack& KeyTrack, const FMovieSceneClipboardEnvironment& SrcEnvironment, const FSequencerPasteEnvironment& DstEnvironment)
{
float PasteAt = DstEnvironment.CardinalTime;
KeyTrack.IterateKeys([&](const FMovieSceneClipboardKey& Key){
UMovieSceneSection* Section = GetOwningSection();
if (!Section)
{
return true;
}
if (Section->TryModify())
{
float Time = PasteAt + Key.GetTime();
if (Section->GetStartTime() > Time)
{
Section->SetStartTime(Time);
}
if (Section->GetEndTime() < Time)
{
Section->SetEndTime(Time);
}
FKeyHandle KeyHandle = Curve.UpdateOrAddKey(Time, Key.GetValue<FName>());
DstEnvironment.ReportPastedKey(KeyHandle, *this);
}
return true;
});
}
示例3: FindOrAddSection
UMovieSceneSection* UMovieScenePropertyTrack::FindOrAddSection( float Time )
{
// Find a spot for the section so that they are sorted by start time
for( int32 SectionIndex = 0; SectionIndex < Sections.Num(); ++SectionIndex )
{
UMovieSceneSection* Section = Sections[SectionIndex];
if( Section->IsTimeWithinSection( Time ) )
{
return Section;
}
// Check if there are no more sections that would overlap the time
if( !Sections.IsValidIndex( SectionIndex+1 ) || Sections[SectionIndex+1]->GetStartTime() > Time )
{
// No sections overlap the time
if( SectionIndex > 0 )
{
// Append and grow the previous section
UMovieSceneSection* PreviousSection = Sections[ SectionIndex ? SectionIndex-1 : 0 ];
PreviousSection->SetEndTime( Time );
return PreviousSection;
}
else if( Sections.IsValidIndex( SectionIndex+1 ) )
{
// Prepend and grow the next section because there are no sections before this one
UMovieSceneSection* NextSection = Sections[SectionIndex+1];
NextSection->SetStartTime( Time );
return NextSection;
}
else
{
// SectionIndex == 0
UMovieSceneSection* PreviousSection = Sections[0];
if( PreviousSection->GetEndTime() < Time )
{
// Append and grow the section
PreviousSection->SetEndTime( Time );
}
else
{
// Prepend and grow the section
PreviousSection->SetStartTime( Time );
}
return PreviousSection;
}
}
}
check( Sections.Num() == 0 );
// Add a new section that starts and ends at the same time
UMovieSceneSection* NewSection = CreateNewSection();
NewSection->SetStartTime( Time );
NewSection->SetEndTime( Time );
Sections.Add( NewSection );
return NewSection;
}
示例4: OnDrag
void FMoveKeys::OnDrag( const FPointerEvent& MouseEvent, const FVector2D& LocalMousePos, const FTimeToPixel& TimeToPixelConverter, TSharedPtr<FTrackNode> SequencerNode )
{
// Convert the delta position to a delta time amount that was moved
float MouseTime = TimeToPixelConverter.PixelToTime(LocalMousePos.X);
float SelectedKeyTime = DraggedKey.KeyArea->GetKeyTime(DraggedKey.KeyHandle.GetValue());
float DistanceMoved = MouseTime - SelectedKeyTime;
if( DistanceMoved != 0.0f )
{
float TimeDelta = DistanceMoved;
// Snapping
if ( Settings->GetIsSnapEnabled() )
{
bool bSnappedToKeyTime = false;
if ( Settings->GetSnapKeyTimesToKeys() )
{
TArray<float> OutSnapTimes;
GetKeySnapTimes(OutSnapTimes, SequencerNode);
TArray<float> InitialTimes;
for ( FSelectedKey SelectedKey : SelectedKeys )
{
InitialTimes.Add(SelectedKey.KeyArea->GetKeyTime(SelectedKey.KeyHandle.GetValue()) + DistanceMoved);
}
float OutInitialTime = 0.f;
float OutSnapTime = 0.f;
if ( SnapToTimes( InitialTimes, OutSnapTimes, TimeToPixelConverter, OutInitialTime, OutSnapTime ) )
{
bSnappedToKeyTime = true;
TimeDelta = OutSnapTime - (OutInitialTime - DistanceMoved);
}
}
if ( bSnappedToKeyTime == false && Settings->GetSnapKeyTimesToInterval() )
{
TimeDelta = Settings->SnapTimeToInterval( MouseTime ) - SelectedKeyTime;
}
}
for( FSelectedKey SelectedKey : SelectedKeys )
{
UMovieSceneSection* Section = SelectedKey.Section;
TSharedPtr<IKeyArea>& KeyArea = SelectedKey.KeyArea;
// Tell the key area to move the key. We reset the key index as a result of the move because moving a key can change it's internal index
KeyArea->MoveKey( SelectedKey.KeyHandle.GetValue(), TimeDelta );
// Update the key that moved
float NewKeyTime = KeyArea->GetKeyTime( SelectedKey.KeyHandle.GetValue() );
// If the key moves outside of the section resize the section to fit the key
// @todo Sequencer - Doesn't account for hitting other sections
if( NewKeyTime > Section->GetEndTime() )
{
Section->SetEndTime( NewKeyTime );
}
else if( NewKeyTime < Section->GetStartTime() )
{
Section->SetStartTime( NewKeyTime );
}
}
}
}