A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
DlgTreeViewParticipantProperties.h
Go to the documentation of this file.
1// Copyright Csaba Molnar, Daniel Butum. All Rights Reserved.
2#pragma once
3
4#include <type_traits>
5#include "CoreMinimal.h"
6
7#include "DlgManager.h"
10
12template <class VariablePropertyType>
14{
15 // Compile time Typecheck if subclass
16 typedef typename std::enable_if<std::is_base_of<FDlgTreeViewVariableProperties, VariablePropertyType>::value>::type check;
17
18public:
19 FDlgTreeViewParticipantProperties(const TSet<TWeakObjectPtr<const UDlgDialogue>>& InDialogues) : Dialogues(InDialogues) {}
20 FDlgTreeViewParticipantProperties(const TSet<TWeakObjectPtr<const UDlgDialogue>>&& InDialogues) : Dialogues(InDialogues) {}
21
43
44 // Setters
45
46 // Add Dialogue that containt this participant.
47 void AddDialogue(TWeakObjectPtr<const UDlgDialogue> Dialogue) { Dialogues.Add(Dialogue); }
48
49 // Returns the EventName Property
50 TSharedPtr<VariablePropertyType> AddDialogueToEvent(FName EventName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
51 {
52 return AddDialogueToVariable(&Events, EventName, Dialogue);
53 }
54
55 // Returns the EventClass Property
56 TSharedPtr<VariablePropertyType> AddDialogueToCustomEvent(UClass* EventClass, TWeakObjectPtr<const UDlgDialogue> Dialogue)
57 {
58 return AddDialogueToVariable<UClass*>(&CustomEvents, EventClass, Dialogue);
59 }
60
61 // Returns the ConditionName Property
62 TSharedPtr<VariablePropertyType> AddDialogueToCondition(FName ConditionName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
63 {
64 return AddDialogueToVariable(&Conditions, ConditionName, Dialogue);
65 }
66
67 // Returns the IntName Property
68 TSharedPtr<VariablePropertyType> AddDialogueToIntVariable(FName IntVariableName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
69 {
70 return AddDialogueToVariable(&Integers, IntVariableName, Dialogue);
71 }
72
73 // Returns the FloatName Property
74 TSharedPtr<VariablePropertyType> AddDialogueToFloatVariable(FName FloatVariableName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
75 {
76 return AddDialogueToVariable(&Floats, FloatVariableName, Dialogue);
77 }
78
79 // Returns the BoolName Property
80 TSharedPtr<VariablePropertyType> AddDialogueToBoolVariable(FName BoolVariableName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
81 {
82 return AddDialogueToVariable(&Bools, BoolVariableName, Dialogue);
83 }
84
85 // Returns the FName Property
86 TSharedPtr<VariablePropertyType> AddDialogueToFNameVariable(FName FNameVariableName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
87 {
88 return AddDialogueToVariable(&FNames, FNameVariableName, Dialogue);
89 }
90
91 // Returns the IntName Property
92 TSharedPtr<VariablePropertyType> AddDialogueToClassIntVariable(FName IntVariableName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
93 {
94 return AddDialogueToVariable(&ClassIntegers, IntVariableName, Dialogue);
95 }
96
97 // Returns the FloatName Property
98 TSharedPtr<VariablePropertyType> AddDialogueToClassFloatVariable(FName FloatVariableName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
99 {
100 return AddDialogueToVariable(&ClassFloats, FloatVariableName, Dialogue);
101 }
102
103 // Returns the BoolName Property
104 TSharedPtr<VariablePropertyType> AddDialogueToClassBoolVariable(FName BoolVariableName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
105 {
106 return AddDialogueToVariable(&ClassBools, BoolVariableName, Dialogue);
107 }
108
109 // Returns the FName Property
110 TSharedPtr<VariablePropertyType> AddDialogueToClassFNameVariable(FName FNameVariableName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
111 {
112 return AddDialogueToVariable(&ClassFNames, FNameVariableName, Dialogue);
113 }
114
115 // Returns the FText Property *
116 TSharedPtr<VariablePropertyType> AddDialogueToClassFTextVariable(FName FTextVariableName, TWeakObjectPtr<const UDlgDialogue> Dialogue)
117 {
118 return AddDialogueToVariable(&ClassFTexts, FTextVariableName, Dialogue);
119 }
120
121 // Getters
122 const TSet<TWeakObjectPtr<const UDlgDialogue>>& GetDialogues() const { return Dialogues; }
123 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetEvents() const { return Events; }
124 const TMap<UClass*, TSharedPtr<VariablePropertyType>>& GetCustomEvents() const { return CustomEvents; }
125 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetConditions() const { return Conditions; }
126 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetIntegers() const { return Integers; }
127 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetFloats() const { return Floats; }
128 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetBools() const { return Bools; }
129 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetFNames() const { return FNames; }
130 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetClassIntegers() const { return ClassIntegers; }
131 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetClassFloats() const { return ClassFloats; }
132 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetClassBools() const { return ClassBools; }
133 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetClassFNames() const { return ClassFNames; }
134 const TMap<FName, TSharedPtr<VariablePropertyType>>& GetClassFTexts() const { return ClassFTexts; }
135
137 bool HasDialogueValues() const
138 {
139 return Integers.Num() > 0 || Floats.Num() > 0 || Bools.Num() > 0 || FNames.Num() > 0;
140 }
141
143 bool HasClassVariables() const
144 {
145 return ClassIntegers.Num() > 0 || ClassFloats.Num() > 0 || ClassBools.Num() > 0 || ClassFNames.Num() > 0 || ClassFTexts.Num() > 0;
146 }
147
148 bool HasDialogues() const { return Dialogues.Num() > 0; }
149 bool HasEvents() const { return Events.Num() > 0; }
150 bool HasCustomEvents() const { return CustomEvents.Num() > 0; }
151 bool HasConditions() const { return Conditions.Num() > 0; }
152 bool HasIntegers() const { return Integers.Num() > 0; }
153 bool HasFloats() const { return Floats.Num() > 0; }
154 bool HasBools() const { return Bools.Num() > 0; }
155 bool HasFNames() const { return FNames.Num() > 0; }
156 bool HasClassIntegers() const { return ClassIntegers.Num() > 0; }
157 bool HasClassFloats() const { return ClassFloats.Num() > 0; }
158 bool HasClassBools() const { return ClassBools.Num() > 0; }
159 bool HasClassFNames() const { return ClassFNames.Num() > 0; }
160 bool HasClassFTexts() const { return ClassFTexts.Num() > 0; }
161
162protected:
163 template <typename KeyType>
164 TSharedPtr<VariablePropertyType> AddDialogueToVariable(
165 TMap<KeyType, TSharedPtr<VariablePropertyType>>* VariableMap,
166 KeyType VariableKeyValue,
167 TWeakObjectPtr<const UDlgDialogue> Dialogue
168 )
169 {
170 TSharedPtr<VariablePropertyType>* VariablePropsPtr = VariableMap->Find(VariableKeyValue);
171 TSharedPtr<VariablePropertyType> VariableProps;
172 if (VariablePropsPtr == nullptr)
173 {
174 // Variable does not exist for participant, create it
175 const TSet<TWeakObjectPtr<const UDlgDialogue>> SetArgument{Dialogue};
176 VariableProps = MakeShared<VariablePropertyType>(SetArgument);
177 VariableMap->Add(VariableKeyValue, VariableProps);
178 }
179 else
180 {
181 // exists
182 VariableProps = *VariablePropsPtr;
183 VariableProps->AddDialogue(Dialogue);
184 }
185
186 return VariableProps;
187 }
188
189protected:
194 TSet<TWeakObjectPtr<const UDlgDialogue>> Dialogues;
195
201 TMap<FName, TSharedPtr<VariablePropertyType>> Events;
202
208 TMap<UClass*, TSharedPtr<VariablePropertyType>> CustomEvents;
209
215 TMap<FName, TSharedPtr<VariablePropertyType>> Conditions;
216
222 TMap<FName, TSharedPtr<VariablePropertyType>> Integers;
223
229 TMap<FName, TSharedPtr<VariablePropertyType>> Floats;
230
236 TMap<FName, TSharedPtr<VariablePropertyType>> Bools;
237
243 TMap<FName, TSharedPtr<VariablePropertyType>> FNames;
244
250 TMap<FName, TSharedPtr<VariablePropertyType>> ClassIntegers;
251
257 TMap<FName, TSharedPtr<VariablePropertyType>> ClassFloats;
258
264 TMap<FName, TSharedPtr<VariablePropertyType>> ClassBools;
265
271 TMap<FName, TSharedPtr<VariablePropertyType>> ClassFNames;
272
278 TMap<FName, TSharedPtr<VariablePropertyType>> ClassFTexts;
279};
static void SortDefault(TArray< FName > &OutArray)
Definition DlgHelper.h:452
static bool PredicateSortDialogueWeakPtrAlphabeticallyAscending(const TWeakObjectPtr< const UDlgDialogue > &First, const TWeakObjectPtr< const UDlgDialogue > &Second)
TSharedPtr< VariablePropertyType > AddDialogueToClassIntVariable(FName IntVariableName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
TSharedPtr< VariablePropertyType > AddDialogueToIntVariable(FName IntVariableName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetClassFloats() const
TSharedPtr< VariablePropertyType > AddDialogueToCondition(FName ConditionName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
TMap< FName, TSharedPtr< VariablePropertyType > > ClassIntegers
void AddDialogue(TWeakObjectPtr< const UDlgDialogue > Dialogue)
TSharedPtr< VariablePropertyType > AddDialogueToClassFTextVariable(FName FTextVariableName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetIntegers() const
std::enable_if< std::is_base_of< FDlgTreeViewVariableProperties, VariablePropertyType >::value >::type check
TMap< FName, TSharedPtr< VariablePropertyType > > ClassFTexts
TMap< FName, TSharedPtr< VariablePropertyType > > Integers
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetFNames() const
TSharedPtr< VariablePropertyType > AddDialogueToClassFNameVariable(FName FNameVariableName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
TSharedPtr< VariablePropertyType > AddDialogueToFloatVariable(FName FloatVariableName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetEvents() const
TSharedPtr< VariablePropertyType > AddDialogueToBoolVariable(FName BoolVariableName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
TSharedPtr< VariablePropertyType > AddDialogueToFNameVariable(FName FNameVariableName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetFloats() const
TSharedPtr< VariablePropertyType > AddDialogueToClassFloatVariable(FName FloatVariableName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetClassIntegers() const
FDlgTreeViewParticipantProperties(const TSet< TWeakObjectPtr< const UDlgDialogue > > &InDialogues)
TMap< FName, TSharedPtr< VariablePropertyType > > ClassFloats
TMap< UClass *, TSharedPtr< VariablePropertyType > > CustomEvents
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetBools() const
TSet< TWeakObjectPtr< const UDlgDialogue > > Dialogues
TSharedPtr< VariablePropertyType > AddDialogueToCustomEvent(UClass *EventClass, TWeakObjectPtr< const UDlgDialogue > Dialogue)
FDlgTreeViewParticipantProperties(const TSet< TWeakObjectPtr< const UDlgDialogue > > &&InDialogues)
TMap< FName, TSharedPtr< VariablePropertyType > > ClassBools
const TMap< UClass *, TSharedPtr< VariablePropertyType > > & GetCustomEvents() const
TMap< FName, TSharedPtr< VariablePropertyType > > Bools
TSharedPtr< VariablePropertyType > AddDialogueToVariable(TMap< KeyType, TSharedPtr< VariablePropertyType > > *VariableMap, KeyType VariableKeyValue, TWeakObjectPtr< const UDlgDialogue > Dialogue)
const TSet< TWeakObjectPtr< const UDlgDialogue > > & GetDialogues() const
TSharedPtr< VariablePropertyType > AddDialogueToClassBoolVariable(FName BoolVariableName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetConditions() const
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetClassBools() const
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetClassFNames() const
TMap< FName, TSharedPtr< VariablePropertyType > > Conditions
TMap< FName, TSharedPtr< VariablePropertyType > > ClassFNames
TMap< FName, TSharedPtr< VariablePropertyType > > FNames
TSharedPtr< VariablePropertyType > AddDialogueToEvent(FName EventName, TWeakObjectPtr< const UDlgDialogue > Dialogue)
TMap< FName, TSharedPtr< VariablePropertyType > > Events
TMap< FName, TSharedPtr< VariablePropertyType > > Floats
const TMap< FName, TSharedPtr< VariablePropertyType > > & GetClassFTexts() const