Skip to content

Commit eb991d6

Browse files
authored
fix: NetworkVar implementations now uses Time of their owner NetworkM… (#788)
1 parent bdb8774 commit eb991d6

File tree

3 files changed

+97
-34
lines changed

3 files changed

+97
-34
lines changed

com.unity.multiplayer.mlapi/Runtime/NetworkVariable/Collections/NetworkDictionary.cs

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections;
23
using System.Collections.Generic;
34
using System.IO;
@@ -77,7 +78,7 @@ public NetworkDictionary(IDictionary<TKey, TValue> value)
7778
public void ResetDirty()
7879
{
7980
m_DirtyEvents.Clear();
80-
LastSyncedTime = NetworkManager.Singleton.NetworkTime;
81+
LastSyncedTime = m_NetworkBehaviour.NetworkManager.NetworkTime;
8182
}
8283

8384
/// <inheritdoc />
@@ -388,7 +389,7 @@ public bool IsDirty()
388389
return false;
389390
}
390391

391-
if (NetworkManager.Singleton.NetworkTime - LastSyncedTime >= (1f / Settings.SendTickrate))
392+
if (m_NetworkBehaviour.NetworkManager.NetworkTime - LastSyncedTime >= (1f / Settings.SendTickrate))
392393
{
393394
return true;
394395
}
@@ -403,7 +404,9 @@ public TValue this[TKey key]
403404
get => m_Dictionary[key];
404405
set
405406
{
406-
if (NetworkManager.Singleton.IsServer)
407+
EnsureInitialized();
408+
409+
if (m_NetworkBehaviour.NetworkManager.IsServer)
407410
{
408411
m_Dictionary[key] = value;
409412
}
@@ -434,7 +437,9 @@ public TValue this[TKey key]
434437
/// <inheritdoc />
435438
public void Add(TKey key, TValue value)
436439
{
437-
if (NetworkManager.Singleton.IsServer)
440+
EnsureInitialized();
441+
442+
if (m_NetworkBehaviour.NetworkManager.IsServer)
438443
{
439444
m_Dictionary.Add(key, value);
440445
}
@@ -452,7 +457,9 @@ public void Add(TKey key, TValue value)
452457
/// <inheritdoc />
453458
public void Add(KeyValuePair<TKey, TValue> item)
454459
{
455-
if (NetworkManager.Singleton.IsServer)
460+
EnsureInitialized();
461+
462+
if (m_NetworkBehaviour.NetworkManager.IsServer)
456463
{
457464
m_Dictionary.Add(item);
458465
}
@@ -470,7 +477,9 @@ public void Add(KeyValuePair<TKey, TValue> item)
470477
/// <inheritdoc />
471478
public void Clear()
472479
{
473-
if (NetworkManager.Singleton.IsServer)
480+
EnsureInitialized();
481+
482+
if (m_NetworkBehaviour.NetworkManager.IsServer)
474483
{
475484
m_Dictionary.Clear();
476485
}
@@ -510,7 +519,9 @@ public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
510519
/// <inheritdoc />
511520
public bool Remove(TKey key)
512521
{
513-
if (NetworkManager.Singleton.IsServer)
522+
EnsureInitialized();
523+
524+
if (m_NetworkBehaviour.NetworkManager.IsServer)
514525
{
515526
m_Dictionary.Remove(key);
516527
}
@@ -534,7 +545,9 @@ public bool Remove(TKey key)
534545
/// <inheritdoc />
535546
public bool Remove(KeyValuePair<TKey, TValue> item)
536547
{
537-
if (NetworkManager.Singleton.IsServer)
548+
EnsureInitialized();
549+
550+
if (m_NetworkBehaviour.NetworkManager.IsServer)
538551
{
539552
m_Dictionary.Remove(item);
540553
}
@@ -558,9 +571,9 @@ IEnumerator IEnumerable.GetEnumerator()
558571

559572
private void HandleAddDictionaryEvent(NetworkDictionaryEvent<TKey, TValue> dictionaryEvent)
560573
{
561-
if (NetworkManager.Singleton.IsServer)
574+
if (m_NetworkBehaviour.NetworkManager.IsServer)
562575
{
563-
if (NetworkManager.Singleton.ConnectedClients.Count > 0)
576+
if (m_NetworkBehaviour.NetworkManager.ConnectedClients.Count > 0)
564577
{
565578
m_DirtyEvents.Add(dictionaryEvent);
566579
}
@@ -581,6 +594,14 @@ public ushort RemoteTick
581594
return NetworkTickSystem.NoTick;
582595
}
583596
}
597+
598+
private void EnsureInitialized()
599+
{
600+
if (m_NetworkBehaviour == null)
601+
{
602+
throw new InvalidOperationException("Cannot access " + nameof(NetworkDictionary<TKey, TValue>) + " before it's initialized");
603+
}
604+
}
584605
}
585606

586607
/// <summary>

com.unity.multiplayer.mlapi/Runtime/NetworkVariable/Collections/NetworkList.cs

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections;
23
using System.Collections.Generic;
34
using System.IO;
@@ -75,7 +76,7 @@ public NetworkList(IList<T> value)
7576
public void ResetDirty()
7677
{
7778
m_DirtyEvents.Clear();
78-
LastSyncedTime = NetworkManager.Singleton.NetworkTime;
79+
LastSyncedTime = m_NetworkBehaviour.NetworkManager.NetworkTime;
7980
}
8081

8182
/// <inheritdoc />
@@ -96,7 +97,7 @@ public bool IsDirty()
9697
return false;
9798
}
9899

99-
if (NetworkManager.Singleton.NetworkTime - LastSyncedTime >= (1f / Settings.SendTickrate))
100+
if (m_NetworkBehaviour.NetworkManager.NetworkTime - LastSyncedTime >= (1f / Settings.SendTickrate))
100101
{
101102
return true;
102103
}
@@ -428,7 +429,9 @@ IEnumerator IEnumerable.GetEnumerator()
428429
/// <inheritdoc />
429430
public void Add(T item)
430431
{
431-
if (NetworkManager.Singleton.IsServer)
432+
EnsureInitialized();
433+
434+
if (m_NetworkBehaviour.NetworkManager.IsServer)
432435
{
433436
m_List.Add(item);
434437
}
@@ -446,7 +449,9 @@ public void Add(T item)
446449
/// <inheritdoc />
447450
public void Clear()
448451
{
449-
if (NetworkManager.Singleton.IsServer)
452+
EnsureInitialized();
453+
454+
if (m_NetworkBehaviour.NetworkManager.IsServer)
450455
{
451456
m_List.Clear();
452457
}
@@ -474,7 +479,9 @@ public void CopyTo(T[] array, int arrayIndex)
474479
/// <inheritdoc />
475480
public bool Remove(T item)
476481
{
477-
if (NetworkManager.Singleton.IsServer)
482+
EnsureInitialized();
483+
484+
if (m_NetworkBehaviour.NetworkManager.IsServer)
478485
{
479486
m_List.Remove(item);
480487
}
@@ -504,7 +511,9 @@ public int IndexOf(T item)
504511
/// <inheritdoc />
505512
public void Insert(int index, T item)
506513
{
507-
if (NetworkManager.Singleton.IsServer)
514+
EnsureInitialized();
515+
516+
if (m_NetworkBehaviour.NetworkManager.IsServer)
508517
{
509518
m_List.Insert(index, item);
510519
}
@@ -522,7 +531,9 @@ public void Insert(int index, T item)
522531
/// <inheritdoc />
523532
public void RemoveAt(int index)
524533
{
525-
if (NetworkManager.Singleton.IsServer)
534+
EnsureInitialized();
535+
536+
if (m_NetworkBehaviour.NetworkManager.IsServer)
526537
{
527538
m_List.RemoveAt(index);
528539
}
@@ -543,7 +554,9 @@ public T this[int index]
543554
get => m_List[index];
544555
set
545556
{
546-
if (NetworkManager.Singleton.IsServer)
557+
EnsureInitialized();
558+
559+
if (m_NetworkBehaviour.NetworkManager.IsServer)
547560
{
548561
m_List[index] = value;
549562
}
@@ -561,9 +574,9 @@ public T this[int index]
561574

562575
private void HandleAddListEvent(NetworkListEvent<T> listEvent)
563576
{
564-
if (NetworkManager.Singleton.IsServer)
577+
if (m_NetworkBehaviour.NetworkManager.IsServer)
565578
{
566-
if (NetworkManager.Singleton.ConnectedClients.Count > 0)
579+
if (m_NetworkBehaviour.NetworkManager.ConnectedClients.Count > 0)
567580
{
568581
m_DirtyEvents.Add(listEvent);
569582
}
@@ -584,6 +597,14 @@ public ushort RemoteTick
584597
return NetworkTickSystem.NoTick;
585598
}
586599
}
600+
601+
private void EnsureInitialized()
602+
{
603+
if (m_NetworkBehaviour == null)
604+
{
605+
throw new InvalidOperationException("Cannot access " + nameof(NetworkList<T>) + " before it's initialized");
606+
}
607+
}
587608
}
588609

589610
/// <summary>

0 commit comments

Comments
 (0)