Files
UnrealEngine/Engine/Plugins/ChaosClothAssetEditor/Source/ChaosClothAssetDataflowNodes/Private/ChaosClothAsset/SimulationMaxDistanceConfigNode.cpp
2025-05-18 13:04:45 +08:00

50 lines
2.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ChaosClothAsset/SimulationMaxDistanceConfigNode.h"
#include "ChaosClothAsset/ClothCollectionGroup.h"
#include "ChaosClothAsset/ClothGeometryTools.h"
#include "ChaosClothAsset/CollectionClothSelectionFacade.h"
#include "Chaos/CollectionPropertyFacade.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(SimulationMaxDistanceConfigNode)
FChaosClothAssetSimulationMaxDistanceConfigNode::FChaosClothAssetSimulationMaxDistanceConfigNode(const UE::Dataflow::FNodeParameters& InParam, FGuid InGuid)
: FChaosClothAssetSimulationBaseConfigNode(InParam, InGuid)
{
KinematicVertices3D = TEXT("KinematicVertices3D");
RegisterCollectionConnections();
RegisterInputConnection(&MaxDistance.WeightMap)
.SetCanHidePin(true)
.SetPinIsHidden(true);
RegisterInputConnection(&InKinematic, GET_MEMBER_NAME_CHECKED(FChaosClothAssetConnectableIStringValue, StringValue));
RegisterOutputConnection(&KinematicVertices3D);
}
void FChaosClothAssetSimulationMaxDistanceConfigNode::Evaluate(UE::Dataflow::FContext& Context, const FDataflowOutput* Out) const
{
Super::Evaluate(Context, Out);
if (Out->IsA(&KinematicVertices3D))
{
SetValue(Context, KinematicVertices3D, &KinematicVertices3D);
}
}
void FChaosClothAssetSimulationMaxDistanceConfigNode::AddProperties(FPropertyHelper& PropertyHelper) const
{
PropertyHelper.SetPropertyWeighted(this, &MaxDistance, {}, ECollectionPropertyFlags::Intrinsic); // Intrinsic since the deformer weights needs to be recalculated
PropertyHelper.SetPropertyString(this, &KinematicVertices3D);
}
void FChaosClothAssetSimulationMaxDistanceConfigNode::EvaluateClothCollection(UE::Dataflow::FContext& Context, const TSharedRef<FManagedArrayCollection>& ClothCollection) const
{
using namespace UE::Chaos::ClothAsset;
const FName MaxDistanceString(GetValue<FString>(Context, &MaxDistance.WeightMap)); // Override for this is already set by AddProperties
const FName InputKinematicString(GetValue<FString>(Context, &InKinematic.StringValue));
FCollectionClothSelectionFacade SelectionFacade(ClothCollection);
SelectionFacade.DefineSchema();
SelectionFacade.FindOrAddSelectionSet(FName(KinematicVertices3D), ClothCollectionGroup::SimVertices3D) =
FClothGeometryTools::GenerateKinematicVertices3D(ClothCollection, MaxDistanceString, FVector2f(MaxDistance.Low, MaxDistance.High), InputKinematicString);
}