A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
DialogueDetailsPanelUtils.h
Go to the documentation of this file.
1// Copyright Csaba Molnar, Daniel Butum. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
5
8
9#define CREATE_VISIBILITY_CALLBACK(_SelfMethod) \
10 TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, _SelfMethod))
11
12#define CREATE_VISIBILITY_CALLBACK_STATIC(_StaticMethod) \
13 TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateStatic(_StaticMethod))
14
15#define CREATE_BOOL_CALLBACK(_SelfMethod) \
16 TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, _SelfMethod))
17
18#define CREATE_BOOL_CALLBACK_STATIC(_StaticMethod) \
19 TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateStatic(_StaticMethod))
20
21// Constants used in this file
22static const TCHAR* META_ShowOnlyInnerProperties = TEXT("ShowOnlyInnerProperties");
23static const TCHAR* META_UIMin = TEXT("UIMin");
24static const TCHAR* META_UIMax = TEXT("UIMax");
25static const TCHAR* META_ClampMin = TEXT("ClampMin");
26static const TCHAR* META_ClampMax = TEXT("ClampMax");
27
29{
30public:
31 // Getters for visibility of some properties
32 static EVisibility GetVoiceSoundWaveVisibility()
33 {
34 const UDlgSystemSettings* Settings = GetDefault<UDlgSystemSettings>();
37 ? EVisibility::Visible : EVisibility::Hidden;
38 }
39
40 static EVisibility GetVoiceDialogueWaveVisibility()
41 {
42 const UDlgSystemSettings* Settings = GetDefault<UDlgSystemSettings>();
45 ? EVisibility::Visible : EVisibility::Hidden;
46 }
47
48 static EVisibility GetSpeakerStateNodeVisibility()
49 {
50 const UDlgSystemSettings* Settings = GetDefault<UDlgSystemSettings>();
53 ? EVisibility::Visible : EVisibility::Hidden;
54 }
55
56 static EVisibility GetNodeDataVisibility()
57 {
58 return GetDefault<UDlgSystemSettings>()->bShowNodeData ? EVisibility::Visible : EVisibility::Hidden;
59 }
60
61 static EVisibility GetNodeGenericDataVisibility()
62 {
63 return GetDefault<UDlgSystemSettings>()->bShowGenericData ? EVisibility::Visible : EVisibility::Hidden;
64 }
65
66 static EVisibility GetChildrenVisibility()
67 {
68 return GetDefault<UDlgSystemSettings>()->bShowAdvancedChildren ? EVisibility::Visible : EVisibility::Hidden;
69 }
70
72 static EModifierKey::Type GetModifierKeyFromDialogueSettings()
73 {
74 switch (GetDefault<UDlgSystemSettings>()->DialogueTextInputKeyForNewLine)
75 {
77 return EModifierKey::Shift;
78
80 default:
81 return EModifierKey::None;
82 }
83 }
84
86 static void ResetNumericPropertyLimits(const TSharedPtr<IPropertyHandle>& PropertyHandle)
87 {
88 if (!PropertyHandle.IsValid())
89 {
90 return;
91 }
92
93 auto* Property = PropertyHandle->GetProperty();
94 Property->RemoveMetaData(META_UIMin);
95 Property->RemoveMetaData(META_UIMax);
96 Property->RemoveMetaData(META_ClampMin);
97 Property->RemoveMetaData(META_ClampMax);
98 }
99
101 template <typename NumericType>
102 static void SetNumericPropertyLimits(const TSharedPtr<IPropertyHandle>& PropertyHandle, const NumericType Min, const NumericType Max)
103 {
104 if (!PropertyHandle.IsValid())
105 {
106 return;
107 }
108
109 // Clamp Current value if not in range
110 NumericType NumericValue;
111 if (PropertyHandle->GetValue(NumericValue) != FPropertyAccess::Success)
112 {
113 return;
114 }
115 if (PropertyHandle->SetValue(FMath::Clamp(NumericValue, Min, Max)) != FPropertyAccess::Success)
116 {
117 return;
118 }
119
120 const FString MinString = FString::FromInt(Min);
121 const FString MaxString = FString::FromInt(Max);
122 auto* Property = PropertyHandle->GetProperty();
123
124 // min
125 Property->SetMetaData(META_UIMin, *MinString);
126 Property->SetMetaData(META_ClampMin, *MinString);
127
128 // max
129 Property->SetMetaData(META_UIMax, *MaxString);
130 Property->SetMetaData(META_ClampMax, *MaxString);
131 }
132
134 static UDialogueGraphNode_Base* GetGraphNodeBaseFromPropertyHandle(const TSharedRef<IPropertyHandle>& PropertyHandle);
135
141 static UDialogueGraphNode* GetClosestGraphNodeFromPropertyHandle(const TSharedRef<IPropertyHandle>& PropertyHandle);
142
148 static UDialogueGraphNode_Edge* GetAsGraphNodeEdgeFromPropertyHandle(const TSharedRef<IPropertyHandle>& PropertyHandle)
149 {
150 return Cast<UDialogueGraphNode_Edge>(GetGraphNodeBaseFromPropertyHandle(PropertyHandle));
151 }
152
154 static UDlgDialogue* GetDialogueFromPropertyHandle(const TSharedRef<IPropertyHandle>& PropertyHandle);
155
161 static FName GetParticipantNameFromPropertyHandle(const TSharedRef<IPropertyHandle>& ParticipantNamePropertyHandle);
162
165};
static const TCHAR * META_ShowOnlyInnerProperties
static const TCHAR * META_UIMin
static const TCHAR * META_ClampMin
static const TCHAR * META_UIMax
static const TCHAR * META_ClampMax
UCLASS(BlueprintType, Meta = (DisplayThumbnail = "true"))
Definition DlgDialogue.h:85
UCLASS(Config = Engine, DefaultConfig, meta = (DisplayName = "Dialogue System Settings"))
EDlgVoiceDisplayedFields DialogueDisplayedVoiceFields
UPROPERTY(Category = "Dialogue Node Data", Config, EditAnywhere, DisplayName = "Displayed Voice Field...
EDlgSpeakerStateVisibility DialogueSpeakerStateVisibility
UPROPERTY(Category = "Dialogue Node Data", Config, EditAnywhere, DisplayName = "SpeakerState Visibili...
static EModifierKey::Type GetModifierKeyFromDialogueSettings()
static TArray< FName > GetDialogueSortedParticipantNames(UDlgDialogue *Dialogue)
static FName GetParticipantNameFromPropertyHandle(const TSharedRef< IPropertyHandle > &ParticipantNamePropertyHandle)
static EVisibility GetChildrenVisibility()
static EVisibility GetVoiceSoundWaveVisibility()
static EVisibility GetNodeGenericDataVisibility()
static EVisibility GetNodeDataVisibility()
static UDialogueGraphNode_Base * GetGraphNodeBaseFromPropertyHandle(const TSharedRef< IPropertyHandle > &PropertyHandle)
static UDlgDialogue * GetDialogueFromPropertyHandle(const TSharedRef< IPropertyHandle > &PropertyHandle)
static EVisibility GetVoiceDialogueWaveVisibility()
static void SetNumericPropertyLimits(const TSharedPtr< IPropertyHandle > &PropertyHandle, const NumericType Min, const NumericType Max)
static UDialogueGraphNode * GetClosestGraphNodeFromPropertyHandle(const TSharedRef< IPropertyHandle > &PropertyHandle)
static UDialogueGraphNode_Edge * GetAsGraphNodeEdgeFromPropertyHandle(const TSharedRef< IPropertyHandle > &PropertyHandle)
static EVisibility GetSpeakerStateNodeVisibility()
static void ResetNumericPropertyLimits(const TSharedPtr< IPropertyHandle > &PropertyHandle)