public List <ViewGeometry> OnCheckCollision() { List <ViewGeometry> collisions = new List <ViewGeometry>(); foreach (var collision in CollisionMap.Where(p => Name != p.Name).ToDictionary(p => p.Geometry, o => o)) { bool isCollision = CollisionManager.CalculateCollision(Geometry, collision.Key); if (isCollision) { collisions.Add(collision.Value); } } foreach (var item in collisions) { if (!CurrentCollisions.Any(p => p == item)) { CurrentCollisions.Add(item); } if (!item.CurrentCollisions.Any(p => p == this)) { item.CurrentCollisions.Add(this); } if (item.CheckCollision != null) { item.CheckCollision(item.CurrentCollisions); } } foreach (var item in PreviousCollisions) { if (!collisions.Any(p => p == item)) { CurrentCollisions.Remove(item); item.CurrentCollisions.Remove(this); if (item.CheckCollision != null) { item.CheckCollision(item.CurrentCollisions); } } } PreviousCollisions = CurrentCollisions.ToList(); if (CheckCollision != null) { CheckCollision(CurrentCollisions); } return(collisions); }