StructRedirects

StructRedirects

#Overview

name: StructRedirects

The value of this variable can be defined or overridden in .ini config files. 699 .ini config files referencing this setting variable.

It is referenced in 3 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of StructRedirects is to manage redirections for struct types in Unreal Engine 5. It is primarily used for handling changes in struct names or locations, allowing the engine to maintain compatibility with older code or assets that reference structures under their previous names or paths.

This setting variable is utilized by multiple Unreal Engine subsystems:

  1. The RigVM system, specifically within the RigVMDeveloper module, uses StructRedirects for converting reroute nodes to dispatch nodes in the animation rigging system.
  2. The Core Object system employs StructRedirects as part of its core redirection mechanism, which is crucial for maintaining backwards compatibility across engine versions.

The value of this variable is typically set in configuration files or through code initialization. In the CoreRedirects system, it’s initialized as part of the FCoreRedirects::Initialize function.

StructRedirects interacts with other redirection variables such as ObjectRedirects, ClassRedirects, EnumRedirects, FunctionRedirects, PropertyRedirects, and PackageRedirects. These collectively form a comprehensive redirection system in Unreal Engine.

Developers should be aware that:

  1. Changes to struct names or paths should be reflected in StructRedirects to ensure proper functionality of existing content.
  2. Incorrect or missing redirects can lead to broken references in projects, potentially causing compilation errors or runtime issues.

Best practices when using this variable include:

  1. Always update StructRedirects when renaming or moving struct definitions.
  2. Test thoroughly after adding new redirects to ensure all references are properly resolved.
  3. Document any changes to struct names or paths, including the corresponding redirects, for future reference.
  4. Be cautious when removing old redirects, as they may still be necessary for loading older content or projects.

#Setting Variables

#References In INI files

<Workspace>/Engine/Config/BaseEngine.ini:355, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:356, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:357, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:358, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:359, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:360, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:361, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:362, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:363, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:364, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:365, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:366, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:367, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:368, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:369, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:370, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:372, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:373, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:374, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:436, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:437, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:457, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:477, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:478, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:479, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:513, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:514, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:517, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:544, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:547, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:548, section: [CoreRedirects]


... omitting 669 locations ...

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Plugins/Runtime/RigVM/Source/RigVMDeveloper/Private/RigVMModel/RigVMController.cpp:18824

Scope (from outer to inner):

file
function     URigVMNode* URigVMController::ConvertRerouteNodeToDispatch

Source code excerpt:

	static const TMap<FString, FString> EmptyRedirects = {};
	
	static const TMap<FString, FString> StructRedirects = {
		{
			URigVMRerouteNode::ValueName,
			FRigVMDispatch_MakeStruct::StructName.ToString(),
		}};

	static const TMap<FString, FString> ElementsRedirects = {

#Loc: <Workspace>/Engine/Plugins/Runtime/RigVM/Source/RigVMDeveloper/Private/RigVMModel/RigVMController.cpp:18862

Scope (from outer to inner):

file
function     URigVMNode* URigVMController::ConvertRerouteNodeToDispatch

Source code excerpt:

	{
		InputRedirects = &ElementsRedirects;
		OutputRedirects = &StructRedirects;
		PinToResolveName = FRigVMDispatch_MakeStruct::StructName.ToString();
		NewNodeNameSuffix = TEXT("MakeStruct");
	}
	else if(InTemplateNotation == FRigVMDispatch_BreakStruct().GetTemplateNotation())
	{
		InputRedirects = &StructRedirects;
		OutputRedirects = &ElementsRedirects;
		PinToResolveName = FRigVMDispatch_MakeStruct::StructName.ToString();
		NewNodeNameSuffix = TEXT("BreakStruct");
	}
	else if(InTemplateNotation == FRigVMDispatch_ArrayMake().GetTemplateNotation())
	{

#Loc: <Workspace>/Engine/Source/Runtime/CoreUObject/Private/UObject/CoreRedirects.cpp:574

Scope (from outer to inner):

file
function     void FCoreRedirects::Initialize

Source code excerpt:

	ConfigKeyMap.Add(TEXT("ObjectRedirects"), ECoreRedirectFlags::Type_Object);
	ConfigKeyMap.Add(TEXT("ClassRedirects"), ECoreRedirectFlags::Type_Class);
	ConfigKeyMap.Add(TEXT("StructRedirects"), ECoreRedirectFlags::Type_Struct);
	ConfigKeyMap.Add(TEXT("EnumRedirects"), ECoreRedirectFlags::Type_Enum);
	ConfigKeyMap.Add(TEXT("FunctionRedirects"), ECoreRedirectFlags::Type_Function);
	ConfigKeyMap.Add(TEXT("PropertyRedirects"), ECoreRedirectFlags::Type_Property);
	ConfigKeyMap.Add(TEXT("PackageRedirects"), ECoreRedirectFlags::Type_Package);

	RegisterNativeRedirects();