Skip to content

Commit b977de7

Browse files
committed
Ground Objects Fix
1 parent 567fed4 commit b977de7

File tree

1 file changed

+32
-10
lines changed

1 file changed

+32
-10
lines changed

Zolian.Server.Base/Network/Components/ObjectComponent.cs

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)