// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. #include "UnrealEd.h" #include "ComponentVisualizer.h" IMPLEMENT_HIT_PROXY(HComponentVisProxy, HHitProxy); FName FComponentVisualizer::GetComponentPropertyName(const UActorComponent* Component) { if (Component) { const AActor* CompOwner = Component->GetOwner(); if(CompOwner) { // Iterate over fields of this actor UClass* ActorClass = CompOwner->GetClass(); for (TFieldIterator It(ActorClass); It; ++It) { // See if this property points to the component in question UObjectProperty* ObjectProp = *It; UObject* Object = ObjectProp->GetObjectPropertyValue(ObjectProp->ContainerPtrToValuePtr(CompOwner)); if (Object == Component) { // It does! Return this name return ObjectProp->GetFName(); } } } } // Didn't find actor property referencing this component return NAME_None; } UActorComponent* FComponentVisualizer::GetComponentFromPropertyName(const AActor* CompOwner, FName PropertyName) { UActorComponent* ResultComp = NULL; if(CompOwner && PropertyName != NAME_None) { UClass* ActorClass = CompOwner->GetClass(); UObjectProperty* ObjectProp = FindField(ActorClass, PropertyName); if(ObjectProp) { UObject* Object = ObjectProp->GetObjectPropertyValue(ObjectProp->ContainerPtrToValuePtr(CompOwner)); ResultComp = Cast(Object); } } return ResultComp; }