From 544eb03f7e102e99f61b7708230f5967f65b28d0 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 3 Jul 2023 13:06:08 +0200 Subject: [PATCH] Add network replication support for in-built object/asset reference holders --- Source/Engine/Serialization/ReadStream.h | 28 +++++++++++++++++++++++ Source/Engine/Serialization/Stream.h | 8 +++++++ Source/Engine/Serialization/WriteStream.h | 20 ++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/Source/Engine/Serialization/ReadStream.h b/Source/Engine/Serialization/ReadStream.h index 9d3215442..26b536c6d 100644 --- a/Source/Engine/Serialization/ReadStream.h +++ b/Source/Engine/Serialization/ReadStream.h @@ -159,6 +159,34 @@ public: Read(ptr); v = ptr; } + template + FORCE_INLINE void Read(SoftObjectReference& v) + { + uint32 id[4]; + ReadBytes(id, sizeof(id)); + v.Set(*(Guid*)id); + } + template + FORCE_INLINE void Read(AssetReference& v) + { + uint32 id[4]; + ReadBytes(id, sizeof(id)); + v = (T*)::LoadAsset(*(Guid*)id, T::TypeInitializer); + } + template + FORCE_INLINE void Read(WeakAssetReference& v) + { + uint32 id[4]; + ReadBytes(id, sizeof(id)); + v = (T*)::LoadAsset(*(Guid*)id, T::TypeInitializer); + } + template + FORCE_INLINE void Read(SoftAssetReference& v) + { + uint32 id[4]; + ReadBytes(id, sizeof(id)); + v.Set(*(Guid*)id); + } /// /// Read data array diff --git a/Source/Engine/Serialization/Stream.h b/Source/Engine/Serialization/Stream.h index 83f0eaf21..e477eee95 100644 --- a/Source/Engine/Serialization/Stream.h +++ b/Source/Engine/Serialization/Stream.h @@ -17,6 +17,14 @@ class ISerializable; class ScriptingObject; template class ScriptingObjectReference; +template +class SoftObjectReference; +template +class AssetReference; +template +class WeakAssetReference; +template +class SoftAssetReference; /// /// Base class for all data streams (memory streams, file streams etc.) diff --git a/Source/Engine/Serialization/WriteStream.h b/Source/Engine/Serialization/WriteStream.h index 92ac211ca..95bd87df9 100644 --- a/Source/Engine/Serialization/WriteStream.h +++ b/Source/Engine/Serialization/WriteStream.h @@ -176,6 +176,26 @@ public: { Write(v.Get()); } + template + FORCE_INLINE void Write(const SoftObjectReference& v) + { + Write(v.Get()); + } + template + FORCE_INLINE void Write(const AssetReference& v) + { + Write(v.Get()); + } + template + FORCE_INLINE void Write(const WeakAssetReference& v) + { + Write(v.Get()); + } + template + FORCE_INLINE void Write(const SoftAssetReference& v) + { + Write(v.Get()); + } template void Write(const Array& data)