Files
patrick hardy 68aa34f8d9 nDisplay: Dragging a light card or CCW in the ICVFX window will now trigger sequencer key frames. Changing the time in sequencer will update level and ICVFX proxy positions accordingly.
Light cards work with sequencer by using the orientation properties such as latitude and longitude.
CCWs require the transform tracked instead.

Light card alpha gradient settings are also exposed to sequencer.


#jira UE-182176
#rb trystan.binkley-Jone
#preflight 6430791241783dc3d0e19a9e

[CL 24972106 by patrick hardy in ue5-main branch]
2023-04-07 18:58:04 -04:00

66 lines
2.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "DisplayClusterLightCardExtenderModule.h"
#if WITH_EDITOR
#include "ISequencerModule.h"
#endif
void FDisplayClusterLightCardExtenderModule::StartupModule()
{
#if WITH_EDITOR
ISequencerModule& SequencerModule = FModuleManager::Get().LoadModuleChecked<ISequencerModule>("Sequencer");
SequencerCreatedHandle = SequencerModule.RegisterOnSequencerCreated(FOnSequencerCreated::FDelegate::CreateRaw(this, &FDisplayClusterLightCardExtenderModule::OnSequencerCreated));
#endif
}
void FDisplayClusterLightCardExtenderModule::ShutdownModule()
{
#if WITH_EDITOR
for (const TWeakPtr<ISequencer, ESPMode::ThreadSafe>& Sequencer : OpenSequencers)
{
if (Sequencer.IsValid())
{
Sequencer.Pin()->OnGlobalTimeChanged().RemoveAll(this);
Sequencer.Pin()->OnCloseEvent().RemoveAll(this);
}
}
OpenSequencers.Empty();
if (FModuleManager::Get().IsModuleLoaded("Sequencer"))
{
ISequencerModule& SequencerModule = FModuleManager::Get().LoadModuleChecked<ISequencerModule>(TEXT("Sequencer"));
SequencerModule.UnregisterOnSequencerCreated(SequencerCreatedHandle);
}
#endif
}
#if WITH_EDITOR
void FDisplayClusterLightCardExtenderModule::OnSequencerCreated(TSharedRef<ISequencer> InSequencer)
{
TWeakPtr<ISequencer> SequencerWeakPtr = InSequencer;
OpenSequencers.Add(SequencerWeakPtr);
InSequencer->OnGlobalTimeChanged().AddRaw(this, &FDisplayClusterLightCardExtenderModule::OnSequencerTimeChanged, SequencerWeakPtr);
InSequencer->OnCloseEvent().AddRaw(this, &FDisplayClusterLightCardExtenderModule::OnSequencerClosed);
}
void FDisplayClusterLightCardExtenderModule::OnSequencerTimeChanged(TWeakPtr<ISequencer> InSequencer)
{
OnSequencerTimeChangedDelegate.Broadcast(InSequencer);
}
void FDisplayClusterLightCardExtenderModule::OnSequencerClosed(TSharedRef<ISequencer> InSequencer)
{
InSequencer->OnGlobalTimeChanged().RemoveAll(this);
InSequencer->OnCloseEvent().RemoveAll(this);
OpenSequencers.Remove(InSequencer);
// Positions could have reset to their original values.
OnSequencerTimeChangedDelegate.Broadcast(InSequencer);
}
#endif
IMPLEMENT_MODULE(FDisplayClusterLightCardExtenderModule, DisplayClusterLightCardExtender)