A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
DlgEdge.cpp
Go to the documentation of this file.
1// Copyright Csaba Molnar, Daniel Butum. All Rights Reserved.
2#include "DlgEdge.h"
3
4#include "DlgConstants.h"
5#include "DlgContext.h"
9
10bool FDlgEdge::IsTextVisible(const UDlgNode& ParentNode)
11{
12 // Selector node
13 if (ParentNode.IsA<UDlgNode_Selector>())
14 {
15 return false;
16 }
17
18 // Virtual parent node
19 if (const UDlgNode_Speech* Node = Cast<UDlgNode_Speech>(&ParentNode))
20 {
21 if (Node->IsVirtualParent())
22 {
23 return false;
24 }
25 }
26
27 return true;
28}
29
31 const UDlgDialogue& ParentDialogue,
32 const UDlgNode& ParentNode,
33 const UDlgSystemSettings& Settings,
34 bool bUpdateFromRemapping
35)
36{
37 if (!IsValid())
38 {
39 return;
40 }
41
42 // Clear the current text as it won't be visible anyways
43 if (!IsTextVisible(ParentNode))
44 {
45 SetText(FText::GetEmpty());
46 return;
47 }
48
49 if (Settings.bSetDefaultEdgeTexts)
50 {
51 // Only if empty
52 if (GetUnformattedText().IsEmpty())
53 {
54 if (ParentDialogue.IsEndNode(TargetIndex))
55 {
56 // End Node
58 }
59 else
60 {
61 // Normal node
63 }
64 }
65 }
66
67 // Update text remapping
68 if (bUpdateFromRemapping)
69 {
71 }
72}
73
74void FDlgEdge::UpdateTextsNamespacesAndKeys(const UObject* ParentObject, const UDlgSystemSettings& Settings)
75{
76 if (!IsValid())
77 {
78 return;
79 }
80
82}
83
84bool FDlgEdge::Evaluate(const UDlgContext& Context, TSet<const UDlgNode*> AlreadyVisitedNodes) const
85{
86 if (!IsValid())
87 {
88 return false;
89 }
90
91 // Check target node enter conditions
92 if (!Context.IsNodeEnterable(TargetIndex, AlreadyVisitedNodes))
93 {
94 return false;
95 }
96
97 // Check this edge conditions
99}
100
101void FDlgEdge::RebuildConstructedText(const UDlgContext& Context, FName FallbackParticipantName)
102{
103 if (TextArguments.Num() <= 0)
104 {
105 return;
106 }
107
108 FFormatNamedArguments OrderedArguments;
109 for (const FDlgTextArgument& DlgArgument : TextArguments)
110 {
111 OrderedArguments.Add(DlgArgument.DisplayString, DlgArgument.ConstructFormatArgumentValue(Context, FallbackParticipantName));
112 }
113 ConstructedText = FText::AsCultureInvariant(FText::Format(Text, OrderedArguments));
114}
static void UpdateTextFromRemapping(const UDlgSystemSettings &Settings, FText &OutText)
static void UpdateTextNamespaceAndKey(const UObject *Object, const UDlgSystemSettings &Settings, FText &Text)
UCLASS(BlueprintType)
Definition DlgContext.h:96
bool IsNodeEnterable(int32 NodeIndex, TSet< const UDlgNode * > AlreadyVisitedNodes) const
UCLASS(BlueprintType, Meta = (DisplayThumbnail = "true"))
Definition DlgDialogue.h:85
bool IsEndNode(int32 NodeIndex) const
UCLASS(BlueprintType, ClassGroup = "Dialogue")
UCLASS(BlueprintType, ClassGroup = "Dialogue")
UCLASS(BlueprintType, Abstract, EditInlineNew, ClassGroup = "Dialogue")
Definition DlgNode.h:40
UCLASS(Config = Engine, DefaultConfig, meta = (DisplayName = "Dialogue System Settings"))
bool bSetDefaultEdgeTexts
UPROPERTY(Category = "Default Texts", Config, EditAnywhere, DisplayName = "Set Default Edge Texts")
FText DefaultTextEdgeToNormalNode
UPROPERTY(Category = "Default Texts", Config, EditAnywhere, DisplayName = "Edge Text To Normal Node")
FText DefaultTextEdgeToEndNode
UPROPERTY(Category = "Default Texts", Config, EditAnywhere, DisplayName = "Edge Text To End Node")
static bool EvaluateArray(const UDlgContext &Context, const TArray< FDlgCondition > &ConditionsArray, FName DefaultParticipantName=NAME_None)
void UpdateTextValueFromDefaultAndRemapping(const UDlgDialogue &ParentDialogue, const UDlgNode &ParentNode, const UDlgSystemSettings &Settings, bool bUpdateFromRemapping)
Definition DlgEdge.cpp:30
static bool IsTextVisible(const UDlgNode &ParentNode)
Definition DlgEdge.cpp:10
FText Text
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Dialogue|Edge", Meta = (MultiLine = true))
Definition DlgEdge.h:161
void RebuildConstructedText(const UDlgContext &Context, FName FallbackParticipantName)
Definition DlgEdge.cpp:101
void UpdateTextsNamespacesAndKeys(const UObject *ParentObject, const UDlgSystemSettings &Settings)
Definition DlgEdge.cpp:74
TArray< FDlgCondition > Conditions
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Edge")
Definition DlgEdge.h:134
int32 TargetIndex
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Dialogue|Edge", Meta = (ClampMin = -1))
Definition DlgEdge.h:126
void SetText(const FText &NewText)
Definition DlgEdge.h:79
FText ConstructedText
Definition DlgEdge.h:173
const FText & GetUnformattedText() const
Definition DlgEdge.h:103
bool Evaluate(const UDlgContext &Context, TSet< const UDlgNode * > AlreadyVisitedNodes) const
Definition DlgEdge.cpp:84
TArray< FDlgTextArgument > TextArguments
UPROPERTY(EditAnywhere, BlueprintReadOnly, EditFixedSize, Category = "Dialogue|Edge")
Definition DlgEdge.h:170
bool IsValid() const
Definition DlgEdge.h:107
USTRUCT(BlueprintType)