// Copyright Voulz 2021-2025. All Rights Reserved. #include "ArchVisSubsystem.h" #include "ArchVisSceneViewExtension.h" #include "MoviePipelineBase.h" #include "SceneViewExtension.h" void UArchVisSubsystem::Initialize(FSubsystemCollectionBase& Collection) { ArchVisSceneViewExtension = FSceneViewExtensions::NewExtension(this); UE_LOG(LogTemp, Log, TEXT("SceneViewExtensionTemplate: Subsystem initialized & SceneViewExtension created")); } void UArchVisSubsystem::Deinitialize() { { ArchVisSceneViewExtension->IsActiveThisFrameFunctions.Empty(); FSceneViewExtensionIsActiveFunctor IsActiveFunctor; IsActiveFunctor.IsActiveFunction = [](const ISceneViewExtension* SceneViewExtension, const FSceneViewExtensionContext& Context) { return TOptional(false); }; ArchVisSceneViewExtension->IsActiveThisFrameFunctions.Add(IsActiveFunctor); } ArchVisSceneViewExtension.Reset(); ArchVisSceneViewExtension = nullptr; } bool UArchVisSubsystem::IsMoviePipelineWorld(const UWorld* World) { if (!IsValid(World)) { return false; } //todo: if this does not work, check UWorld::PerModuleDataObjects and set it in OnMoviePipelineInitialized bool bHasMoviePipelineBase = false; ForEachObjectWithOuterBreakable(World, [&bHasMoviePipelineBase](UObject* Object) { bHasMoviePipelineBase = Object->IsA(); return !bHasMoviePipelineBase; // break if we found it }, false); return bHasMoviePipelineBase; }