75 lines
3.3 KiB
C++
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;
|
|
};
|
|
|