119 lines
2.5 KiB
C++
119 lines
2.5 KiB
C++
// ©2023 Batty Bovine Productions, LLC. All Rights Reserved.
|
|
|
|
#include "ComboActionGraph.h"
|
|
|
|
#include "Nodes/ComboActionGraphEdge.h"
|
|
#include "Nodes/ComboActionGraphNode.h"
|
|
#include "Nodes/ComboActionGraphNode_StartNode.h"
|
|
|
|
#define LOCTEXT_NAMESPACE "ComboActionGraph"
|
|
|
|
DEFINE_LOG_CATEGORY(LogComboActionGraph);
|
|
|
|
|
|
UComboActionGraph::UComboActionGraph()
|
|
{
|
|
this->NodeType = UComboActionGraphNode::StaticClass();
|
|
this->EdgeType = UComboActionGraphEdge::StaticClass();
|
|
|
|
this->bEdgeEnabled = false;
|
|
this->GraphGUID = FGuid::NewGuid();
|
|
|
|
#if WITH_EDITORONLY_DATA
|
|
this->EdGraph = nullptr;
|
|
|
|
this->bCanRenameNode = true;
|
|
#endif
|
|
}
|
|
|
|
void UComboActionGraph::CreateGraph()
|
|
{
|
|
#if WITH_EDITOR
|
|
// We already have an existing graph or start node
|
|
if (this->EdGraph != nullptr || this->StartNode != nullptr)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this->StartNode = this->ConstructActionNode<UComboActionGraphNode_StartNode>();
|
|
if (this->StartNode != nullptr )
|
|
{
|
|
this->StartNode->Graph = this;
|
|
|
|
this->RootNodes.Add(this->StartNode);
|
|
this->AllNodes.Add(this->StartNode);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void UComboActionGraph::ClearGraph()
|
|
{
|
|
for (UComboActionGraphNode *Node : this->AllNodes)
|
|
{
|
|
Node->ParentNodes.Empty();
|
|
Node->ChildrenNodes.Empty();
|
|
Node->Edges.Empty();
|
|
}
|
|
|
|
this->AllNodes.Empty();
|
|
this->RootNodes.Empty();
|
|
}
|
|
|
|
void UComboActionGraph::PostInitProperties()
|
|
{
|
|
UObject::PostInitProperties();
|
|
|
|
// Ignore these cases
|
|
if (this->HasAnyFlags(EObjectFlags::RF_ClassDefaultObject | EObjectFlags::RF_NeedLoad))
|
|
{
|
|
return;
|
|
}
|
|
|
|
#if WITH_EDITOR
|
|
this->CreateGraph();
|
|
#endif
|
|
}
|
|
|
|
#if WITH_EDITOR
|
|
bool UComboActionGraph::ValidateGraph(TArray<FText> &ValidationErrors, bool RichTextFormat)
|
|
{
|
|
bool bReturnValue = true;
|
|
|
|
if (this->StartNode == nullptr)
|
|
{
|
|
const FString RichTextReturn =
|
|
FString("* ")
|
|
.Append(TEXT("<RichTextBlock.Bold>Dialogue Graph</>"))
|
|
.Append(": Has no Start Node!");
|
|
|
|
const FString TextReturn =
|
|
this->GetName()
|
|
.Append(": Has no Start Node!");
|
|
|
|
ValidationErrors.Add(FText::FromString(RichTextFormat ? RichTextReturn : TextReturn));
|
|
|
|
bReturnValue = false;
|
|
}
|
|
|
|
for (UComboActionGraphNode *Itr : this->AllNodes)
|
|
{
|
|
if (Itr != nullptr && !Itr->ValidateNode(ValidationErrors, RichTextFormat))
|
|
{
|
|
bReturnValue = false;
|
|
}
|
|
}
|
|
|
|
return bReturnValue;
|
|
}
|
|
|
|
EDataValidationResult UComboActionGraph::IsDataValid(TArray<FText> &ValidationErrors)
|
|
{
|
|
//return this->ValidateGraph(ValidationErrors, false)
|
|
// ? EDataValidationResult::Valid
|
|
// : EDataValidationResult::Invalid;
|
|
return EDataValidationResult::NotValidated;
|
|
}
|
|
#endif
|
|
|
|
#undef LOCTEXT_NAMESPACE
|