Another consequence of using doubles everywhere in Blueprints is that delegate binding can fail if a native delegate signature uses floats. The initial attempt at fixing this would update modify function pins in the current Blueprint to use PC_Float as a subcategory if it was used in a delegate binding. Unfortunately, this doesn't work if we're binding to a function in a different BP class. Attempting to fix up those functions would dirty several Blueprints, and likely confuse users.
The approach that we take here creates a proxy delegate function that matches the underlying signature. The proxy's function graph will then call the original bound function, which implicitly handles any double/float conversions. Additionally, we'll perform a "capture" of any actors that we need to call the bound function on. The compiler will add a new hidden property for the actor class, which we set in the original graph that had the bound delegate. The proxy function graph will then read this property when it calls the original function.
#jira UE-145634
#preflight 63191b1cb069eea9ab594ea2
#rb phillip.kavan
[CL 22087332 by dave jones2 in ue5-main branch]
- Fixed issue where custom property overrides was not properly initialzied for iris if set before beginplay/beginreplication
- Cleaned up delegates propagating custom property overrides to iris-replicationsystem
- Marked interface methods in IRepChangedPropertyTracker to be deprecated in the future and added routing of SetCustomActive override via FNetPropertyConditionManager::SetPropertyActiveOverride to allow for future removal of the interface
#jira https://jira.it.epicgames.com/browse/UE-158358
#rb Peter.Engstrom
#preflight 63285ec98131e92d65975851
[CL 22072998 by Mattias Hornlund in ue5-main branch]
This change does a few things:
* Improves compile times because the gen.cpp is inlined so less header parsing is required.
* Allows us to forward declare more types in the headers where we were not able to because the gen.cpp files did not have all the required headers included. The gen.cpp files required the header that generated it to include all the types because of the constructor and desructor in the gen.cpp need to know the full type.
#jira
#preflight 6323b43f8131e92d65aed1d9
[CL 22064061 by bryan sefcik in ue5-main branch]
Core - Refactoring the Object Handle event callbacks so that we can hook and unhook them with delegates/delegatehandles.
Core - Adding support for detecting loads via object handles as a new event distinct from resolution callback.
Core - Expanding the utility functions on FObjectRef so that we can resolve it in a myraid of fashions to get the path, the class path, the full path and the export path.
[REVIEW] [at]Zousar.Shaker, [at]Joe.Pribele
[CL 22063982 by nick darnell in ue5-main branch]
Class - When iterating the classes sparse values, don't accidentally load deferred objects, or crash because you're reinterpret casting the value of something that isn't a pointer.
[REVIEW] [at]Zousar.Shaker, [at]Joe.Pribele
[CL 22063963 by nick darnell in ue5-main branch]
* Added trace file created callback: Useful to gather all trace files created during execution
* Added config option to disable or resize tail buffers via [Trace.Config]:TailSizeBytes
* Added config option for worker thread sleep time via [Trace.Config]:SleepTimeInMS
* Fixed init code so it never creates a workerthread in builds that don't support multithreading
#rb Martin.Ridgets, Ionut.Matasaru
[CL 22013173 by louisphilippe seguin in ue5-main branch]
Allow UObject constructor to record a valid path to non-asset toplevelobjects, for consistency with the other constructors which are based on path strings rather than the virtual IsAsset function (which e.g. returns false for UClass).
#rb Robert.Millar
#rnx
#preflight 631f5eafd613b765fa391870
[CL 21967835 by Matt Peters in ue5-main branch]
logging buffers any call not from the logging thread, added a call to Flush() to force the logger write.
added to improve efficiency in building a stacktrace
FFrame::GetStackDescription(FStringBuilderBase& StringBuilder)
FFrame::GetStackTrace(FStringBuilderBase& StringBuilder)
FFrame::GetScriptCallstack(FStringBuilderBase& StringBuilder, bool bReturnEmpty = false, bool bTopOfStackOnly = false)
UObjectBaseUtility::GetFullName(FStringBuilderBase& ResultString, const UObject* StopOuter = NULL, EObjectFullNameFlags Flags = EObjectFullNameFlags::None) const
#jira UE-161358
#rb zousar.shaker devin.doucette
#preflight 63178f86304480f8f8e1c961
[CL 21826435 by joe pribele in ue5-main branch]
These FNames can take 30mb+ of memory in a large project.
Refactor FSoftObjectPath to store a FTopLevelAssetPath instead of an FName for the top level asset part.
Refactor FAssetData to infer the object path from the PackageName and AssetName fields and an editor-only field called OptionalOuterPath for external actors which are non-top-level assets.
Refactor FAssetBundleData to only store top level asset references.
Increase EUnrealEngineObjectUE5Version for FSoftObjectPath invalidation.
Increase FAssetRegistryVersion to invalidate serialization of FAssetData and FAssetBundleData - asset registry serialization does not see EUnrealEngineObjectUE5Version.
Replace TMap in Asset Registry with TSet to avoid duplicating the key fields.
Remove object path FName fields from native blueprint make/break functions for FARFilter - those pins will be orphaned.
Refactor redirect collector to use soft object paths rather than FNames.
UE_DEPRECATED markers have been commented out in this change to allow separate submission of deprecation fixups across the engine.
#jira UE-161932
#rb matt.peters,francis.hurteau,ben.zeigler
#lockdown marc.audy
#preflight
[CL 21826272 by Robert Millar in ue5-main branch]
Core - Added support for assigning a TObjectPtr<T> to a TScriptInterface just like you'd expect from a raw Object*.
Actor - Making a version of GetComponents that will work for TObjectPtr collections. Additionally fixed several places in the engine where we're forcing the template parameter instead of allowing it to be determined automatically - which forced me to leave one of the GetComponent implementations, but I think we aught to remove it. e.g.
Don't Do
TArray<UPrimitiveComponent*> PrimComponents;
Actor->GetComponents<UPrimitiveComponent>(PrimComponents);
Do
TArray<UPrimitiveComponent*> PrimComponents;
Actor->GetComponents(PrimComponents);
Slate - Introducing support for collections of TObjectPtr<T>'s being used as source lists for the STableView.
#preflight 630f7af8e54ec9d581b03d65
[REVIEW] [at]Marc.Audy, [at]Steve.Robb, [at]Zousar.Shaker
[CL 21727328 by nick darnell in ue5-main branch]