#pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "VisceraNodeObject.generated.h" // Forward declarations struct FVisceraNodeItem; /** * Object representing a viscera node for property editing */ UCLASS() class FLESHEDITOR_API UVisceraNodeObject : public UObject { GENERATED_BODY() public: UVisceraNodeObject(); // Initialize from a node item void InitFromNodeItem(TSharedPtr InNodeItem); // Apply changes back to the node item void ApplyToNodeItem(TSharedPtr InNodeItem); // Node type UPROPERTY(VisibleAnywhere, Category = "Node") FString NodeType; // Node name UPROPERTY(EditAnywhere, Category = "Node") FName NodeName; // Display name UPROPERTY(EditAnywhere, Category = "Node") FString DisplayName; // SoftBody properties UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides)) bool bEnableSimulation; UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "10.0")) float GravityStrength; UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1000.0")) float MinFrameSpeed; UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1000.0")) float MaxFrameSpeed; UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0")) float ExternalFrameLerp; UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0")) float InitialGPUInfluence; UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "0.1")) float SubstepTime; UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "1", ClampMax = "10")) int32 SolverIterations; UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides)) bool bRecomputeNormals; // Anchor properties UPROPERTY(EditAnywhere, Category = "Anchor", meta = (EditCondition = "NodeType == \"Anchor\"", EditConditionHides)) FVector AnchorLocation; UPROPERTY(EditAnywhere, Category = "Anchor", meta = (EditCondition = "NodeType == \"Anchor\"", EditConditionHides, ClampMin = "0.1", ClampMax = "100.0")) float AnchorRadius; UPROPERTY(EditAnywhere, Category = "Anchor", meta = (EditCondition = "NodeType == \"Anchor\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0")) float AnchorStiffness; UPROPERTY(EditAnywhere, Category = "Anchor", meta = (EditCondition = "NodeType == \"Anchor\"", EditConditionHides)) FName AnchorBoneName; // LineChain properties UPROPERTY(EditAnywhere, Category = "LineChain", meta = (EditCondition = "NodeType == \"LineChain\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0")) float LineChainStiffness; UPROPERTY(EditAnywhere, Category = "LineChain", meta = (EditCondition = "NodeType == \"LineChain\"", EditConditionHides, ClampMin = "0.1", ClampMax = "10.0")) float LineChainThickness; UPROPERTY(EditAnywhere, Category = "LineChain", meta = (EditCondition = "NodeType == \"LineChain\"", EditConditionHides)) TArray LineChainPoints; // Tetra properties UPROPERTY(EditAnywhere, Category = "Tetra", meta = (EditCondition = "NodeType == \"Tetra\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0")) float TetraStiffness; UPROPERTY(EditAnywhere, Category = "Tetra", meta = (EditCondition = "NodeType == \"Tetra\"", EditConditionHides)) TArray TetraPoints; // Plane properties UPROPERTY(EditAnywhere, Category = "Plane", meta = (EditCondition = "NodeType == \"Plane\"", EditConditionHides)) FVector PlaneLocation; UPROPERTY(EditAnywhere, Category = "Plane", meta = (EditCondition = "NodeType == \"Plane\"", EditConditionHides)) FVector PlaneNormal; UPROPERTY(EditAnywhere, Category = "Plane", meta = (EditCondition = "NodeType == \"Plane\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0")) float PlaneStiffness; // Cutting properties UPROPERTY(EditAnywhere, Category = "Cutting", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides)) bool bEnableMultiLayerCutting; UPROPERTY(EditAnywhere, Category = "Cutting", meta = (EditCondition = "NodeType == \"SoftBody\" && bEnableMultiLayerCutting", EditConditionHides)) ECapMeshMethod CapMethod; };