// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/Array.h" #include "Curves/CurveOwnerInterface.h" #include "Curves/RichCurve.h" #include "IDetailCustomization.h" #include "Templates/SharedPointer.h" class IDetailLayoutBuilder; class IPropertyHandle; class UAnimGraphNode_Trail; class UObject; class FAnimTrailNodeDetails : public IDetailCustomization { public: /** Makes a new instance of this detail layout class for a specific detail view requesting it */ static TSharedRef MakeInstance(); /** IDetailCustomization interface */ virtual void CustomizeDetails( IDetailLayoutBuilder& DetailBuilder ) override; virtual void PendingDelete() override; struct FTrailRelaxCurveEditor: public FCurveOwnerInterface { FTrailRelaxCurveEditor(UAnimGraphNode_Trail* InGraphNode = nullptr, TSharedPtr InTrailRelaxCurveHandle = TSharedPtr()); /** FCurveOwnerInterface interface */ virtual TArray GetCurves() const override; virtual TArray GetCurves() override; virtual void ModifyOwner() override; virtual TArray GetOwners() const override; virtual void MakeTransactional() override; virtual void OnCurveChanged(const TArray& ChangedCurveEditInfos) override { } virtual bool IsValidCurve(FRichCurveEditInfo CurveInfo) override; private: UAnimGraphNode_Trail* GraphNodeOwner; TSharedPtr TrailRelaxCurveHandle; } TrailRelaxCurveEditor; private: TSharedPtr TrailRelaxCurveWidget; };