@@ -57,6 +57,7 @@ private static async Task UpdateObjects()
57
57
while ( user . LoggedIn && user . ObjectsUpdating )
58
58
{
59
59
if ( user . Client == null ) return ;
60
+ HandleObjectsOutOfView ( user ) ;
60
61
UpdateClientObjects ( user ) ;
61
62
await Task . Delay ( 50 ) ;
62
63
user . ObjectsUpdating = false ;
@@ -75,33 +76,26 @@ private static void UpdateClientObjects(Aisling user)
75
76
var payload = new List < Sprite > ( ) ;
76
77
77
78
// 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 ( ) ;
79
80
80
81
foreach ( var obj in objects )
81
82
{
82
83
switch ( obj )
83
84
{
84
85
case null :
85
86
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 ) :
87
88
{
88
89
payload . Add ( obj ) ;
89
90
break ;
90
91
}
91
- case Item item when ! obj . WithinRangeOf ( user , 13 ) && user . SpritesInView . ContainsKey ( item . ItemVisibilityId ) :
92
- {
93
- RemoveObject ( user , obj ) ;
94
- break ;
95
- }
96
92
case Aisling :
97
93
case Monster :
98
94
case Mundane :
99
95
case Money :
100
96
{
101
- if ( obj . WithinRangeOf ( user , 13 ) && ! user . SpritesInView . ContainsKey ( obj . Serial ) )
97
+ if ( ! user . SpritesInView . ContainsKey ( obj . Serial ) )
102
98
payload . Add ( obj ) ;
103
- else if ( ! obj . WithinRangeOf ( user , 13 ) && user . SpritesInView . ContainsKey ( obj . Serial ) )
104
- RemoveObject ( user , obj ) ;
105
99
break ;
106
100
}
107
101
}
@@ -115,6 +109,34 @@ private static void UpdateClientObjects(Aisling user)
115
109
user . Client . SendVisibleEntities ( toUpdate ) ;
116
110
}
117
111
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
+
118
140
private static void RemoveObject ( Aisling self , Sprite objectToRemove )
119
141
{
120
142
// Validate
0 commit comments