You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Copying //Tasks/UE5/Dev-SequencerMVVM2 to Main (//UE5/Main) @20364093 #preflight 628866dfb94f739b152c1e29 #preflight 628866e4585e8f793ee80943 #rb ludovic.chabant, andrew.rodham #fyi ludovic.chabant, andrew.rodham, andrew.porter #jira UE-105322 [CL 20364493 by Max Chen in ue5-main branch]
100 lines
2.5 KiB
C++
100 lines
2.5 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "MovieSceneBinding.h"
|
|
#include "MovieSceneTrack.h"
|
|
|
|
#include "MovieScene.h"
|
|
#include "EventHandlers/ISequenceDataEventHandler.h"
|
|
|
|
/* FMovieSceneBinding interface
|
|
*****************************************************************************/
|
|
|
|
void FMovieSceneBinding::AddTrack(UMovieSceneTrack& NewTrack, UMovieScene* Owner)
|
|
{
|
|
#if WITH_EDITOR
|
|
if (!UMovieScene::IsTrackClassAllowed(NewTrack.GetClass()))
|
|
{
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
Tracks.Add(&NewTrack);
|
|
|
|
Owner->EventHandlers.Trigger(&UE::MovieScene::ISequenceDataEventHandler::OnTrackAddedToBinding, &NewTrack, ObjectGuid);
|
|
}
|
|
|
|
bool FMovieSceneBinding::RemoveTrack(UMovieSceneTrack& Track, UMovieScene* Owner)
|
|
{
|
|
if (Tracks.RemoveSingle(&Track) != 0)
|
|
{
|
|
Owner->EventHandlers.Trigger(&UE::MovieScene::ISequenceDataEventHandler::OnTrackRemovedFromBinding, &Track, ObjectGuid);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void FMovieSceneBinding::RemoveNullTracks()
|
|
{
|
|
for (int32 TrackIndex = Tracks.Num()-1; TrackIndex >= 0; --TrackIndex)
|
|
{
|
|
if (Tracks[TrackIndex] == nullptr)
|
|
{
|
|
Tracks.RemoveAt(TrackIndex);
|
|
// Don't trigger events for null tracks
|
|
}
|
|
}
|
|
}
|
|
|
|
TArray<UMovieSceneTrack*> FMovieSceneBinding::StealTracks(UMovieScene* Owner)
|
|
{
|
|
if (Owner)
|
|
{
|
|
for (UMovieSceneTrack* Track : Tracks)
|
|
{
|
|
Owner->EventHandlers.Trigger(&UE::MovieScene::ISequenceDataEventHandler::OnTrackRemovedFromBinding, Track, ObjectGuid);
|
|
}
|
|
}
|
|
|
|
decltype(Tracks) Empty;
|
|
Swap(Empty, Tracks);
|
|
return Empty;
|
|
}
|
|
|
|
void FMovieSceneBinding::SetTracks(TArray<UMovieSceneTrack*>&& InTracks, UMovieScene* Owner)
|
|
{
|
|
// Care is taken here to ensure that we trigger the events correctly when
|
|
// InTracks contains tracks that already exist in this binding
|
|
TSet<UMovieSceneTrack*> NewTracks;
|
|
for (UMovieSceneTrack* Track : InTracks)
|
|
{
|
|
NewTracks.Add(Track);
|
|
}
|
|
|
|
for (int32 Index = Tracks.Num()-1; Index >= 0; --Index)
|
|
{
|
|
UMovieSceneTrack* Track = Tracks[Index];
|
|
if (!NewTracks.Contains(Track))
|
|
{
|
|
Tracks.RemoveAt(Index, 1, false);
|
|
if (Owner)
|
|
{
|
|
Owner->EventHandlers.Trigger(&UE::MovieScene::ISequenceDataEventHandler::OnTrackRemovedFromBinding, Track, ObjectGuid);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
NewTracks.Remove(Track);
|
|
}
|
|
}
|
|
|
|
for (UMovieSceneTrack* Track : NewTracks)
|
|
{
|
|
Tracks.Add(Track);
|
|
if (Owner)
|
|
{
|
|
Owner->EventHandlers.Trigger(&UE::MovieScene::ISequenceDataEventHandler::OnTrackAddedToBinding, Track, ObjectGuid);
|
|
}
|
|
}
|
|
|
|
Tracks.Shrink();
|
|
} |