protected override List <SkeletonPoint> Generate()
    {
        var result = new List <SkeletonPoint>();

        Params.InitialPoints?.ForEach(_ => result.Add(new SkeletonPoint(_, new EntityType(Color.green, "Initial"))));

        for (var i = 0; i < Params.RandomPointsCount; i++)
        {
            var criteria = new List <IGeneratorCriteria <SkeletonPoint> >
            {
                new AvoidNearSkeletonPointGeneratorCriteria(result)
            };

            var skeletonPointGeneratorParams = new SkeletonPointGeneratorParams
            {
                MaximalX = Params.MaximalX,
                MinimalX = Params.MinimalX,
                MaximalY = Params.MaximalY,
                MinimalY = Params.MinimalY
            };

            var skeletonPointGenerator = new SkeletonPointGenerator(skeletonPointGeneratorParams, criteria);
            var newPoint = skeletonPointGenerator.Execute();

            if (newPoint == null)
            {
                return(null);
            }

            result.Add(newPoint);
        }

        return(result);
    }
    protected override LevelSkeleton Generate()
    {
        var result = new LevelSkeleton();

        var points = _skeletonPointGenerator.Execute();

        result.AddPoints(points);

        var newLines = result.ToGraph().ToFullGraph().Edges.ToList().Select(_ =>
        {
            return(new SkeletonLine(_.Vertexes.ToList()[0].Data, _.Vertexes.ToList()[1].Data));
        });

        result.AddLines(newLines);

        return(result);
    }