Files
UnrealEngineUWP/Engine/Source/Runtime/InteractiveToolsFramework/Private/ToolTargets/PrimitiveComponentToolTarget.cpp
ryan schmidt d04552fc80 ToolsFramework: change IsValidChecked to IsValid in several places where we want to handle failure gracefully
#rb rinat.abdrashitov
#rnx
#jira none
#preflight 61a7a324e8314ee7b586bff2

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 18341163 in //UE5/Release-5.0/... via CL 18341169
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18341187 by ryan schmidt in ue5-release-engine-test branch]
2021-12-01 12:47:30 -05:00

67 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ToolTargets/PrimitiveComponentToolTarget.h"
#include "Components/PrimitiveComponent.h"
bool UPrimitiveComponentToolTarget::IsValid() const
{
return Component && ::IsValid(Component) && !Component->IsUnreachable() && Component->IsValidLowLevel();
}
UPrimitiveComponent* UPrimitiveComponentToolTarget::GetOwnerComponent() const
{
return IsValid() ? Component : nullptr;
}
AActor* UPrimitiveComponentToolTarget::GetOwnerActor() const
{
return IsValid() ? Component->GetOwner() : nullptr;
}
void UPrimitiveComponentToolTarget::SetOwnerVisibility(bool bVisible) const
{
if (IsValid())
{
Component->SetVisibility(bVisible);
}
}
FTransform UPrimitiveComponentToolTarget::GetWorldTransform() const
{
return IsValid() ? Component->GetComponentTransform() : FTransform::Identity;
}
bool UPrimitiveComponentToolTarget::HitTestComponent(const FRay& WorldRay, FHitResult& OutHit) const
{
FVector End = WorldRay.PointAt(HALF_WORLD_MAX);
if (IsValid() && Component->LineTraceComponent(OutHit, WorldRay.Origin, End, FCollisionQueryParams(SCENE_QUERY_STAT(HitTest), true)))
{
return true;
}
return false;
}
// Factory
bool UPrimitiveComponentToolTargetFactory::CanBuildTarget(UObject* SourceObject, const FToolTargetTypeRequirements& Requirements) const
{
UPrimitiveComponent* Component = Cast<UPrimitiveComponent>(SourceObject);
return Component
&& ::IsValid(Component)
&& !Component->IsUnreachable()
&& Component->IsValidLowLevel()
&& Requirements.AreSatisfiedBy(UPrimitiveComponentToolTarget::StaticClass());
}
UToolTarget* UPrimitiveComponentToolTargetFactory::BuildTarget(UObject* SourceObject, const FToolTargetTypeRequirements& Requirements)
{
UPrimitiveComponentToolTarget* Target = NewObject<UPrimitiveComponentToolTarget>();
Target->Component = Cast<UPrimitiveComponent>(SourceObject);
check(Target->Component && Requirements.AreSatisfiedBy(Target));
return Target;
}