Change summary:
- Moved base definition of UK2Node::HasExternalDependencies() up one level to UEdGraphNode (to avoid blind casts in a context where we may not necessarily have a UK2Node subtype).
- Updated subtype headers that override HasExternalDependencies() to relocate the declaration into the class declaration's 'UEdGraphNode overrides' section (for clarity).
- Reverted previous UBlueprintNodeSpawner::ImportTarget solution in favor of using node dependencies; this allows auto-import actions to scale more easily to all existing node subtypes and avoids data duplication.
- Modified SBlueprintActionMenu::OnActionSelected() to utilize the new method for determining which namespace(s) to auto-import after executing a node spawner action in response to a context menu item selection (UE-146803).
- Reverted FBlueprintNamespaceUtilities::GetPropertyValueNamespaces() back to its original 5.0 signature so that it uses a TSet<FString> for the output rather than a TArray<FString>; this fits in better with input to other APIs.
- Renamed FBlueprintEditor::FImportNamespaceParameters to FImportNamespaceExParameters (for clarity).
- Changed the 'FBlueprintEditor::FImportNamespaceParameters::AdditionalNamespaces' member to a TSet<FString> containing *all* namespaces to import rather than limiting to only additional ones.
- Reverted FBlueprintEditor::ImportNamespace() back to its original 5.0 signature and added/implemented FBlueprintEditor::ImportNamespaceEx() as the "extended" version that allows for batched imports and future customizations.
- Revised existing FBlueprintEditor::ImportNamespace() call sites to utilize and/or conform to the extended ImportNamespaceEx() API where appropriate.
#jira UE-146803
#rb Benjamin.Fox
#preflight 623cf3a433709ff50128e8d4
[CL 19505118 by Phillip Kavan in ue5-main branch]
Change summary:
- Added UBlueprintNodeSpawner::ImportTarget to store/serialize an object reference to allow for resolving action namespace scope on selection.
- Modified UBlueprintFieldNodeSpawner::SetField() to determine and store the import target object reference for a field-based node spawner type.
- Modified FBlueprintNodeSpawnerFactory::MakeMacroNodeSpawner() to determine and store the import target object for a macro instance node spawner.
- Modified SBlueprintActionMenu::OnActionSelected() to auto-import the associated namespace after selecting an action item containing a valid node spawner.
#jira UE-146803
#rb Benjamin.Fox
#preflight 623b56df9304d833f40d422a
[CL 19485593 by Phillip Kavan in ue5-main branch]
The BP compiler erroneously reports that python nodes might be missing implicit casts. However, UK2Node_ExecutePythonScript nodes handle argument slightly differently than conventional function nodes. The pins don't actually correspond to actual arguments on ExecutePythonScript. Instead, they more or less serve as references to their linked inputs, which ExecutePythonScript will pop from the stack and perform a direct conversion to a Python type. As a result, there's nothing to cast, and we can safely remove the entries from the ImplicitCastMap on the current content.
#rb jamie.dale
#jira UE-146778
#preflight 623b4fbeca34ffd7bf7db3e8
[CL 19482561 by dave jones2 in ue5-main branch]
Also added an ensure to make sure that the function doesn't crash when evaluating pin changes. This wasn't happening, but it is preventative just in case.
#jira UE-146547
#rb phillip.kavan
#preflight 6239e3e0ec68595f3b85d4f5
#rnx
[CL 19467076 by ben hoffman in ue5-main branch]
Change summary:
- Moved base "managed list" customization out into its own class so that it can be shared with editor/project settings customization.
- Refactored Blueprint global options (i.e. Class Settings) details customization to utilize the new "managed list" base class.
- Removed filter text as a customizable managed list display option and redefined it to be more consistent with property editor nodes.
- Fixed the "Imports" display in Class Settings to no longer list global imports in the non-default section.
- Added a new details customization for UBlueprintEditorSettings.
- Added a customized editor for the 'NamespacesToAlwaysInclude' property for both local user settings and shared project settings.
- Moved the "Add" button for imports and interfaces to be on the same line as the header row (eliminates some wasted space in the details view).
- Fixed up global import property display names and tooltips to be more descriptive.
- Fixed an issue that prevented reselection of the previous namespace setting in the Blueprint namespace entry combo box after clearing it.
- Fixed the incorrect vertical alignment of import/interface item rows.
#jira UE-143552, UE-133369, UE-136904, UE-142557
#rb Ben.Hoffman
#preflight 622ba26c46679d56c31dddda
[CL 19365260 by Phillip Kavan in ue5-main branch]
We were only considering the first linked pin when iterating over the connections for the input pins. An input pin can be connected to multiple internal nodes, so we need to process those. For example, this problem would manifest if the expression were (x+x), and we connected the x input to a single precision float.
#jira UE-145269
#preflight 622a6bfe031cac3623f01924
#rb Ben.Hoffman
#lockdown
#ROBOMERGE-AUTHOR: dave.jones2
#ROBOMERGE-SOURCE: CL 19342336 in //UE5/Release-5.0/... via CL 19349226
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v926-19321884)
[CL 19350172 by dave jones2 in ue5-main branch]
We need to ensure that literal default values are interpreted as float strings instead of doubles. We've observed that some older Blueprint content might be using exact comparisons with floats. While this is generally frowned upon, some game logic may depend on this behavior. These issues can be difficult to debug if we covertly interpret literal float data as doubles.
As for the fix, anytime we serialize old pin data that represented a single precision float, we set a flag on the type that ensures we parse its default value string as a single precision float. This flag is also serialized, and isn't changed until the user actually changes the current value to something different.
#jira UE-145026
#preflight 622a416b03062eac59dae469
#rb phillip.kavan
#lockdown
#ROBOMERGE-AUTHOR: dave.jones2
#ROBOMERGE-SOURCE: CL 19339612 in //UE5/Release-5.0/... via CL 19348994
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v926-19321884)
[CL 19349461 by dave jones2 in ue5-main branch]
Change summary:
- Added a code path for removing a namespace from the BP editor context.
- Consolidated namespace helper instances into a single BP editor context.
- Extended the FBlueprintEditor::ImportNamespace() API to accept additional options and a post-import callback.
- Refactored the auto-import code path to fix issues with reassignment to/from an imported namespace.
- Decoupled SSubobjectBlueprintEditor from a namespace-aware callback in favor of a generalized "add" callback.
- Linked the CVar for inheriting parent BP imports to a transient BP setting (experimental/not user-facing).
- Consolidated code to gather global/default imports into a utility API so that namespace sets are consistent.
- Modified "Imports" view to include a "default imports" section (similar to inherited interfaces) - these are not removable.
- Moved "Inherited Interfaces" section to be sorted above the "Implemented Interfaces" section for consistency.
- Fixed SBlueprintNamespaceEntry to query for the current text rather than only setting it at construction time.
#jira UE-133288
#rb Ben.Hoffman
#preflight 621ff4b337049be51738bafe
[CL 19236263 by Phillip Kavan in ue5-main branch]
The KismetMathLibrary changes made in CL 19159126 revealed a problem with type promotions: it's too strict when it comes to finding matching functions. This is currently preventing a BP class from compiling, which is blocking Dev-EngineMerge.
We need to modify ArePinTypesEquivalent to be less strict about real number comparisons, which permits using single precision float pins with double precision math functions.
#jira UE-144351
#preflight 621ec6c331454c90cce33859
#rb Marc.Audy
#lockdown
#ROBOMERGE-AUTHOR: dave.jones2
#ROBOMERGE-SOURCE: CL 19224349 via CL 19226280 via CL 19226464 via CL 19226631 via CL 19226810
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)
[CL 19230290 by dave jones2 in ue5-main branch]
Two issues were discovered:
1. UKismetSystemLibrary::SetFloatPropertyByName is no longer used since it's been replaced by SetDoublePropertyByName. As a result, SetDoublePropertyByName would fail if the property was actually a float, which can happen if it's a native class. In this case, we should check for a FFloatProperty as a fallback.
2. Deprecation of float<->string converion functions in CL 19083449 introduced a regression: we can no longer use autocasts when the type is a single-precision float. In this case, we should search for autocast functions that take a double instead.
#jira UE-143681
#preflight 62181516783beeaf8ae8db8b
#rb andy.davidson
#lockdown julien.marchand
#ROBOMERGE-AUTHOR: dave.jones2
#ROBOMERGE-SOURCE: CL 19157869 in //UE5/Release-5.0/... via CL 19159851
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)
[CL 19161495 by dave jones2 in ue5-main branch]
Previously, vector types were using the single precision variants for their make&break functions. As a result, the split vectors would be floats, which led to precision loss. Going forward, we want to ensure that we use double precision variants of these functions. The single precision functions no longer serve any use, and will be deprecated.
Additionally, FVector_NetQuantize and friends can go back to using the default FVector make&break functions. We don't need to deprecate these functions since they only existed in 5.0. However, some content has already been saved with these functions, so we need to still setup redirects in BaseEngine.ini.
Finally, AssertMacros.h was missing several variants of GET_FUNCTION_NAME_CHECKED_NParams. Without these, GET_FUNCTION_NAME_CHECKED would fail to compile since KismetMathLibrary would have overloads of MakeVector and BreakVector.
#jira UE-141652
#preflight 6216b51e647bb7debf6dbf76
#rb phillip.kavan
#lockdown julien.marchand
#ROBOMERGE-AUTHOR: dave.jones2
#ROBOMERGE-SOURCE: CL 19122243 in //UE5/Release-5.0/... via CL 19123441
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)
[CL 19154373 by dave jones2 in ue5-main branch]
Setters and getters are native functions called by FProperties when setting property values with *_InContainer functions.
Setters and getter function names can be manually specified with Setter = Func and Getter = Func keywords inside of UPROEPRTY macro but they will also be automatically parsed if the name is not explicitly specified if the setter or getter function name matches SetPropertyName and GetPropertyName pattern.
The latter behavior can be disabled in UHT's DefaultEngine.ini by setting AutomaticSettersAndGetters=False.
ImportText and ExportTextItem functions have been deprecated and should be replaced with *_InContainer or *_Direct variants.
#rb Steve.Robb
#preflight 6210a377a83e0bcefd03d9e1
#ROBOMERGE-OWNER: marc.audy
#ROBOMERGE-AUTHOR: robert.manuszewski
#ROBOMERGE-SOURCE: CL 19070318 via CL 19098059 via CL 19104650 via CL 19104661 via CL 19110012
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)
[CL 19147839 by marc audy in ue5-main branch]
We need to relax the rules for breaking pins when real numbers are used. We should maintain their connections since we implicitly perform casts between floats and doubles.
#jira UE-142401
#preflight 6215482730639b44d2fcf2a4
#rb ben.hoffman
#lockdown julien.marchand
#ROBOMERGE-AUTHOR: dave.jones2
#ROBOMERGE-SOURCE: CL 19093393 via CL 19093953 via CL 19094642 via CL 19096133 via CL 19105369
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)
[CL 19146675 by dave jones2 in ue5-main branch]
Also fixes an issue that didn't allow returning a custom event node back to its previous name without also requiring a full compilation pass.
#jira UE-136247
#rb Ben.Hoffman
#preflight 621563cb141b500e17f11986
[CL 19091424 by Phillip Kavan in ue5-main branch]
2) Enhancements to StringView and a few other helper classes
3) New UE style ignore case comparison
4) Moved shared UHT definitions into a common C# file.
#rb jonathan.adamczewski
#rnx
#preflight 620e3cdc8b6428e701a24666
[CL 19033446 by Tim Smith in ue5-main branch]