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);
        }