120 lines
3.4 KiB
C++
120 lines
3.4 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "MetaHumanLocalLiveLinkSource.h"
|
|
|
|
#include "UObject/Package.h"
|
|
|
|
DEFINE_LOG_CATEGORY(LogMetaHumanLocalLiveLinkSource);
|
|
|
|
#define LOCTEXT_NAMESPACE "MetaHumanLocalLiveLinkSource"
|
|
|
|
|
|
|
|
FMetaHumanLocalLiveLinkSource::~FMetaHumanLocalLiveLinkSource()
|
|
{
|
|
UE_LOG(LogMetaHumanLocalLiveLinkSource, Verbose, TEXT("Destroying Source"));
|
|
}
|
|
|
|
void FMetaHumanLocalLiveLinkSource::ReceiveClient(ILiveLinkClient* InLiveLinkClient, FGuid InSourceGuid)
|
|
{
|
|
UE_LOG(LogMetaHumanLocalLiveLinkSource, Verbose, TEXT("Creating Source"));
|
|
|
|
LiveLinkClient = InLiveLinkClient;
|
|
SourceGuid = InSourceGuid;
|
|
|
|
LiveLinkClient->OnLiveLinkSubjectAdded().AddSP(this, &FMetaHumanLocalLiveLinkSource::SubjectAdded);
|
|
LiveLinkClient->OnLiveLinkSubjectRemoved().AddSP(this, &FMetaHumanLocalLiveLinkSource::SubjectRemoved);
|
|
|
|
bIsActive = true;
|
|
}
|
|
|
|
bool FMetaHumanLocalLiveLinkSource::IsSourceStillValid() const
|
|
{
|
|
return bIsActive;
|
|
}
|
|
|
|
bool FMetaHumanLocalLiveLinkSource::RequestSourceShutdown()
|
|
{
|
|
bIsActive = false;
|
|
|
|
for (const TPair<FLiveLinkSubjectKey, TSharedPtr<FMetaHumanLocalLiveLinkSubject>>& SubjectPair : Subjects)
|
|
{
|
|
SubjectPair.Value->Stop();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
FText FMetaHumanLocalLiveLinkSource::GetSourceMachineName() const
|
|
{
|
|
return FText::FromString(FPlatformProcess::ComputerName());
|
|
}
|
|
|
|
FText FMetaHumanLocalLiveLinkSource::GetSourceStatus() const
|
|
{
|
|
return bIsActive ? LOCTEXT("ActiveSourceStatus", "Active") : LOCTEXT("InactiveSourceStatus", "Inactive");
|
|
}
|
|
|
|
TSubclassOf<ULiveLinkSourceSettings> FMetaHumanLocalLiveLinkSource::GetSettingsClass() const
|
|
{
|
|
return UMetaHumanLocalLiveLinkSourceSettings::StaticClass();
|
|
}
|
|
|
|
void FMetaHumanLocalLiveLinkSource::InitializeSettings(ULiveLinkSourceSettings* InSettings)
|
|
{
|
|
Settings = Cast<UMetaHumanLocalLiveLinkSourceSettings>(InSettings);
|
|
Settings->SetSource(this);
|
|
|
|
OnSourceCreated(Settings->bIsPreset);
|
|
|
|
Settings->bIsPreset = true;
|
|
}
|
|
|
|
void FMetaHumanLocalLiveLinkSource::RequestSubjectCreation(const FString& InSubjectName, UMetaHumanLocalLiveLinkSubjectSettings* InMetaHumanLocalLiveLinkSubjectSettings)
|
|
{
|
|
FLiveLinkSubjectKey SubjectKey(SourceGuid, FName(InSubjectName));
|
|
|
|
FLiveLinkSubjectPreset Preset;
|
|
Preset.Key = SubjectKey;
|
|
Preset.Role = InMetaHumanLocalLiveLinkSubjectSettings->Role;
|
|
Preset.Settings = InMetaHumanLocalLiveLinkSubjectSettings;
|
|
Preset.bEnabled = true;
|
|
|
|
if (!LiveLinkClient->CreateSubject(Preset))
|
|
{
|
|
UE_LOG(LogMetaHumanLocalLiveLinkSource, Warning, TEXT("Failed to create subject"));
|
|
}
|
|
}
|
|
|
|
void FMetaHumanLocalLiveLinkSource::SubjectAdded(FLiveLinkSubjectKey InSubject)
|
|
{
|
|
if (InSubject.Source == SourceGuid)
|
|
{
|
|
UE_LOG(LogMetaHumanLocalLiveLinkSource, Display, TEXT("Created subject \"%s\""), *InSubject.SubjectName.ToString());
|
|
|
|
UMetaHumanLocalLiveLinkSubjectSettings* SubjectSettings = Cast<UMetaHumanLocalLiveLinkSubjectSettings>(LiveLinkClient->GetSubjectSettings(InSubject));
|
|
|
|
TSharedPtr<FMetaHumanLocalLiveLinkSubject> Subject = CreateSubject(InSubject.SubjectName, SubjectSettings);
|
|
|
|
SubjectSettings->SetSubject(Subject.Get());
|
|
|
|
Subject->Start();
|
|
|
|
Subjects.Add(InSubject, Subject);
|
|
}
|
|
}
|
|
|
|
void FMetaHumanLocalLiveLinkSource::SubjectRemoved(FLiveLinkSubjectKey InSubject)
|
|
{
|
|
if (InSubject.Source == SourceGuid)
|
|
{
|
|
check(Subjects.Contains(InSubject));
|
|
|
|
Subjects[InSubject]->Stop();
|
|
Subjects.Remove(InSubject);
|
|
|
|
UE_LOG(LogMetaHumanLocalLiveLinkSource, Display, TEXT("Removed subject \"%s\""), *InSubject.SubjectName.ToString());
|
|
}
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE |