This allows us more control over what goes into the diff object (eg, skipping all the internal state that Ar.IsTransacting adds), as well as allowing us to always use non-tagged property serialization (as we never need to load the diff object data back into a BP that has changed layout).
The downside of this approach is that each transacted object now needs to be serialized twice during the start and end of a transaction; once to get the object state for the transaction buffer, and once to get the object state to diff. The second set of diff data is discarded once the transaction has finalized, and any transaction snapshots still only need to serialize once (as snapshots only perform a diff).
API changes:
* Split the object info out of FTransactionSerializedObject and into FTransactionSerializedObjectInfo so that it can be re-used. This data is only really needed for a diff, but the transaction buffer also need to persist a copy for notifications.
* Split the diff only data out of FTransactionSerializedObject and into FTransactionDiffableObject.
* Split the diff serialization logic out of FSerializedObjectDataWriter and into FDiffableObjectDataWriter.
* Updated various diff APIs to work on FTransactionDiffableObject.
* Updated FObjectRecord to store FTransactionDiffableObject instances for the initial and snapshot diffable object state.
#preflight 62d5db9199514be7eb7cf04c
#rb Francis.Hurteau
#rnx
#ROBOMERGE-OWNER: jamie.dale
#ROBOMERGE-AUTHOR: jamie.dale
#ROBOMERGE-SOURCE: CL 21183943 via CL 21183948 via CL 21186529 via CL 21186547 via CL 21186567
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)
[CL 21194110 by jamie dale in ue5-main branch]