public static Point MovedRelativelyInDirection(this Point point, Direction sourceDirection, Direction direction,
     int steps = 1)
 {
     if (sourceDirection.HasFlag(Direction.Up))
     {
         point = point.MovedInDirection(direction, steps);
     }
     if (sourceDirection.HasFlag(Direction.Down))
     {
         point = point.MovedInDirection(direction.Flipped(), steps);
     }
     if (sourceDirection.HasFlag(Direction.Left))
     {
         point = point.MovedInDirection(direction.RotatedClockWise(), steps);
     }
     if (sourceDirection.HasFlag(Direction.Right))
     {
         point = point.MovedInDirection(direction.RotatedCounterClockWise(), steps);
     }
     return point;
 }