From 5223e92aa8eda12ec5cff0fd9f4905e6cfc9450d Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Mon, 26 Dec 2022 20:03:20 -0800 Subject: [PATCH] fix spatial hash remove crash if key does not exist --- src/Collision/Fixed/SpatialHash2D.cs | 29 +++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/Collision/Fixed/SpatialHash2D.cs b/src/Collision/Fixed/SpatialHash2D.cs index d597cdd..0821799 100644 --- a/src/Collision/Fixed/SpatialHash2D.cs +++ b/src/Collision/Fixed/SpatialHash2D.cs @@ -125,21 +125,24 @@ namespace MoonWorks.Collision.Fixed /// public void Remove(T id) { - var (shape, transform, collisionGroups) = IDLookup[id]; - - var box = AABB2D.Transformed(shape.AABB, transform); - var minHash = Hash(box.Min); - var maxHash = Hash(box.Max); - - foreach (var key in Keys(minHash.Item1, minHash.Item2, maxHash.Item1, maxHash.Item2)) + if (IDLookup.TryGetValue(id, out var data)) { - if (hashDictionary.ContainsKey(key)) - { - hashDictionary[key].Remove(id); - } - } + var (shape, transform, collisionGroups) = data; - IDLookup.Remove(id); + var box = AABB2D.Transformed(shape.AABB, transform); + var minHash = Hash(box.Min); + var maxHash = Hash(box.Max); + + foreach (var key in Keys(minHash.Item1, minHash.Item2, maxHash.Item1, maxHash.Item2)) + { + if (hashDictionary.ContainsKey(key)) + { + hashDictionary[key].Remove(id); + } + } + + IDLookup.Remove(id); + } } ///