From 5f7075d2f7559e60605a6f4e11095ba198e71e01 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sun, 29 Sep 2024 22:08:31 +0200 Subject: [PATCH] Add `NetworkReplicationNode::SetObject` to customize object replication settings at runtime --- .../Engine/Networking/NetworkReplicationHierarchy.cpp | 11 +++++++++++ .../Engine/Networking/NetworkReplicationHierarchy.h | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/Source/Engine/Networking/NetworkReplicationHierarchy.cpp b/Source/Engine/Networking/NetworkReplicationHierarchy.cpp index 224ee9f31..b6772fc48 100644 --- a/Source/Engine/Networking/NetworkReplicationHierarchy.cpp +++ b/Source/Engine/Networking/NetworkReplicationHierarchy.cpp @@ -74,6 +74,17 @@ bool NetworkReplicationNode::GetObject(ScriptingObject* obj, NetworkReplicationH return false; } +bool NetworkReplicationNode::SetObject(const NetworkReplicationHierarchyObject& value) +{ + const int32 index = Objects.Find(value.Object); + if (index != -1) + { + Objects[index] = value; + return true; + } + return false; +} + bool NetworkReplicationNode::DirtyObject(ScriptingObject* obj) { const int32 index = Objects.Find(obj); diff --git a/Source/Engine/Networking/NetworkReplicationHierarchy.h b/Source/Engine/Networking/NetworkReplicationHierarchy.h index 78f9cad1f..a3196d67f 100644 --- a/Source/Engine/Networking/NetworkReplicationHierarchy.h +++ b/Source/Engine/Networking/NetworkReplicationHierarchy.h @@ -208,6 +208,13 @@ API_CLASS(Abstract, Namespace = "FlaxEngine.Networking") class FLAXENGINE_API Ne /// True on successful retrieval, otherwise false. API_FUNCTION() virtual bool GetObject(ScriptingObject* obj, NetworkReplicationHierarchyObject& result); + /// + /// Sets object properties in the hierarchy. Can be used to modify replication settings at runtime. + /// + /// The object data to update. + /// True on successful update, otherwise false (eg, if specific object has not been added to this node). + API_FUNCTION() virtual bool SetObject(const NetworkReplicationHierarchyObject& value); + /// /// Force replicates the object during the next update. Resets any internal tracking state to force the synchronization. ///