コード例 #1
0
ファイル: VoronoiLib.cs プロジェクト: threeup/centauri
        public static void Voronoi(int seed, CVec2 dimensions, ref Map map)
        {
            List <CVec2> sites = MakeVoronoiSites(seed, dimensions, 6);

            for (var itY = 0; itY < dimensions.y; ++itY)
            {
                for (var itX = 0; itX < dimensions.x; ++itX)
                {
                    var idx = map.Idx(itX, itY);
                    map.tiles[idx].Layers.Remove(LayerType.Voronoi);
                    float bestDistance = 9999999;
                    for (var itSite = 0; itSite < sites.Count; ++itSite)
                    {
                        CVec2 site         = sites[itSite];
                        float siteDistance = site.DistanceTo(map.tiles[idx].Location);
                        if (itSite == 0)
                        {
                            var layer = new VoronoiLayer {
                                VoronoiSite = site, VoronoiColor = GenerateColor(0)
                            };
                            map.tiles[idx].Layers.Add(LayerType.Voronoi, layer);
                            bestDistance = siteDistance;
                        }
                        else if (siteDistance < bestDistance)
                        {
                            var layer = map.tiles[idx].Layers[LayerType.Voronoi] as VoronoiLayer;
                            layer.VoronoiSite  = site;
                            layer.VoronoiColor = GenerateColor(itSite);
                            bestDistance       = siteDistance;
                            //map.tiles[idx].Layers[LayerType.Voronoi] = layer;
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: VoronoiLib.cs プロジェクト: threeup/centauri
        public static List <CVec2> MakeVoronoiSites(int seed, CVec2 dimensions, int count)
        {
            var result     = new List <CVec2>();
            var seedOffset = 2939;

            var rng = seed > 0 ? new Random(seed + seedOffset) : new Random();

            for (var i = 0; i < count; ++i)
            {
                CVec2 next = new CVec2(rng.Next(dimensions.x), rng.Next(dimensions.y));
                result.Add(next);
            }
            return(result);
        }