A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
DlgTextArgument.cpp
Go to the documentation of this file.
1// Copyright Csaba Molnar, Daniel Butum. All Rights Reserved.
2#include "DlgTextArgument.h"
3
4#include "UObject/TextProperty.h"
5
6#include "DlgConstants.h"
7#include "DlgContext.h"
8#include "DlgHelper.h"
10#include "NYReflectionHelper.h"
11#include "Logging/DlgLogger.h"
12
13FFormatArgumentValue FDlgTextArgument::ConstructFormatArgumentValue(const UDlgContext& Context, FName NodeOwner) const
14{
15 // If participant name is not valid we use the node owner name
16 const FName ValidParticipantName = ParticipantName == NAME_None ? NodeOwner : ParticipantName;
17 const UObject* Participant = Context.GetParticipant(ValidParticipantName);
18 if (Participant == nullptr)
19 {
21 TEXT("FAILED to construct text argument because the PARTICIPANT is INVALID (Supplied Participant = %s). \nContext:\n\t%s, DisplayString = %s, ParticipantName = %s, ArgumentType = %s"),
22 *ValidParticipantName.ToString(), *Context.GetContextString(), *DisplayString, *ParticipantName.ToString(), *ArgumentTypeToString(Type)
23 );
24 return FFormatArgumentValue(FText::FromString(TEXT("[CustomTextArgument is INVALID. Missing Participant. Check log]")));
25 }
26
27 switch (Type)
28 {
30 return FFormatArgumentValue(IDlgDialogueParticipant::Execute_GetIntValue(Participant, VariableName));
31
33 return FFormatArgumentValue(FNYReflectionHelper::GetVariable<FNYIntProperty, int32>(Participant, VariableName));
34
36 return FFormatArgumentValue(IDlgDialogueParticipant::Execute_GetFloatValue(Participant, VariableName));
37
39 return FFormatArgumentValue(FNYReflectionHelper::GetVariable<FNYFloatProperty, float>(Participant, VariableName));
40
42 return FFormatArgumentValue(FNYReflectionHelper::GetVariable<FNYTextProperty, FText>(Participant, VariableName));
43
45 return FFormatArgumentValue(IDlgDialogueParticipant::Execute_GetParticipantDisplayName(Participant, NodeOwner));
46
48 return FFormatArgumentValue(IDlgDialogueParticipant::Execute_GetParticipantGender(Participant));
49
51 if (CustomTextArgument == nullptr)
52 {
54 TEXT("Custom Text Argument is INVALID. Returning Error Text. Context:\n\t%s, Participant = %s"),
55 *Context.GetContextString(), Participant ? *Participant->GetPathName() : TEXT("INVALID")
56 );
57 return FFormatArgumentValue(FText::FromString(TEXT("[CustomTextArgument is INVALID. Missing Custom Text Argument. Check log]")));
58 }
59
60 return FFormatArgumentValue(CustomTextArgument->GetText(&Context, Participant, DisplayString));
61
62 default:
63 checkNoEntry();
64 return FFormatArgumentValue(0);
65 }
66}
67
68void FDlgTextArgument::UpdateTextArgumentArray(const FText& Text, TArray<FDlgTextArgument>& InOutArgumentArray)
69{
70 TArray<FString> NewArgumentParams;
71 FText::GetFormatPatternParameters(Text, NewArgumentParams);
72
73 TArray<FDlgTextArgument> OldArguments = InOutArgumentArray;
74 InOutArgumentArray.Empty();
75
76 for (const FString& String : NewArgumentParams)
77 {
78 FDlgTextArgument Argument;
79 Argument.DisplayString = String;
80
81 // Replace with old argument values if display string matches
82 for (const FDlgTextArgument& OldArgument : OldArguments)
83 {
84 if (String == OldArgument.DisplayString)
85 {
86 Argument = OldArgument;
87 break;
88 }
89 }
90
91 InOutArgumentArray.Add(Argument);
92 }
93}
94
96{
97 FString EnumValue;
98 FDlgHelper::ConvertEnumToString<EDlgTextArgumentType>(TEXT("EDlgTextArgumentType"), Type, false, EnumValue);
99 return EnumValue;
100}
EDlgTextArgumentType
UENUM(BlueprintType)
static FDlgLogger & Get()
Definition DlgLogger.h:24
void Errorf(const FmtType &Fmt, Types... Args)
Definition INYLogger.h:305
UCLASS(BlueprintType)
Definition DlgContext.h:96
const UObject * GetParticipant(FName ParticipantName) const
FString GetContextString() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Context")
FText GetText(const UDlgContext *Context, const UObject *Participant, const FString &DisplayStringParam)
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Dialogue")
USTRUCT(BlueprintType)
UDlgTextArgumentCustom * CustomTextArgument
UPROPERTY(Instanced, EditAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
FString DisplayString
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
FName ParticipantName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
FName VariableName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
FFormatArgumentValue ConstructFormatArgumentValue(const UDlgContext &Context, FName NodeOwner) const
static FString ArgumentTypeToString(EDlgTextArgumentType Type)
static void UpdateTextArgumentArray(const FText &Text, TArray< FDlgTextArgument > &InOutArgumentArray)