Skip to content

Commit 7451f01

Browse files
committed
improvements to core interest management system.
1 parent 4d035b0 commit 7451f01

File tree

2 files changed

+37
-29
lines changed

2 files changed

+37
-29
lines changed

Assets/Mirage/Runtime/InterestManagement/InterestManager.cs

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,27 @@ namespace Mirage.InterestManagement
77
{
88
public class InterestManager
99
{
10+
private class SystemComparer : IEqualityComparer<ObserverData>
11+
{
12+
public bool Equals(ObserverData x, ObserverData y)
13+
{
14+
return nameof(x.System).GetStableHashCode() == nameof(y.System).GetStableHashCode();
15+
}
16+
17+
public int GetHashCode(ObserverData obj)
18+
{
19+
int hash = nameof(obj.System).GetStableHashCode();
20+
21+
return hash;
22+
}
23+
}
24+
1025
static readonly ILogger Logger = LogFactory.GetLogger(typeof(InterestManager));
1126

1227
#region Fields
1328

1429
public readonly ServerObjectManager ServerObjectManager;
15-
private readonly List<ObserverData> _visibilitySystems = new List<ObserverData>();
30+
private readonly HashSet<ObserverData> _visibilitySystems = new HashSet<ObserverData>(new SystemComparer());
1631
private List<INetworkPlayer> _observers = new List<INetworkPlayer>();
1732

1833
private static readonly ProfilerMarker ObserverProfilerMarker = new ProfilerMarker(nameof(Observers));
@@ -67,9 +82,9 @@ private void OnAuthenticated(INetworkPlayer player)
6782
}
6883
else
6984
{
70-
foreach (ObserverData systemData in _visibilitySystems)
85+
foreach (ObserverData observer in _visibilitySystems)
7186
{
72-
systemData.System.OnAuthenticated(player);
87+
observer.System.OnAuthenticated(player);
7388
}
7489
}
7590

@@ -94,9 +109,9 @@ private void OnSpawnInWorld(NetworkIdentity identity)
94109
}
95110
else
96111
{
97-
foreach (ObserverData systemData in _visibilitySystems)
112+
foreach (ObserverData observer in _visibilitySystems)
98113
{
99-
systemData.System.OnSpawned(identity);
114+
observer.System.OnSpawned(identity);
100115
}
101116
}
102117

@@ -125,9 +140,9 @@ internal void Update()
125140

126141
OnUpdateProfilerMarker.Begin();
127142

128-
foreach (ObserverData observerData in _visibilitySystems)
143+
foreach (ObserverData observer in _visibilitySystems)
129144
{
130-
observerData.System.CheckForObservers();
145+
observer.System.CheckForObservers();
131146
}
132147

133148
OnUpdateProfilerMarker.End();
@@ -164,40 +179,37 @@ protected internal void Send<T>(NetworkIdentity identity, T msg, int channelId =
164179
/// <summary>
165180
/// Register a specific interest management system to the interest manager.
166181
/// </summary>
167-
/// <param name="system">The system we want to register in the interest manager.</param>
168-
internal void RegisterVisibilitySystem(ref ObserverData system)
182+
/// <param name="observer">The system we want to register in the interest manager.</param>
183+
internal void RegisterVisibilitySystem(ref ObserverData observer)
169184
{
170-
if (_visibilitySystems.Contains(system))
185+
if (_visibilitySystems.Contains(observer))
171186
{
172-
Logger.LogWarning(
173-
"[InterestManager] - System already register to interest manager. Please check if this was correct.");
174-
175187
return;
176188
}
177189

178190
if (Logger.logEnabled)
179-
Logger.Log($"[Interest Manager] - Registering system {system} to our manager.");
191+
Logger.Log($"[Interest Manager] - Registering system {observer} to our manager.");
180192

181-
_visibilitySystems.Add(system);
193+
_visibilitySystems.Add(observer);
182194
}
183195

184196
/// <summary>
185197
/// Un-register a specific interest management system from the interest manager.
186198
/// </summary>
187-
/// <param name="system">The system we want to un-register from the interest manager.</param>
188-
internal void UnRegisterVisibilitySystem(ref ObserverData system)
199+
/// <param name="observer">The system we want to un-register from the interest manager.</param>
200+
internal void UnRegisterVisibilitySystem(ref ObserverData observer)
189201
{
190-
if (!_visibilitySystems.Contains(system))
202+
if (!_visibilitySystems.Contains(observer))
191203
{
192204
if (Logger.logEnabled)
193-
Logger.Log($"[Interest Manager] - Un-Registering system {system} from our manager.");
205+
Logger.Log($"[Interest Manager] - Un-Registering system {observer} from our manager.");
194206
return;
195207
}
196208

197209
Logger.LogWarning(
198210
"[InterestManager] - Cannot find system in interest manager. Please check make sure it was registered.");
199211

200-
_visibilitySystems.Remove(system);
212+
_visibilitySystems.Remove(observer);
201213
}
202214

203215

Assets/Mirage/Runtime/InterestManagement/ObserverData.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@
22

33
namespace Mirage.InterestManagement
44
{
5-
public struct ObserverData
5+
public readonly struct ObserverData
66
{
7-
private readonly INetworkVisibility _system;
7+
public INetworkVisibility System { get; }
88

9-
private readonly Dictionary<NetworkIdentity, HashSet<INetworkPlayer>> _observers;
10-
11-
public INetworkVisibility System => _system;
12-
13-
public Dictionary<NetworkIdentity, HashSet<INetworkPlayer>> Observers => _observers;
9+
public Dictionary<NetworkIdentity, HashSet<INetworkPlayer>> Observers { get; }
1410

1511
public ObserverData(INetworkVisibility system, Dictionary<NetworkIdentity, HashSet<INetworkPlayer>> observers)
1612
{
17-
_system = system;
18-
_observers = observers;
13+
System = system;
14+
Observers = observers;
1915
}
2016
public override string ToString()
2117
{

0 commit comments

Comments
 (0)