A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
DlgSystemEditorModule.cpp
Go to the documentation of this file.
1// Copyright Csaba Molnar, Daniel Butum. All Rights Reserved.
3
5#include "Engine/BlueprintCore.h"
6#include "Templates/SharedPointer.h"
7#include "AssetRegistryModule.h"
8#include "Kismet2/BlueprintEditorUtils.h"
9#include "WorkspaceMenuStructureModule.h"
10#include "WorkspaceMenuStructure.h"
11#include "Widgets/Docking/SDockTab.h"
12#include "Framework/MultiBox/MultiBoxExtender.h"
13#include "LevelEditor.h"
14#include "GenericPlatform/GenericPlatformMisc.h"
15#include "Editor.h"
16#include "Framework/MultiBox/MultiBoxBuilder.h"
17#include "Kismet2/KismetEditorUtilities.h"
18#include "K2Node_Event.h"
19
20
24#include "DialogueCommands.h"
25#include "DlgConstants.h"
37#include "DlgManager.h"
38#include "IDlgSystemModule.h"
39
40#include "IO/DlgConfigWriter.h"
41#include "IO/DlgConfigParser.h"
42#include "Logging/DlgLogger.h"
43
44#define LOCTEXT_NAMESPACE "DlgSystemEditor"
45
47DEFINE_LOG_CATEGORY(LogDlgSystemEditor)
49
50// Just some constants
51static const FName DIALOGUE_BROWSER_TAB_ID("DialogueBrowser");
52
53FDlgSystemEditorModule::FDlgSystemEditorModule() : DlgSystemAssetCategoryBit(EAssetTypeCategories::UI)
54{
55}
56
58{
59#if ENGINE_MINOR_VERSION >= 24
60 // Fix blueprint Nativization https://gitlab.com/NotYetGames/DlgSystem/-/issues/28
61 const FString LongName = FPackageName::ConvertToLongScriptPackageName(TEXT("DlgSystemEditor"));
62 if (UPackage* Package = Cast<UPackage>(StaticFindObjectFast(UPackage::StaticClass(), nullptr, *LongName, false, false)))
63 {
64 Package->SetPackageFlags(PKG_EditorOnly);
65 }
66#endif
67
68 UE_LOG(LogDlgSystemEditor, Log, TEXT("DlgSystemEditorModule: StartupModule"));
69 OnPostEngineInitHandle = FCoreDelegates::OnPostEngineInit.AddRaw(this, &Self::HandleOnPostEngineInit);
70 OnBeginPIEHandle = FEditorDelegates::BeginPIE.AddRaw(this, &Self::HandleOnBeginPIE);
71 OnPostPIEStartedHandle = FEditorDelegates::PostPIEStarted.AddRaw(this, &Self::HandleOnPostPIEStarted);
72 OnEndPIEHandle = FEditorDelegates::EndPIE.AddRaw(this, &Self::HandleOnEndPIEHandle);
73
74 // Listen for when the asset registry has finished discovering files
75 IAssetRegistry& AssetRegistry = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(NAME_MODULE_AssetRegistry).Get();
76
77 // Register Blueprint events
78 FKismetEditorUtilities::RegisterOnBlueprintCreatedCallback(
79 this,
80 UDlgConditionCustom::StaticClass(),
81 FKismetEditorUtilities::FOnBlueprintCreated::CreateRaw(this, &Self::HandleNewCustomConditionBlueprintCreated)
82 );
83 FKismetEditorUtilities::RegisterOnBlueprintCreatedCallback(
84 this,
85 UDlgTextArgumentCustom::StaticClass(),
86 FKismetEditorUtilities::FOnBlueprintCreated::CreateRaw(this, &Self::HandleNewCustomTextArgumentBlueprintCreated)
87 );
88 FKismetEditorUtilities::RegisterOnBlueprintCreatedCallback(
89 this,
90 UDlgEventCustom::StaticClass(),
91 FKismetEditorUtilities::FOnBlueprintCreated::CreateRaw(this, &Self::HandleNewCustomEventBlueprintCreated)
92 );
93 FKismetEditorUtilities::RegisterOnBlueprintCreatedCallback(
94 this,
95 UDlgNodeData::StaticClass(),
96 FKismetEditorUtilities::FOnBlueprintCreated::CreateRaw(this, &Self::HandleNewNodeDataBlueprintCreated)
97 );
98
99 // Register slate style overrides
101
102 // Register commands
103 FDialogueCommands::Register();
104
105 // Register asset types, add the right click submenu
106 IAssetTools& AssetTools = FModuleManager::LoadModuleChecked<FAssetToolsModule>(NAME_MODULE_AssetTools).Get();
107
108 // make the DlgSystem be displayed in the filters menu and in the create new menu
110 {
111 auto Action = MakeShared<FAssetTypeActions_DlgDialogue>(DlgSystemAssetCategoryBit);
112 AssetTools.RegisterAssetTypeActions(Action);
113 RegisteredAssetTypeActions.Add(Action);
114 }
115 {
116 auto Action = MakeShared<FAssetTypeActions_DlgEventCustom>(DlgSystemAssetCategoryBit);
117 AssetTools.RegisterAssetTypeActions(Action);
118 RegisteredAssetTypeActions.Add(Action);
119 }
120 {
121 auto Action = MakeShared<FAssetTypeActions_DlgConditionCustom>(DlgSystemAssetCategoryBit);
122 AssetTools.RegisterAssetTypeActions(Action);
123 RegisteredAssetTypeActions.Add(Action);
124 }
125 {
126 auto Action = MakeShared<FAssetTypeActions_DlgTextArgumentCustom>(DlgSystemAssetCategoryBit);
127 AssetTools.RegisterAssetTypeActions(Action);
128 RegisteredAssetTypeActions.Add(Action);
129 }
130 {
131 auto Action = MakeShared<FAssetTypeActions_DlgNodeData>(DlgSystemAssetCategoryBit);
132 AssetTools.RegisterAssetTypeActions(Action);
133 RegisteredAssetTypeActions.Add(Action);
134 }
135 // {
136 // auto Action = MakeShared<FAssetTypeActions_DlgParticipants>(DlgSystemAssetCategoryBit);
137 // AssetTools.RegisterAssetTypeActions(Action);
138 // RegisteredAssetTypeActions.Add(Action);
139 // }
140
141 // Register the details panel customizations
142 {
143 FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked<FPropertyEditorModule>(NAME_MODULE_PropertyEditor);
144
145 // For classes:
146 // NOTE Order of these two arrays must match
147 TArray<FOnGetDetailCustomizationInstance> CustomClassLayouts = {
148 FOnGetDetailCustomizationInstance::CreateStatic(&FDialogue_Details::MakeInstance),
149 FOnGetDetailCustomizationInstance::CreateStatic(&FDialogueGraphNode_Details::MakeInstance),
150 FOnGetDetailCustomizationInstance::CreateStatic(&FDialogueNode_Details::MakeInstance)
151 };
153 UDlgDialogue::StaticClass()->GetFName(),
154 UDialogueGraphNode::StaticClass()->GetFName(),
155 UDlgNode::StaticClass()->GetFName()
156 };
157 for (int32 i = 0; i < RegisteredCustomClassLayouts.Num(); i++)
158 {
159 PropertyModule.RegisterCustomClassLayout(RegisteredCustomClassLayouts[i], CustomClassLayouts[i]);
160 }
161
162 // For structs:
163 // NOTE Order of these two arrays must match
164 TArray<FOnGetPropertyTypeCustomizationInstance> CustomPropertyTypeLayouts = {
165 FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FDialogueEdge_Details::MakeInstance),
166 FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FDialogueCondition_Details::MakeInstance),
167 FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FDialogueEvent_Details::MakeInstance),
168 FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FDialogueSpeechSequenceEntry_Details::MakeInstance),
169 FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FDialogueTextArgument_Details::MakeInstance)
170 };
172 FDlgEdge::StaticStruct()->GetFName(),
173 FDlgCondition::StaticStruct()->GetFName(),
174 FDlgEvent::StaticStruct()->GetFName(),
175 FDlgSpeechSequenceEntry::StaticStruct()->GetFName(),
176 FDlgTextArgument::StaticStruct()->GetFName()
177 };
178 for (int32 i = 0; i < RegisteredCustomPropertyTypeLayout.Num(); i++)
179 {
180 PropertyModule.RegisterCustomPropertyTypeLayout(RegisteredCustomPropertyTypeLayout[i], CustomPropertyTypeLayouts[i]);
181 }
182
183 PropertyModule.NotifyCustomizationModuleChanged();
184 }
185
186 // Register the thumbnail renderers
187// UThumbnailManager::Get().RegisterCustomRenderer(UDlgDialogue::StaticClass(), UDlgDialogueThumbnailRenderer::StaticClass());
188
189 // Create factories
190 DialogueGraphNodeFactory = MakeShared<FDialogueGraphNodeFactory>();
191 FEdGraphUtilities::RegisterVisualNodeFactory(DialogueGraphNodeFactory);
192
193 DialogueGraphPinFactory = MakeShared<FDialogueGraphPinFactory>();
194 FEdGraphUtilities::RegisterVisualPinFactory(DialogueGraphPinFactory);
195
196 // Bind Editor commands
197 LevelMenuEditorCommands = MakeShared<FUICommandList>();
200
201 // Content Browser extension
203
204 // Extend menu/toolbar
205 ExtendMenu();
206}
207
209{
210 const FModuleManager& ModuleManger = FModuleManager::Get();
211 if (DialogueGraphPinFactory.IsValid())
212 {
213 FEdGraphUtilities::UnregisterVisualPinFactory(DialogueGraphPinFactory);
214 }
215
216 if (DialogueGraphNodeFactory.IsValid())
217 {
218 FEdGraphUtilities::UnregisterVisualNodeFactory(DialogueGraphNodeFactory);
219 }
220
221 if (UObjectInitialized())
222 {
223 // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
224 // we call this function before unloading the module.
226 }
227
228 // Unregister the custom details panel stuff
229 if (ModuleManger.IsModuleLoaded(NAME_MODULE_PropertyEditor))
230 {
231 FPropertyEditorModule& PropertyModule = FModuleManager::GetModuleChecked<FPropertyEditorModule>(NAME_MODULE_PropertyEditor);
232 for (int32 i = 0; i < RegisteredCustomClassLayouts.Num(); i++)
233 {
234 PropertyModule.UnregisterCustomClassLayout(RegisteredCustomClassLayouts[i]);
235 }
236
237 for (int32 i = 0; i < RegisteredCustomPropertyTypeLayout.Num(); i++)
238 {
239 PropertyModule.UnregisterCustomPropertyTypeLayout(RegisteredCustomPropertyTypeLayout[i]);
240 }
241 }
244
245 // Unregister all the asset types that we registered
246 if (ModuleManger.IsModuleLoaded(NAME_MODULE_AssetTools))
247 {
248 IAssetTools& AssetTools = FModuleManager::GetModuleChecked<FAssetToolsModule>(NAME_MODULE_AssetTools).Get();
249 for (auto TypeAction : RegisteredAssetTypeActions)
250 {
251 AssetTools.UnregisterAssetTypeActions(TypeAction.ToSharedRef());
252 }
253 }
255
256 // unregister commands
257 FDialogueCommands::Unregister();
258
259 // Unregister slate style overrides
261
262 // Unregister the Dialogue Browser
263 FGlobalTabmanager::Get()->UnregisterNomadTabSpawner(DIALOGUE_BROWSER_TAB_ID);
264
265 // Unregister the Dialogue Search
266 FDialogueSearchManager::Get()->DisableGlobalFindResults();
267
268 if (OnBeginPIEHandle.IsValid())
269 {
270 FEditorDelegates::BeginPIE.Remove(OnBeginPIEHandle);
271 }
272 if (OnPostPIEStartedHandle.IsValid())
273 {
274 FEditorDelegates::PostPIEStarted.Remove(OnPostPIEStartedHandle);
275 }
276 if (OnEndPIEHandle.IsValid())
277 {
278 FEditorDelegates::EndPIE.Remove(OnEndPIEHandle);
279 }
280 if (OnPostEngineInitHandle.IsValid())
281 {
282 FCoreDelegates::OnPostEngineInit.Remove(OnPostEngineInitHandle);
283 }
284
285 UE_LOG(LogDlgSystemEditor, Log, TEXT("DlgSystemEditorModule: ShutdownModule"));
286}
287
289{
290 const EAppReturnType::Type Response = FPlatformMisc::MessageBoxExt(EAppMsgType::YesNo,
291 TEXT("Save all Dialogue assets/files? This will save both the .uasset and the text files depending on the TextFormat from the Dialogue Settings."),
292 TEXT("Save Dialogues?")
293 );
294 if (Response == EAppReturnType::No)
295 {
296 return;
297 }
298
300 {
301 UE_LOG(LogDlgSystemEditor, Error, TEXT("Failed To save all Dialogues. An error occurred."));
302 }
303}
304
306{
307 const TSet<FString> AllFileExtensions = GetDefault<UDlgSystemSettings>()->GetAllTextFileExtensions();
308 const FString StringAllFileExtensions = FString::Join(AllFileExtensions, TEXT(","));
309 const FString Text = FString::Printf(
310 TEXT("Delete all Dialogues text files? Delete all dialogues text files on the disk with the following extensions: %s"),
311 *StringAllFileExtensions
312 );
313
314 const EAppReturnType::Type Response = FPlatformMisc::MessageBoxExt(EAppMsgType::YesNo, *Text, TEXT("Delete All Dialogues text files?"));
315 if (Response == EAppReturnType::No)
316 {
317 return;
318 }
319
321 {
322 UE_LOG(LogDlgSystemEditor, Error, TEXT("Failed To delete all Dialogues text files. An error occurred."));
323 }
324}
325
326
327
329{
331 UE_LOG(LogDlgSystemEditor, Log, TEXT("DlgSystemEditorModule::HandleOnPostEngineInit"));
332}
333
335{
336}
337
339{
340 const UDlgSystemSettings* Settings = GetDefault<UDlgSystemSettings>();
341 if (!Settings)
342 {
343 return;
344 }
345
347 {
348 FDlgLogger::Get().Debugf(TEXT("BeginPIE(bIsSimulating = %d). Clearing Dialogue History"), bIsSimulating);
350 }
351
353 {
354 FDlgLogger::Get().Debugf(TEXT("BeginPIE(bIsSimulating = %d). Registering Console commands"), bIsSimulating);
356 }
357}
358
360{
361 const UDlgSystemSettings* Settings = GetDefault<UDlgSystemSettings>();
362 if (!Settings)
363 {
364 return;
365 }
366
368 {
369 FDlgLogger::Get().Debugf(TEXT("EndPIE(bIsSimulating = %d). Unregistering Console commands"), bIsSimulating);
371 }
372}
373
375{
376 if (!Blueprint || Blueprint->BlueprintType != BPTYPE_Normal)
377 {
378 return;
379 }
380
381 Blueprint->bForceFullEditor = true;
383 Blueprint,
384 GET_FUNCTION_NAME_CHECKED(UDlgConditionCustom, IsConditionMet),
385 UDlgConditionCustom::StaticClass()
386 );
387 if (FunctionGraph)
388 {
389 Blueprint->LastEditedDocuments.Add(FunctionGraph);
390 }
391}
392
394{
395 if (!Blueprint || Blueprint->BlueprintType != BPTYPE_Normal)
396 {
397 return;
398 }
399
400 Blueprint->bForceFullEditor = true;
402 Blueprint,
403 GET_FUNCTION_NAME_CHECKED(UDlgTextArgumentCustom, GetText),
404 UDlgTextArgumentCustom::StaticClass()
405 );
406 if (FunctionGraph)
407 {
408 Blueprint->LastEditedDocuments.Add(FunctionGraph);
409 }
410}
411
413{
414 if (!Blueprint || Blueprint->BlueprintType != BPTYPE_Normal)
415 {
416 return;
417 }
418
419 Blueprint->bForceFullEditor = true;
420 UK2Node_Event* EventNode = FDialogueEditorUtilities::BlueprintGetOrAddEvent(
421 Blueprint,
422 GET_FUNCTION_NAME_CHECKED(UDlgEventCustom, EnterEvent),
423 UDlgEventCustom::StaticClass()
424 );
425 if (EventNode)
426 {
427 Blueprint->LastEditedDocuments.Add(EventNode->GetGraph());
428 }
429}
430
432{
433 if (!Blueprint || Blueprint->BlueprintType != BPTYPE_Normal)
434 {
435 return;
436 }
437
438 FDialogueEditorUtilities::BlueprintAddComment(Blueprint, TEXT("Add you own variables to see them in the Dialogue Editor"));
439}
440
442{
443 // Running in game mode (standalone game) or dedicated server (-server) exit as we can't get the LevelEditorModule.
444 if (IsRunningGame() || IsRunningCommandlet() || IsRunningDedicatedServer())
445 {
446 return;
447 }
448
449 // File and Help Menu Extenders
450 {
451 const TSharedRef<FExtender> FileMenuExtender = CreateFileMenuExtender(LevelMenuEditorCommands.ToSharedRef());
452 const TSharedRef<FExtender> HelpMenuExtender = CreateHelpMenuExtender(LevelMenuEditorCommands.ToSharedRef());
453
454 // Add to the level editor
455 FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>(NAME_MODULE_LevelEditor);
456 LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(FileMenuExtender);
457 LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(HelpMenuExtender);
458 }
459
460 // Window -> Dialogue search, Dialogue Browse, Dialogue Data Display
461 {
462 ToolsDialogueCategory = WorkspaceMenu::GetMenuStructure().GetStructureRoot()
463 ->AddGroup(
464 LOCTEXT("WorkspaceMenu_DialogueCategory", "Dialogue" ),
465 FSlateIcon(
468 ),
469 false
470 );
471
472 // Register the Dialogue Overview Browser
473 FGlobalTabmanager::Get()->RegisterNomadTabSpawner(DIALOGUE_BROWSER_TAB_ID,
474 FOnSpawnTab::CreateLambda([this](const FSpawnTabArgs& Args) -> TSharedRef<SDockTab>
475 {
476 const TSharedRef<SDockTab> DockTab = SNew(SDockTab)
477 .TabRole(ETabRole::NomadTab)
478 [
479 SNew(SDialogueBrowser)
480 ];
481 return DockTab;
482 }))
483 .SetDisplayName(LOCTEXT("DialogueBrowserTabTitle", "Dialogue Browser"))
484 .SetTooltipText(LOCTEXT("DialogueBrowserTooltipText", "Open the Dialogue Overview Browser tab."))
486 .SetGroup(ToolsDialogueCategory.ToSharedRef());
487
488 // Register the Dialogue Search
490
491 // Register the Dialogue Data Display
492 FTabSpawnerEntry* TabDialogueDataDisplay = IDlgSystemModule::Get().GetDialogueDataDisplaySpawnEntry();
493 TabDialogueDataDisplay->SetGroup(ToolsDialogueCategory.ToSharedRef());
495 }
496}
497
499 TSharedRef<FUICommandList> Commands,
500 const TArray<TSharedPtr<FUICommandInfo>>& AdditionalMenuEntries
501)
502{
503 // Fill after the File->FileLoadAndSave
504 TSharedRef<FExtender> FileMenuExtender(new FExtender);
505 FileMenuExtender->AddMenuExtension(
506 "FileLoadAndSave",
507 EExtensionHook::After,
508 Commands,
509 FMenuExtensionDelegate::CreateLambda([AdditionalMenuEntries](FMenuBuilder& MenuBuilder)
510 {
511 // Save Dialogues
512 MenuBuilder.BeginSection("Dialogue", LOCTEXT("DialogueMenuKeyCategory", "Dialogue"));
513 {
514 MenuBuilder.AddMenuEntry(FDialogueCommands::Get().SaveAllDialogues);
515 MenuBuilder.AddMenuEntry(FDialogueCommands::Get().DeleteAllDialoguesTextFiles);
516 MenuBuilder.AddMenuSeparator();
517 for (auto& MenuEntry : AdditionalMenuEntries)
518 {
519 MenuBuilder.AddMenuEntry(MenuEntry);
520 }
521 }
522 MenuBuilder.EndSection();
523 })
524 );
525
526 return FileMenuExtender;
527}
528
529TSharedRef<FExtender> FDlgSystemEditorModule::CreateHelpMenuExtender(TSharedRef<FUICommandList> Commands)
530{
531 // Fill before the Help->BugReporting
532 // NOTE: Don't use HelpBrowse as that does not exist in later engine version
533 // https://gitlab.com/NotYetGames/DlgSystem/-/issues/36
534 TSharedRef<FExtender> HelpMenuExtender(new FExtender);
535 HelpMenuExtender->AddMenuExtension(
536 "BugReporting",
537 EExtensionHook::Before,
538 Commands,
539 FMenuExtensionDelegate::CreateLambda([](FMenuBuilder& MenuBuilder)
540 {
541 // Save Dialogues
542 MenuBuilder.BeginSection("Dialogue", LOCTEXT("DialogueMenuKeyCategory", "Dialogue"));
543 {
544 MenuBuilder.AddMenuEntry(FDialogueCommands::Get().OpenNotYetPlugins);
545 MenuBuilder.AddMenuEntry(FDialogueCommands::Get().OpenMarketplace);
546 MenuBuilder.AddMenuEntry(FDialogueCommands::Get().OpenWiki);
547 MenuBuilder.AddMenuEntry(FDialogueCommands::Get().OpenDiscord);
548 MenuBuilder.AddMenuEntry(FDialogueCommands::Get().OpenForum);
549 }
550 MenuBuilder.EndSection();
551 })
552 );
553
554 return HelpMenuExtender;
555}
556
557void FDlgSystemEditorModule::MapActionsForFileMenuExtender(TSharedRef<FUICommandList> Commands)
558{
559 Commands->MapAction(
560 FDialogueCommands::Get().SaveAllDialogues,
561 FExecuteAction::CreateStatic(&Self::HandleOnSaveAllDialogues)
562 );
563 Commands->MapAction(
564 FDialogueCommands::Get().DeleteAllDialoguesTextFiles,
565 FExecuteAction::CreateStatic(&Self::HandleOnDeleteAllDialoguesTextFiles)
566 );
567}
568
569void FDlgSystemEditorModule::MapActionsForHelpMenuExtender(TSharedRef<FUICommandList> Commands)
570{
571 const UDlgSystemSettings& Settings = *GetDefault<UDlgSystemSettings>();
572 Commands->MapAction(
573 FDialogueCommands::Get().OpenNotYetPlugins,
574 FExecuteAction::CreateLambda([&Settings]()
575 {
576 FPlatformProcess::LaunchURL(*Settings.URLNotYetPlugins, nullptr, nullptr );
577 })
578 );
579 Commands->MapAction(
580 FDialogueCommands::Get().OpenMarketplace,
581 FExecuteAction::CreateLambda([&Settings]()
582 {
583 FPlatformProcess::LaunchURL(*Settings.URLMarketplace, nullptr, nullptr );
584 })
585 );
586 Commands->MapAction(
587 FDialogueCommands::Get().OpenDiscord,
588 FExecuteAction::CreateLambda([&Settings]()
589 {
590 FPlatformProcess::LaunchURL(*Settings.URLDiscord, nullptr, nullptr );
591 })
592 );
593 Commands->MapAction(
594 FDialogueCommands::Get().OpenForum,
595 FExecuteAction::CreateLambda([&Settings]()
596 {
597 FPlatformProcess::LaunchURL(*Settings.URLForum, nullptr, nullptr );
598 })
599 );
600 Commands->MapAction(
601 FDialogueCommands::Get().OpenWiki,
602 FExecuteAction::CreateLambda([&Settings]()
603 {
604 FPlatformProcess::LaunchURL(*Settings.URLWiki, nullptr, nullptr );
605 })
606 );
607}
608
609#undef LOCTEXT_NAMESPACE
610
static const FName DIALOGUE_SYSTEM_MENU_CATEGORY_KEY(TEXT("Dialogue System"))
static const FName NAME_MODULE_AssetTools(TEXT("AssetTools"))
static const FName NAME_MODULE_LevelEditor(TEXT("LevelEditor"))
static const FName NAME_MODULE_AssetRegistry(TEXT("AssetRegistry"))
static const FText DIALOGUE_SYSTEM_MENU_CATEGORY_KEY_TEXT(NSLOCTEXT("DlgSystemEditor", "DlgSystemAssetCategory", "Dialogue System"))
static const FName NAME_MODULE_PropertyEditor(TEXT("PropertyEditor"))
static const FName DIALOGUE_BROWSER_TAB_ID("DialogueBrowser")
IMPLEMENT_MODULE(FOpenXRExpansionEditorModule, OpenXRExpansionEditor)
DEFINE_LOG_CATEGORY(LogVaRest)
static TSharedRef< IDetailCustomization > MakeInstance()
static TSharedRef< IPropertyTypeCustomization > MakeInstance()
static TSharedRef< IPropertyTypeCustomization > MakeInstance()
static UK2Node_Event * BlueprintGetOrAddEvent(UBlueprint *Blueprint, FName EventName, UClass *EventClassSignature)
static UEdGraphNode_Comment * BlueprintAddComment(UBlueprint *Blueprint, const FString &CommentString, FVector2D Location=FVector2D::ZeroVector)
static UEdGraph * BlueprintGetOrAddFunction(UBlueprint *Blueprint, FName FunctionName, UClass *FunctionClassSignature)
static TSharedRef< IPropertyTypeCustomization > MakeInstance()
static TSharedRef< IDetailCustomization > MakeInstance()
static TSharedRef< IDetailCustomization > MakeInstance()
static TSharedRef< IPropertyTypeCustomization > MakeInstance()
static FName GetStyleSetName()
static void Initialize()
static const FName PROPERTY_DialogueBrowser_TabIcon
static const FName PROPERTY_DialogueDataDisplay_TabIcon
static void Shutdown()
static const FName PROPERTY_DlgDialogueClassIcon
static TSharedRef< IPropertyTypeCustomization > MakeInstance()
static FDlgLogger & Get()
Definition DlgLogger.h:24
static TSharedRef< FExtender > CreateHelpMenuExtender(TSharedRef< FUICommandList > Commands)
EAssetTypeCategories::Type DlgSystemAssetCategoryBit
TSharedPtr< FUICommandList > LevelMenuEditorCommands
void HandleOnEndPIEHandle(bool bIsSimulating)
static void HandleOnDeleteAllDialoguesTextFiles()
TSharedPtr< FWorkspaceItem > ToolsDialogueCategory
static void MapActionsForFileMenuExtender(TSharedRef< FUICommandList > Commands)
FDelegateHandle OnPostEngineInitHandle
static void MapActionsForHelpMenuExtender(TSharedRef< FUICommandList > Commands)
void HandleOnPostPIEStarted(bool bIsSimulating)
TArray< FName > RegisteredCustomClassLayouts
TArray< TSharedPtr< IAssetTypeActions > > RegisteredAssetTypeActions
void HandleNewCustomConditionBlueprintCreated(UBlueprint *Blueprint)
FDelegateHandle OnPostPIEStartedHandle
void HandleNewNodeDataBlueprintCreated(UBlueprint *Blueprint)
TSharedPtr< FGraphPanelPinFactory > DialogueGraphPinFactory
void HandleNewCustomTextArgumentBlueprintCreated(UBlueprint *Blueprint)
static TSharedRef< FExtender > CreateFileMenuExtender(TSharedRef< FUICommandList > Commands, const TArray< TSharedPtr< FUICommandInfo > > &AdditionalMenuEntries={})
TSharedPtr< FGraphPanelNodeFactory > DialogueGraphNodeFactory
void HandleOnBeginPIE(bool bIsSimulating)
void HandleNewCustomEventBlueprintCreated(UBlueprint *Blueprint)
TArray< FName > RegisteredCustomPropertyTypeLayout
static IDlgSystemModule & Get()
virtual FTabSpawnerEntry * GetDialogueDataDisplaySpawnEntry()=0
void Debugf(const FmtType &Fmt, Types... Args)
Definition INYLogger.h:314
UCLASS(Blueprintable, BlueprintType, Abstract, EditInlineNew)
UCLASS(Blueprintable, BlueprintType, Abstract, EditInlineNew)
static bool RegisterDialogueConsoleCommands()
UFUNCTION(BlueprintCallable, Category = "Dialogue|Console")
static void ClearDialogueHistory()
UFUNCTION(BlueprintCallable, Category = "Dialogue|Memory")
static bool UnregisterDialogueConsoleCommands()
UFUNCTION(BlueprintCallable, Category = "Dialogue|Console")
UCLASS(Config = Engine, DefaultConfig, meta = (DisplayName = "Dialogue System Settings"))
bool bClearDialogueHistoryAutomatically
UPROPERTY(Category = "Runtime", Config, EditAnywhere)
bool bRegisterDialogueConsoleCommandsAutomatically
UPROPERTY(Category = "Runtime", Config, EditAnywhere)
UCLASS(Blueprintable, BlueprintType, Abstract, EditInlineNew)