Files
UnrealEngine/Engine/Plugins/Experimental/CommonConversation/Source/CommonConversationGraph/Public/ConversationGraphSchema.h
2025-05-18 13:04:45 +08:00

75 lines
3.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "AIGraphSchema.h"
#include "ConversationGraphSchema.generated.h"
class FSlateRect;
class UEdGraph;
class UConversationNode;
class UConversationGraphNode;
class FMenuBuilder;
class FConnectionDrawingPolicy;
class FSlateWindowElementList;
//////////////////////////////////////////////////////////////////////
/** Action to auto arrange the graph */
USTRUCT()
struct FConversationGraphSchemaAction_AutoArrange : public FEdGraphSchemaAction
{
GENERATED_USTRUCT_BODY();
FConversationGraphSchemaAction_AutoArrange()
: FEdGraphSchemaAction() {}
FConversationGraphSchemaAction_AutoArrange(FText InNodeCategory, FText InMenuDesc, FText InToolTip, const int32 InGrouping)
: FEdGraphSchemaAction(MoveTemp(InNodeCategory), MoveTemp(InMenuDesc), MoveTemp(InToolTip), InGrouping)
{}
//~ Begin FEdGraphSchemaAction Interface
using FEdGraphSchemaAction::PerformAction; // Prevent hiding of deprecated base class function with FVector2D
virtual UEdGraphNode* PerformAction(class UEdGraph* ParentGraph, UEdGraphPin* FromPin, const FVector2f& Location, bool bSelectNewNode = true) override;
//~ End FEdGraphSchemaAction Interface
};
//////////////////////////////////////////////////////////////////////
UCLASS()
class COMMONCONVERSATIONGRAPH_API UConversationGraphSchema : public UAIGraphSchema
{
GENERATED_UCLASS_BODY()
public:
//~ Begin EdGraphSchema Interface
virtual void CreateDefaultNodesForGraph(UEdGraph& Graph) const override;
virtual void GetGraphContextActions(FGraphContextMenuBuilder& ContextMenuBuilder) const override;
virtual void GetContextMenuActions(class UToolMenu* Menu, class UGraphNodeContextMenuContext* Context) const override;
virtual const FPinConnectionResponse CanCreateConnection(const UEdGraphPin* A, const UEdGraphPin* B) const override;
virtual const FPinConnectionResponse CanMergeNodes(const UEdGraphNode* A, const UEdGraphNode* B) const override;
virtual void OnPinConnectionDoubleCicked(UEdGraphPin* PinA, UEdGraphPin* PinB, const FVector2f& GraphPosition) const override;
virtual FLinearColor GetPinTypeColor(const FEdGraphPinType& PinType) const override;
virtual class FConnectionDrawingPolicy* CreateConnectionDrawingPolicy(int32 InBackLayerID, int32 InFrontLayerID, float InZoomFactor, const FSlateRect& InClippingRect, class FSlateWindowElementList& InDrawElements, class UEdGraph* InGraphObj) const override;
virtual bool IsCacheVisualizationOutOfDate(int32 InVisualizationCacheID) const override;
virtual int32 GetCurrentVisualizationCacheID() const override;
virtual void ForceVisualizationCacheClear() const override;
//~ End EdGraphSchema Interface
virtual void GetGraphNodeContextActions(FGraphContextMenuBuilder& ContextMenuBuilder, int32 SubNodeFlags) const override;
bool HasSubNodeClasses(int32 SubNodeFlags) const;
virtual void GetSubNodeClasses(int32 SubNodeFlags, TArray<FGraphNodeClassData>& ClassData, UClass*& GraphNodeClass) const override;
protected:
void AddConversationNodeOptions(const FString& CategoryName, FGraphContextMenuBuilder& ContextMenuBuilder, TSubclassOf<UConversationNode> RuntimeNodeType, TSubclassOf<UConversationGraphNode> EditorNodeType) const;
private:
// ID for checking dirty status of node titles against, increases whenever
static int32 CurrentCacheRefreshID;
};