You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Sequencer: Ported reminaing systems to new task scheduling API
These were added on UE5/Main and so missed the original check in. #rb Max.Chen #jira UE-187321 [CL 25713699 by andrew rodham in ue5-main branch]
This commit is contained in:
@@ -131,7 +131,7 @@ struct FGatherAudioInputs
|
||||
double, double, double,
|
||||
double, double, double,
|
||||
FString, int32, bool>
|
||||
AudioInputResults)
|
||||
AudioInputResults) const
|
||||
{
|
||||
FAudioInputsBySectionKey& AudioInputsBySectionKey = AudioSystem->AudioInputsBySectionKey;
|
||||
|
||||
@@ -204,7 +204,7 @@ struct FGatherAudioTriggers
|
||||
void ForEachAllocation(
|
||||
const FEntityAllocation* Allocation,
|
||||
TRead<FMovieSceneAudioComponentData> AudioDatas,
|
||||
TRead<FName> AudioTriggerNames)
|
||||
TRead<FName> AudioTriggerNames) const
|
||||
{
|
||||
FAudioInputsBySectionKey& AudioInputsBySectionKey = AudioSystem->AudioInputsBySectionKey;
|
||||
|
||||
@@ -269,7 +269,7 @@ struct FEvaluateAudio
|
||||
TRead<FMovieSceneAudioComponentData> AudioDatas,
|
||||
TRead<double> VolumeMultipliers,
|
||||
TRead<double> PitchMultipliers,
|
||||
TReadOptional<UObject*> BoundObjects)
|
||||
TReadOptional<UObject*> BoundObjects) const
|
||||
{
|
||||
const FBuiltInComponentTypes* BuiltInComponents = FBuiltInComponentTypes::Get();
|
||||
|
||||
@@ -303,7 +303,7 @@ private:
|
||||
double VolumeMultiplier,
|
||||
double PitchMultiplier,
|
||||
UObject* BoundObject,
|
||||
bool bWantsRestoreState)
|
||||
bool bWantsRestoreState) const
|
||||
{
|
||||
const FMovieSceneContext& Context = Instance.GetContext();
|
||||
IMovieScenePlayer* Player = Instance.GetPlayer();
|
||||
@@ -680,6 +680,7 @@ UMovieSceneAudioSystem::UMovieSceneAudioSystem(const FObjectInitializer& ObjInit
|
||||
using namespace UE::MovieScene;
|
||||
|
||||
RelevantComponent = FMovieSceneTracksComponentTypes::Get()->Audio;
|
||||
Phase = ESystemPhase::Scheduling;
|
||||
|
||||
if (HasAnyFlags(RF_ClassDefaultObject))
|
||||
{
|
||||
@@ -731,6 +732,72 @@ void UMovieSceneAudioSystem::OnUnlink()
|
||||
|
||||
}
|
||||
|
||||
void UMovieSceneAudioSystem::ResetSharedData()
|
||||
{
|
||||
AudioInputsBySectionKey.Reset();
|
||||
for (TPair<FObjectKey, FAudioComponentBySectionKey>& AudioComponentsForActor : AudioComponentsByActorKey)
|
||||
{
|
||||
for (TPair<FObjectKey, FAudioComponentEvaluationData>& AudioComponentForSection : AudioComponentsForActor.Value)
|
||||
{
|
||||
AudioComponentForSection.Value.bEvaluatedThisFrame = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UMovieSceneAudioSystem::OnSchedulePersistentTasks(UE::MovieScene::IEntitySystemScheduler* TaskScheduler)
|
||||
{
|
||||
if (!GEngine || !GEngine->UseSound())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using namespace UE::MovieScene;
|
||||
|
||||
const FBuiltInComponentTypes* BuiltInComponents = FBuiltInComponentTypes::Get();
|
||||
const FMovieSceneTracksComponentTypes* TrackComponents = FMovieSceneTracksComponentTypes::Get();
|
||||
|
||||
// Reset shared data.
|
||||
FTaskID ResetSharedDataTask = TaskScheduler->AddMemberFunctionTask(FTaskParams(TEXT("Reset Audio Data")), this, &UMovieSceneAudioSystem::ResetSharedData);
|
||||
|
||||
// Gather audio input values computed by the channel evaluators.
|
||||
FTaskID GatherInputsTask = FEntityTaskBuilder()
|
||||
.Read(TrackComponents->Audio)
|
||||
.Read(TrackComponents->AudioInputs)
|
||||
.ReadOneOrMoreOf(
|
||||
BuiltInComponents->DoubleResult[0], BuiltInComponents->DoubleResult[1], BuiltInComponents->DoubleResult[2],
|
||||
BuiltInComponents->DoubleResult[3], BuiltInComponents->DoubleResult[4], BuiltInComponents->DoubleResult[5],
|
||||
BuiltInComponents->DoubleResult[6], BuiltInComponents->DoubleResult[7], BuiltInComponents->DoubleResult[8],
|
||||
BuiltInComponents->StringResult,
|
||||
BuiltInComponents->IntegerResult,
|
||||
BuiltInComponents->BoolResult)
|
||||
.Schedule_PerAllocation<FGatherAudioInputs>(&Linker->EntityManager, TaskScheduler, this);
|
||||
|
||||
TaskScheduler->AddPrerequisite(ResetSharedDataTask, GatherInputsTask);
|
||||
|
||||
// Gather up audio triggers
|
||||
FTaskID GatherTriggersTask = FEntityTaskBuilder()
|
||||
.Read(TrackComponents->Audio)
|
||||
.Read(TrackComponents->AudioTriggerName)
|
||||
.Schedule_PerAllocation<FGatherAudioTriggers>(&Linker->EntityManager, TaskScheduler, this);
|
||||
|
||||
TaskScheduler->AddPrerequisite(ResetSharedDataTask, GatherTriggersTask);
|
||||
|
||||
// Next, evaluate audio to play and use the gathered audio input values to set on the audio components.
|
||||
FTaskID EvaluateAudioTask = FEntityTaskBuilder()
|
||||
.ReadEntityIDs()
|
||||
.Read(BuiltInComponents->RootInstanceHandle)
|
||||
.Read(BuiltInComponents->InstanceHandle)
|
||||
.Read(TrackComponents->Audio)
|
||||
.Read(BuiltInComponents->DoubleResult[0]) // Volume
|
||||
.Read(BuiltInComponents->DoubleResult[1]) // Pitch multiplier
|
||||
.ReadOptional(BuiltInComponents->BoundObject)
|
||||
.SetDesiredThread(Linker->EntityManager.GetGatherThread())
|
||||
.Schedule_PerAllocation<FEvaluateAudio>(&Linker->EntityManager, TaskScheduler, this);
|
||||
|
||||
TaskScheduler->AddPrerequisite(GatherInputsTask, EvaluateAudioTask);
|
||||
TaskScheduler->AddPrerequisite(GatherTriggersTask, EvaluateAudioTask);
|
||||
}
|
||||
|
||||
void UMovieSceneAudioSystem::OnRun(FSystemTaskPrerequisites& InPrerequisites, FSystemSubsequentTasks& Subsequents)
|
||||
{
|
||||
MOVIESCENE_DETAILED_SCOPE_CYCLE_COUNTER(MovieSceneEval_AudioTrack_Evaluate)
|
||||
@@ -746,14 +813,7 @@ void UMovieSceneAudioSystem::OnRun(FSystemTaskPrerequisites& InPrerequisites, FS
|
||||
const FMovieSceneTracksComponentTypes* TrackComponents = FMovieSceneTracksComponentTypes::Get();
|
||||
|
||||
// Reset shared data.
|
||||
AudioInputsBySectionKey.Reset();
|
||||
for (TPair<FObjectKey, FAudioComponentBySectionKey>& AudioComponentsForActor : AudioComponentsByActorKey)
|
||||
{
|
||||
for (TPair<FObjectKey, FAudioComponentEvaluationData>& AudioComponentForSection : AudioComponentsForActor.Value)
|
||||
{
|
||||
AudioComponentForSection.Value.bEvaluatedThisFrame = false;
|
||||
}
|
||||
}
|
||||
ResetSharedData();
|
||||
|
||||
// Gather audio input values computed by the channel evaluators.
|
||||
FSystemTaskPrerequisites Prereqs;
|
||||
|
||||
@@ -74,6 +74,7 @@ public:
|
||||
//~ UMovieSceneEntitySystem members
|
||||
virtual void OnLink() override;
|
||||
virtual void OnUnlink() override;
|
||||
virtual void OnSchedulePersistentTasks(UE::MovieScene::IEntitySystemScheduler* TaskScheduler) override;
|
||||
virtual void OnRun(FSystemTaskPrerequisites& InPrerequisites, FSystemSubsequentTasks& Subsequents) override;
|
||||
|
||||
/**
|
||||
@@ -98,6 +99,11 @@ public:
|
||||
*/
|
||||
void StopSound(FObjectKey ActorKey, FObjectKey SectionKey);
|
||||
|
||||
/**
|
||||
* Reset shared accumulation data required every evaluation frame
|
||||
*/
|
||||
void ResetSharedData();
|
||||
|
||||
private:
|
||||
|
||||
/** Map of all created audio components */
|
||||
|
||||
@@ -12,6 +12,27 @@
|
||||
|
||||
DECLARE_CYCLE_STAT(TEXT("MovieScene: Evaluate string channels"), MovieSceneEval_EvaluateStringChannelTask, STATGROUP_MovieSceneECS);
|
||||
|
||||
namespace UE::MovieScene
|
||||
{
|
||||
|
||||
struct FEvaluateStringChannels
|
||||
{
|
||||
static void ForEachEntity(FSourceStringChannel StringChannel, FFrameTime FrameTime, FString& OutResult)
|
||||
{
|
||||
if (const FString* Value = StringChannel.Source->Evaluate(FrameTime))
|
||||
{
|
||||
OutResult = *Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
OutResult = FString();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
} // namespace UE::MovieScene
|
||||
|
||||
UStringChannelEvaluatorSystem::UStringChannelEvaluatorSystem(const FObjectInitializer& ObjInit)
|
||||
: Super(ObjInit)
|
||||
{
|
||||
@@ -19,6 +40,7 @@ UStringChannelEvaluatorSystem::UStringChannelEvaluatorSystem(const FObjectInitia
|
||||
|
||||
SystemCategories = EEntitySystemCategory::ChannelEvaluators;
|
||||
RelevantComponent = FBuiltInComponentTypes::Get()->StringChannel;
|
||||
Phase = ESystemPhase::Scheduling;
|
||||
|
||||
if (HasAnyFlags(RF_ClassDefaultObject))
|
||||
{
|
||||
@@ -26,26 +48,27 @@ UStringChannelEvaluatorSystem::UStringChannelEvaluatorSystem(const FObjectInitia
|
||||
}
|
||||
}
|
||||
|
||||
void UStringChannelEvaluatorSystem::OnRun(FSystemTaskPrerequisites& InPrerequisites, FSystemSubsequentTasks& Subsequents)
|
||||
|
||||
void UStringChannelEvaluatorSystem::OnSchedulePersistentTasks(UE::MovieScene::IEntitySystemScheduler* TaskScheduler)
|
||||
{
|
||||
using namespace UE::MovieScene;
|
||||
|
||||
FBuiltInComponentTypes* BuiltInComponents = FBuiltInComponentTypes::Get();
|
||||
|
||||
struct FEvaluateStringChannels
|
||||
{
|
||||
static void ForEachEntity(FSourceStringChannel StringChannel, FFrameTime FrameTime, FString& OutResult)
|
||||
{
|
||||
if (const FString* Value = StringChannel.Source->Evaluate(FrameTime))
|
||||
{
|
||||
OutResult = *Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
OutResult = FString();
|
||||
}
|
||||
}
|
||||
};
|
||||
FEntityTaskBuilder()
|
||||
.Read(BuiltInComponents->StringChannel)
|
||||
.Read(BuiltInComponents->EvalTime)
|
||||
.Write(BuiltInComponents->StringResult)
|
||||
.FilterNone({ BuiltInComponents->Tags.Ignored })
|
||||
.SetStat(GET_STATID(MovieSceneEval_EvaluateStringChannelTask))
|
||||
.Fork_PerEntity<FEvaluateStringChannels>(&Linker->EntityManager, TaskScheduler);
|
||||
}
|
||||
|
||||
void UStringChannelEvaluatorSystem::OnRun(FSystemTaskPrerequisites& InPrerequisites, FSystemSubsequentTasks& Subsequents)
|
||||
{
|
||||
using namespace UE::MovieScene;
|
||||
|
||||
FBuiltInComponentTypes* BuiltInComponents = FBuiltInComponentTypes::Get();
|
||||
|
||||
FEntityTaskBuilder()
|
||||
.Read(BuiltInComponents->StringChannel)
|
||||
|
||||
@@ -22,5 +22,6 @@ public:
|
||||
|
||||
UStringChannelEvaluatorSystem(const FObjectInitializer& ObjInit);
|
||||
|
||||
virtual void OnSchedulePersistentTasks(UE::MovieScene::IEntitySystemScheduler* TaskScheduler) override;
|
||||
virtual void OnRun(FSystemTaskPrerequisites& InPrerequisites, FSystemSubsequentTasks& Subsequents) override;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user