@@ -57,6 +57,7 @@ private static async Task UpdateObjects()
5757 while ( user . LoggedIn && user . ObjectsUpdating )
5858 {
5959 if ( user . Client == null ) return ;
60+ HandleObjectsOutOfView ( user ) ;
6061 UpdateClientObjects ( user ) ;
6162 await Task . Delay ( 50 ) ;
6263 user . ObjectsUpdating = false ;
@@ -75,33 +76,26 @@ private static void UpdateClientObjects(Aisling user)
7576 var payload = new List < Sprite > ( ) ;
7677
7778 // Retrieve and categorize
78- var objects = ObjectManager . GetObjects ( user . Map , selector => selector is not null , ObjectManager . Get . All ) . ToList ( ) ;
79+ var objects = ObjectManager . GetObjects ( user . Map , s => s . WithinRangeOf ( user , 13 ) , ObjectManager . Get . All ) . ToList ( ) ;
7980
8081 foreach ( var obj in objects )
8182 {
8283 switch ( obj )
8384 {
8485 case null :
8586 continue ;
86- case Item item when obj . WithinRangeOf ( user , 13 ) && ! user . SpritesInView . ContainsKey ( item . ItemVisibilityId ) :
87+ case Item item when ! user . SpritesInView . ContainsKey ( item . ItemVisibilityId ) :
8788 {
8889 payload . Add ( obj ) ;
8990 break ;
9091 }
91- case Item item when ! obj . WithinRangeOf ( user , 13 ) && user . SpritesInView . ContainsKey ( item . ItemVisibilityId ) :
92- {
93- RemoveObject ( user , obj ) ;
94- break ;
95- }
9692 case Aisling :
9793 case Monster :
9894 case Mundane :
9995 case Money :
10096 {
101- if ( obj . WithinRangeOf ( user , 13 ) && ! user . SpritesInView . ContainsKey ( obj . Serial ) )
97+ if ( ! user . SpritesInView . ContainsKey ( obj . Serial ) )
10298 payload . Add ( obj ) ;
103- else if ( ! obj . WithinRangeOf ( user , 13 ) && user . SpritesInView . ContainsKey ( obj . Serial ) )
104- RemoveObject ( user , obj ) ;
10599 break ;
106100 }
107101 }
@@ -115,6 +109,34 @@ private static void UpdateClientObjects(Aisling user)
115109 user . Client . SendVisibleEntities ( toUpdate ) ;
116110 }
117111
112+ private static void HandleObjectsOutOfView ( Aisling user )
113+ {
114+ foreach ( var ( serial , sprite ) in user . SpritesInView )
115+ {
116+ switch ( sprite )
117+ {
118+ case null :
119+ user . SpritesInView . TryRemove ( serial , out _ ) ;
120+ continue ;
121+ case Item item :
122+ {
123+ if ( user . SpritesInView . ContainsKey ( item . ItemVisibilityId ) && ( item . ItemPane != Item . ItemPanes . Ground || ! sprite . WithinRangeOf ( user , 13 ) ) )
124+ RemoveObject ( user , sprite ) ;
125+ break ;
126+ }
127+ case Aisling :
128+ case Monster :
129+ case Mundane :
130+ case Money :
131+ {
132+ if ( ! sprite . WithinRangeOf ( user , 13 ) && user . SpritesInView . ContainsKey ( sprite . Serial ) )
133+ RemoveObject ( user , sprite ) ;
134+ break ;
135+ }
136+ }
137+ }
138+ }
139+
118140 private static void RemoveObject ( Aisling self , Sprite objectToRemove )
119141 {
120142 // Validate
0 commit comments