// 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("Sequencer"); SequencerCreatedHandle = SequencerModule.RegisterOnSequencerCreated(FOnSequencerCreated::FDelegate::CreateRaw(this, &FDisplayClusterLightCardExtenderModule::OnSequencerCreated)); #endif } void FDisplayClusterLightCardExtenderModule::ShutdownModule() { #if WITH_EDITOR for (const TWeakPtr& 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(TEXT("Sequencer")); SequencerModule.UnregisterOnSequencerCreated(SequencerCreatedHandle); } #endif } #if WITH_EDITOR void FDisplayClusterLightCardExtenderModule::OnSequencerCreated(TSharedRef InSequencer) { TWeakPtr SequencerWeakPtr = InSequencer; OpenSequencers.Add(SequencerWeakPtr); InSequencer->OnGlobalTimeChanged().AddRaw(this, &FDisplayClusterLightCardExtenderModule::OnSequencerTimeChanged, SequencerWeakPtr); InSequencer->OnCloseEvent().AddRaw(this, &FDisplayClusterLightCardExtenderModule::OnSequencerClosed); } void FDisplayClusterLightCardExtenderModule::OnSequencerTimeChanged(TWeakPtr InSequencer) { OnSequencerTimeChangedDelegate.Broadcast(InSequencer); } void FDisplayClusterLightCardExtenderModule::OnSequencerClosed(TSharedRef 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)