Files
UnrealEngine/Engine/Source/Editor/PhysicsAssetEditor/Private/PhysicsAssetEditorPhysicsHandleComponent.cpp
2025-05-18 13:04:45 +08:00

74 lines
2.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "PhysicsAssetEditorPhysicsHandleComponent.h"
#include "PhysicsAssetEditorSkeletalMeshComponent.h"
UPhysicsAssetEditorPhysicsHandleComponent::UPhysicsAssetEditorPhysicsHandleComponent(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
, bAnimInstanceMode(false)
{
}
void UPhysicsAssetEditorPhysicsHandleComponent::UpdateHandleTransform(const FTransform& NewTransform)
{
Super::UpdateHandleTransform(NewTransform);
if (bAnimInstanceMode)
{
UPhysicsAssetEditorSkeletalMeshComponent* PhatComponent = Cast<UPhysicsAssetEditorSkeletalMeshComponent>(GrabbedComponent);
if (PhatComponent != nullptr)
{
PhatComponent->UpdateHandleTransform(NewTransform);
}
}
}
void UPhysicsAssetEditorPhysicsHandleComponent::UpdateDriveSettings()
{
Super::UpdateDriveSettings();
if (bAnimInstanceMode)
{
UPhysicsAssetEditorSkeletalMeshComponent* PhatComponent = Cast<UPhysicsAssetEditorSkeletalMeshComponent>(GrabbedComponent);
if (PhatComponent != nullptr)
{
PhatComponent->UpdateDriveSettings(bSoftLinearConstraint, LinearStiffness, LinearDamping);
}
}
}
void UPhysicsAssetEditorPhysicsHandleComponent::SetAnimInstanceMode(bool bInAnimInstanceMode)
{
bAnimInstanceMode = bInAnimInstanceMode;
}
void UPhysicsAssetEditorPhysicsHandleComponent::GrabComponentImp(class UPrimitiveComponent* Component, FName InBoneName, const FVector& Location, const FRotator& Rotation, bool InbRotationConstrained)
{
Super::GrabComponentImp(Component, InBoneName, Location, Rotation, bRotationConstrained);
if (bAnimInstanceMode)
{
TargetTransform = CurrentTransform = FTransform(Rotation, Location);
UPhysicsAssetEditorSkeletalMeshComponent* PhatComponent = Cast<UPhysicsAssetEditorSkeletalMeshComponent>(Component);
if (PhatComponent != nullptr)
{
PhatComponent->Grab(InBoneName, Location, Rotation, InbRotationConstrained);
}
}
}
void UPhysicsAssetEditorPhysicsHandleComponent::ReleaseComponent()
{
if (bAnimInstanceMode)
{
UPhysicsAssetEditorSkeletalMeshComponent* PhatComponent = Cast<UPhysicsAssetEditorSkeletalMeshComponent>(GrabbedComponent);
if (PhatComponent != nullptr)
{
PhatComponent->Ungrab();
}
}
Super::ReleaseComponent();
}