@@ -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
0 commit comments