#include "MyActorComponent.h"
UMyActorComponent::UMyActorComponent()
{
this->MovieSceneCapture = CreateDefaultSubobject<UMovieSceneCapture>("MovieSceneCapture");
if (!this->MovieSceneCapture)
{
UE_LOG(LogMyActorComponent, Fatal, TEXT("UMyActorComponent: MovieSceneCapture failed to be created"));
}
this->MovieSceneCapture->bUseSeparateProcess = true;
}
void UMyActorComponent::BeginPlay()
{
Super::BeginPlay();
this->InitializeSceneCapture();
}
void UMyActorComponent::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
if (this->MovieSceneCapture)
{
this->MovieSceneCapture->Finalize();
}
else
{
UE_LOG(LogMyActorComponent, Error, TEXT("EndPlay: MovieSceneCapture was invalid"));
}
Super::EndPlay(EndPlayReason);
}
void UMyActorComponent::InitializeSceneCaptureSettings()
{
APlayerController* PlayerController = Cast<APlayerController>(this->GetOwner());
if (!PlayerController)
{
UE_LOG(LogMyActorComponent, Error, TEXT("InitializeSceneCaptureSettings: Could not cast owner's controller to APlayerController"));
return;
}
int32 ViewportSizeX = 0;
int32 ViewportSizeY = 0;
PlayerController->GetViewportSize(ViewportSizeX, ViewportSizeY);
if (!this->MovieSceneCapture)
{
UE_LOG(LogMyActorComponent, Error, TEXT("InitializeSceneCaptureSettings: MovieSceneCapture was invalid"));
return;
}
const TSharedPtr<IPlugin> Plugin = IPluginManager::Get().FindPlugin("MyPlugin");
if (!Plugin)
{
UE_LOG(LogMyActorComponent, Error, TEXT("InitializeSceneCaptureSettings: Could not find plugin"));
return;
}
FDirectoryPath PluginDirectoryPath = FDirectoryPath();
PluginDirectoryPath.Path = Plugin->GetContentDir();
this->MovieSceneCapture->Settings.OutputDirectory = PluginDirectoryPath;
this->MovieSceneCapture->Settings.bOverwriteExisting = false;
this->MovieSceneCapture->Settings.bUseRelativeFrameNumbers = false;
this->MovieSceneCapture->Settings.HandleFrames = 60;
this->MovieSceneCapture->Settings.bEnableTextureStreaming = true;
this->MovieSceneCapture->Settings.Resolution = FCaptureResolution(ViewportSizeX, ViewportSizeY);
this->MovieSceneCapture->Settings.bAllowMovement = true;
this->MovieSceneCapture->Settings.bAllowTurning = true;
this->MovieSceneCapture->Settings.bShowPlayer = true;
this->MovieSceneCapture->Settings.bShowHUD = true;
}
void UMyActorComponent::InitializeSceneCapture()
{
const UWorld* World = this->GetWorld();
if (!World)
{
UE_LOG(LogMyActorComponent, Error, TEXT("InitializeSceneCapture: World was invalid"));
return;
}
UGameViewportClient* GameViewportClient = World->GetGameViewport();
if (!GameViewportClient)
{
UE_LOG(LogMyActorComponent, Error, TEXT("InitializeSceneCapture: Unable to get GameViewport"));
return;
}
TSharedPtr<SViewport> GameViewportWidget = GameViewportClient->GetGameViewportWidget();
if (!GameViewportWidget)
{
UE_LOG(LogMyActorComponent, Error, TEXT("InitializeSceneCapture: Unable to get GameViewport widget"));
return;
}
TSharedPtr<FSceneViewport> SceneViewportPtr = MakeShareable(new FSceneViewport(GameViewportClient, GameViewportWidget));
if (!SceneViewportPtr)
{
UE_LOG(LogMyActorComponent, Error, TEXT("InitializeSceneCapture: Unable to create pointer to TSharedPtr<FSceneViewport>"));
return;
}
if (!this->MovieSceneCapture)
{
UE_LOG(LogMyActorComponent, Error, TEXT("InitializeSceneCapture: MovieSceneCapture was invalid"));
return;
}
this->InitializeSceneCaptureSettings();
this->MovieSceneCapture->Initialize(SceneViewportPtr, 0);
this->MovieSceneCapture->StartWarmup();
this->MovieSceneCapture->StartCapture();
}
1 Like