From 9e0606a00e021935264d4b31d65651f501688c44 Mon Sep 17 00:00:00 2001 From: Jeffrey Rainy Date: Thu, 28 Apr 2022 17:21:42 -0400 Subject: [PATCH] fix: NetworkList serialization sends the list values before the cached updates, to prevent duplicate application --- .../NetworkVariable/Collections/NetworkList.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs index a6f221e27c..92eef9cc1c 100644 --- a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs +++ b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs @@ -11,6 +11,7 @@ namespace Unity.Netcode public class NetworkList : NetworkVariableBase where T : unmanaged, IEquatable { private NativeList m_List = new NativeList(64, Allocator.Persistent); + private NativeList m_ListAtLastReset = new NativeList(64, Allocator.Persistent); private NativeList> m_DirtyEvents = new NativeList>(64, Allocator.Persistent); /// @@ -41,7 +42,11 @@ public NetworkList(IEnumerable values = default, public override void ResetDirty() { base.ResetDirty(); - m_DirtyEvents.Clear(); + if (m_DirtyEvents.Length > 0) + { + m_DirtyEvents.Clear(); + m_ListAtLastReset.CopyFrom(m_List); + } } /// @@ -109,10 +114,10 @@ public override void WriteDelta(FastBufferWriter writer) /// public override void WriteField(FastBufferWriter writer) { - writer.WriteValueSafe((ushort)m_List.Length); - for (int i = 0; i < m_List.Length; i++) + writer.WriteValueSafe((ushort)m_ListAtLastReset.Length); + for (int i = 0; i < m_ListAtLastReset.Length; i++) { - NetworkVariable.Write(writer, m_List[i]); + NetworkVariable.Write(writer, m_ListAtLastReset[i]); } } @@ -454,6 +459,7 @@ public int LastModifiedTick public override void Dispose() { m_List.Dispose(); + m_ListAtLastReset.Dispose(); m_DirtyEvents.Dispose(); } }