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);
    }
    public LevelSkeletonGenerator(LevelSkeletonGeneratorParams generatorParams, IEnumerable <IGeneratorCriteria <LevelSkeleton> > generatorCriteria = null) : base(generatorParams, generatorCriteria)
    {
        var pointGeneratorParams = new SkeletonPointGeneratorParams
        {
            RandomPointsCount = 10,
            MinimalX          = -10,
            MaximalX          = 10,
            MinimalY          = -5,
            MaximalY          = 5,
            InitialPoints     = new List <Vector2> {
                new Vector2(11, 2),
                new Vector2(-11, -3)
            }
        };

        _skeletonPointGenerator = new SkeletonPointGenerator(pointGeneratorParams);
    }