// Copyright Epic Games, Inc. All Rights Reserved. #include "LiveLinkRoleTrait.h" #include "UObject/UObjectIterator.h" FText ULiveLinkRole::GetDisplayName() const { #if WITH_EDITOR return GetClass()->GetDisplayNameText(); #else return FText::FromName(GetClass()->GetFName()); #endif } namespace LiveLinkRoleTemplate { template TArray> GetTArrayClasses() { TArray> Results; for (TObjectIterator Itt; Itt; ++Itt) { if (Itt->IsChildOf(T::StaticClass()) && !Itt->HasAnyClassFlags(CLASS_Abstract | CLASS_Deprecated)) { Results.Add(*Itt); } } return Results; } template TArray> GetTArrayClasses(TSubclassOf Role) { TArray> Results; if (Role.Get()) { for (TObjectIterator Itt; Itt; ++Itt) { if (Itt->IsChildOf(T::StaticClass()) && !Itt->HasAnyClassFlags(CLASS_Abstract | CLASS_Deprecated)) { TSubclassOf ClassRole = Itt->GetDefaultObject()->GetRole(); check(ClassRole.Get()); if (ClassRole == Role) { Results.Add(*Itt); } } } } return Results; } template TSubclassOf GetTClasses(TSubclassOf Role) { if (Role.Get()) { for (TObjectIterator Itt; Itt; ++Itt) { if (Itt->IsChildOf(T::StaticClass()) && !Itt->HasAnyClassFlags(CLASS_Abstract | CLASS_Deprecated)) { TSubclassOf ClassRole = Itt->GetDefaultObject()->GetRole(); check(ClassRole.Get()); if (ClassRole == Role) { return *Itt; } } } } return nullptr; } } /** Live Link role */ TArray> FLiveLinkRoleTrait::GetRoles() { TArray> Results; for (TObjectIterator Itt; Itt; ++Itt) { if (Itt->IsChildOf(ULiveLinkRole::StaticClass()) && !Itt->HasAnyClassFlags(CLASS_Abstract | CLASS_Deprecated)) { Results.Add(*Itt); } } return Results; } /** Frame Interpolate Processor */ TArray> FLiveLinkRoleTrait::GetFrameInterpolationProcessorClasses(TSubclassOf Role) { return LiveLinkRoleTemplate::GetTArrayClasses(Role); } /** Frame Pre Processor */ TArray> FLiveLinkRoleTrait::GetFramePreProcessorClasses(TSubclassOf Role) { return LiveLinkRoleTemplate::GetTArrayClasses(Role); } /** Frame Translator */ TArray> FLiveLinkRoleTrait::GetFrameTranslatorClassesTo(TSubclassOf Role) { TArray> Results; if (Role.Get()) { for (TObjectIterator Itt; Itt; ++Itt) { if (Itt->IsChildOf(ULiveLinkFrameTranslator::StaticClass()) && !Itt->HasAnyClassFlags(CLASS_Abstract | CLASS_Deprecated)) { if (Itt->GetDefaultObject()->GetToRole() == Role) { Results.Add(*Itt); } } } } return Results; } TArray> FLiveLinkRoleTrait::GetFrameTranslatorClassesFrom(TSubclassOf Role) { TArray> Results; if (Role.Get()) { for (TObjectIterator Itt; Itt; ++Itt) { if (Itt->IsChildOf(ULiveLinkFrameTranslator::StaticClass()) && !Itt->HasAnyClassFlags(CLASS_Abstract | CLASS_Deprecated)) { if (Itt->GetDefaultObject()->GetFromRole() == Role) { Results.Add(*Itt); } } } } return Results; } /** Virtual Subject */ TArray> FLiveLinkRoleTrait::GetVirtualSubjectClasses() { return LiveLinkRoleTemplate::GetTArrayClasses(); } TArray> FLiveLinkRoleTrait::GetVirtualSubjectClasses(TSubclassOf Role) { return LiveLinkRoleTemplate::GetTArrayClasses(Role); } /** Live Link Controller */ TSubclassOf FLiveLinkRoleTrait::GetControllerClass(TSubclassOf Role) { return LiveLinkRoleTemplate::GetTClasses(Role); } /** Validate */ bool FLiveLinkRoleTrait::Validate(TSubclassOf Role, const FLiveLinkStaticDataStruct& StaticData) { UClass* RoleClass = Role.Get(); if (RoleClass && StaticData.GetStruct()) { return StaticData.GetStruct() == RoleClass->GetDefaultObject()->GetStaticDataStruct(); } return false; } bool FLiveLinkRoleTrait::Validate(TSubclassOf Role, const FLiveLinkFrameDataStruct& FrameData) { UClass* RoleClass = Role.Get(); if (RoleClass && FrameData.GetStruct()) { return FrameData.GetStruct() == RoleClass->GetDefaultObject()->GetFrameDataStruct(); } return false; }