Exemplo n.º 1
0
 private Biomes GetBiome(Center p) {
     if (p.Ocean) { return Biomes.Ocean; }
     if (p.Water) {
         if (p.Elevation < 0.1) { return Biomes.Marsh; }
         if (p.Elevation > 0.8) { return Biomes.Ice; }
         return Biomes.Lake;
     }
     if (p.Coast) { return Biomes.Beach; }
     if (p.Elevation > 0.8) {
         if (p.Moisture > 0.8) { return Biomes.Snow; }
         if (p.Moisture > 0.5) { return Biomes.Snow; }
         if (p.Moisture > 0.33) { return Biomes.Tundra; }
         if (p.Moisture > 0.16) { return Biomes.Bare; }
         return Biomes.Scorched;
     }
     if (p.Elevation > 0.6) {
         if (p.Moisture > 0.66) return Biomes.Taiga;
         if (p.Moisture > 0.33) return Biomes.Shrubland;
         return Biomes.TemperateDesert;
     }
     if (p.Elevation > 0.3) {
         if (p.Moisture > 0.83) return Biomes.TemperateRainForest;
         if (p.Moisture > 0.5) return Biomes.TemperateDecidousForest;
         if (p.Moisture > 0.16) return Biomes.Grassland;
         return Biomes.TemperateDesert;
     }
     if (p.Moisture > 0.66) return Biomes.TropicalRainForest;
     if (p.Moisture > 0.33) return Biomes.TropicalSeasonalForest;
     if (p.Moisture > 0.16) return Biomes.Grassland;
     return Biomes.SubtropicalDesert;
 }
Exemplo n.º 2
0
        private void BuildGraph(IEnumerable <Vector2> points, Voronoi2.Voronoi voronoi)
        {
            var libEdges     = voronoi.Edges;
            var centerLookup = new Dictionary <Vector2, Center>();

            foreach (var point in points)
            {
                var p = new Center {
                    Index     = _centers.Count,
                    Point     = point,
                    Neighbors = new List <Center>(),
                    Borders   = new List <Edge>(),
                    Corners   = new List <Corner>()
                };
                _centers.Add(p);
                centerLookup[point] = p;
            }
            foreach (var p in _centers)
            {
                voronoi.Region(p.Point);
            }
            _cornerMap = new Dictionary <int, List <Corner> >();

            foreach (var libEdge in libEdges)
            {
                var dedge = libEdge.DelaunayLine();
                var vedge = libEdge.VoronoiEdge();

                var edge = new Edge {
                    Index    = _edges.Count,
                    River    = 0,
                    Midpoint = vedge.P0.HasValue && vedge.P1.HasValue ? Vector2.Lerp(vedge.P0.Value, vedge.P1.Value, 0.5f) : (Vector2?)null
                };
                _edges.Add(edge);


                edge.V0 = MakeCorner(vedge.P0);
                edge.V1 = MakeCorner(vedge.P1);
                edge.D0 = dedge.P0.HasValue ? centerLookup[dedge.P0.Value] : null;
                edge.D1 = dedge.P1.HasValue ? centerLookup[dedge.P1.Value] : null;

                if (edge.D0 != null)
                {
                    edge.D0.Borders.Add(edge);
                }
                if (edge.D1 != null)
                {
                    edge.D1.Borders.Add(edge);
                }
                if (edge.V0 != null)
                {
                    edge.V0.Protrudes.Add(edge);
                }
                if (edge.V1 != null)
                {
                    edge.V1.Protrudes.Add(edge);
                }

                if (edge.D0 != null && edge.D1 != null)
                {
                    AddToCenterList(edge.D0.Neighbors, edge.D1);
                    AddToCenterList(edge.D1.Neighbors, edge.D0);
                }
                if (edge.V0 != null && edge.V1 != null)
                {
                    AddToCornersList(edge.V0.Adjacent, edge.V1);
                    AddToCornersList(edge.V1.Adjacent, edge.V0);
                }
                if (edge.D0 != null)
                {
                    AddToCornersList(edge.D0.Corners, edge.V0);
                    AddToCornersList(edge.D0.Corners, edge.V1);
                }
                if (edge.D1 != null)
                {
                    AddToCornersList(edge.D1.Corners, edge.V0);
                    AddToCornersList(edge.D1.Corners, edge.V1);
                }

                if (edge.V0 != null)
                {
                    AddToCenterList(edge.V0.Touches, edge.D0);
                    AddToCenterList(edge.V0.Touches, edge.D1);
                }
                if (edge.V1 != null)
                {
                    AddToCenterList(edge.V1.Touches, edge.D0);
                    AddToCenterList(edge.V1.Touches, edge.D1);
                }
            }
        }
Exemplo n.º 3
0
 private string GetBiome(Center p)
 {
     if (p.Ocean)
     {
         return("Ocean");
     }
     if (p.Water)
     {
         if (p.Elevation < 0.1f)
         {
             return("Marsh");
         }
         if (p.Elevation > 0.8f)
         {
             return("Ice");
         }
         return("Lake");
     }
     if (p.Coast)
     {
         return("Beach");
     }
     if (p.Elevation > 0.8f)
     {
         if (p.Moisture > 0.50f)
         {
             return("Snow");
         }
         if (p.Moisture > 0.33f)
         {
             return("Tundra");
         }
         if (p.Moisture > 0.16f)
         {
             return("Bare");
         }
         return("Scorched");
     }
     if (p.Elevation > 0.6f)
     {
         if (p.Moisture > 0.66f)
         {
             return("Taiga");
         }
         if (p.Moisture > 0.33f)
         {
             return("Shrubland");
         }
         return("TemperateDesert");
     }
     if (p.Elevation > 0.3f)
     {
         if (p.Moisture > 0.83)
         {
             return("TemperateRainForest");
         }
         if (p.Moisture > 0.50f)
         {
             return("TemperateDecidousForest");
         }
         if (p.Moisture > 0.16f)
         {
             return("Grassland");
         }
         return("TemperateDesert");
     }
     if (p.Moisture > 0.66f)
     {
         return("TropicalRainForest");
     }
     if (p.Moisture > 0.33f)
     {
         return("TropicalSeasonalForest");
     }
     if (p.Moisture > 0.16f)
     {
         return("Grassland");
     }
     return("SubtropicalDesert");
 }
Exemplo n.º 4
0
Arquivo: Map.cs Projeto: remy22/dx11
 private string GetBiome(Center p)
 {
     if (p.Ocean) {
         return "Ocean";
     }
     if (p.Water) {
         if (p.Elevation < 0.1f) return "Marsh";
         if (p.Elevation > 0.8f) return "Ice";
         return "Lake";
     }
     if (p.Coast) {
         return "Beach";
     }
     if (p.Elevation > 0.8f) {
         if (p.Moisture > 0.50f) return "Snow";
         if (p.Moisture > 0.33f) return "Tundra";
         if (p.Moisture > 0.16f) return "Bare";
         return "Scorched";
     }
     if (p.Elevation > 0.6f) {
         if (p.Moisture > 0.66f) return "Taiga";
         if (p.Moisture > 0.33f) return "Shrubland";
         return "TemperateDesert";
     }
     if (p.Elevation > 0.3f) {
         if (p.Moisture > 0.83) return "TemperateRainForest";
         if (p.Moisture > 0.50f) return "TemperateDecidousForest";
         if (p.Moisture > 0.16f) return "Grassland";
         return "TemperateDesert";
     }
     if (p.Moisture > 0.66f) return "TropicalRainForest";
     if (p.Moisture > 0.33f) return "TropicalSeasonalForest";
     if (p.Moisture > 0.16f) return "Grassland";
     return "SubtropicalDesert";
 }
Exemplo n.º 5
0
Arquivo: Map.cs Projeto: remy22/dx11
        private void BuildGraph(IEnumerable<Vector2> points, Voronoi2.Voronoi voronoi)
        {
            var libEdges = voronoi.Edges;
            var centerLookup = new Dictionary<Vector2, Center>();

            foreach (var point in points) {
                var p = new Center {
                    Index = _centers.Count,
                    Point = point,
                    Neighbors = new List<Center>(),
                    Borders = new List<Edge>(),
                    Corners = new List<Corner>()
                };
                _centers.Add(p);
                centerLookup[point] = p;
            }
            foreach (var p in _centers) {
                voronoi.Region(p.Point);
            }
            _cornerMap = new Dictionary<int, List<Corner>>();

            foreach (var libEdge in libEdges) {
                var dedge = libEdge.DelaunayLine();
                var vedge = libEdge.VoronoiEdge();

                var edge = new Edge {
                    Index = _edges.Count,
                    River = 0,
                    Midpoint = vedge.P0.HasValue && vedge.P1.HasValue ? Vector2.Lerp(vedge.P0.Value, vedge.P1.Value, 0.5f) : (Vector2?) null
                };
                _edges.Add(edge);

                edge.V0 = MakeCorner(vedge.P0);
                edge.V1 = MakeCorner(vedge.P1);
                edge.D0 = dedge.P0.HasValue ? centerLookup[dedge.P0.Value] : null;
                edge.D1 = dedge.P1.HasValue ? centerLookup[dedge.P1.Value] : null;

                if (edge.D0 != null) {edge.D0.Borders.Add(edge);}
                if (edge.D1 != null) {  edge.D1.Borders.Add(edge);}
                if (edge.V0 != null) {  edge.V0.Protrudes.Add(edge);}
                if (edge.V1 != null) {  edge.V1.Protrudes.Add(edge);}

                if (edge.D0 != null && edge.D1 != null) {
                    AddToCenterList(edge.D0.Neighbors, edge.D1);
                    AddToCenterList(edge.D1.Neighbors, edge.D0);
                }
                if (edge.V0 != null && edge.V1 != null) {
                    AddToCornersList(edge.V0.Adjacent, edge.V1);
                    AddToCornersList(edge.V1.Adjacent, edge.V0);
                }
                if (edge.D0 != null) {
                    AddToCornersList(edge.D0.Corners, edge.V0);
                    AddToCornersList(edge.D0.Corners, edge.V1);
                }
                if (edge.D1 != null) {
                    AddToCornersList(edge.D1.Corners, edge.V0);
                    AddToCornersList(edge.D1.Corners, edge.V1);
                }

                if (edge.V0 != null) {
                    AddToCenterList(edge.V0.Touches, edge.D0);
                    AddToCenterList(edge.V0.Touches, edge.D1);
                }
                if (edge.V1 != null) {
                    AddToCenterList(edge.V1.Touches, edge.D0);
                    AddToCenterList(edge.V1.Touches, edge.D1);
                }
            }
        }
Exemplo n.º 6
0
Arquivo: Map.cs Projeto: remy22/dx11
 private static void AddToCenterList(IList<Center> neighbors, Center x)
 {
     if ( x!=null && neighbors.IndexOf(x) < 0) neighbors.Add(x);
 }
Exemplo n.º 7
0
 private static void AddToCenterList(ICollection<Center> v, Center center) {
     if (center != null && !v.Contains(center)) {
         v.Add(center);
     }
 }
Exemplo n.º 8
0
        private void BuildGraph(VoronoiGraph voronoi) {
            var points = voronoi.Sites;
            var libedges = voronoi.Edges;
            var centerLookup = new Dictionary<PointF, Center>();

            foreach (var point in points) {
                point.Region(new RectangleF(0, 0, voronoi.Width, voronoi.Height));
                var p = new Center {
                    Index = Centers.Count,
                    Point = point
                };
                Centers.Add(p);
                centerLookup[point] = p;
                
            }

            foreach (var libedge in libedges.Where(e=>e.Visible)) {
                var dedge = libedge.DelauneyLine;
                var vedge = libedge.VoronoiEdge;

                var edge = new Edge1 {
                    Index = Edges.Count,
                    Midpoint = (Valid(vedge.P1) && Valid(vedge.P2)) ? new PointF((vedge.P1.X + vedge.P2.X) * 0.5f, (vedge.P1.Y + vedge.P2.Y) * 0.5f) : InvalidPoint
                };

                Edges.Add(edge);

                // edges point to corners
                edge.V0 = MakeCorner(vedge.P1);
                edge.V1 = MakeCorner(vedge.P2);
                // edges point to centers
                edge.D0 = centerLookup[dedge.P1];
                edge.D1 = centerLookup[dedge.P2];

                // Centers point to edges
                if (edge.D0 != null) { edge.D0.Borders.Add(edge); }
                if (edge.D1 != null) { edge.D1.Borders.Add(edge); }
                // Corners point to edges
                if (edge.V0 != null) { edge.V0.Protrudes.Add(edge); }
                if (edge.V1 != null) { edge.V1.Protrudes.Add(edge); }

                // Centers point to centers
                if (edge.D0 != null && edge.D1 != null) {
                    AddToCenterList(edge.D0.Neighbors, edge.D1);
                    AddToCenterList(edge.D1.Neighbors, edge.D0);
                }
                // Corners point to corners
                if (edge.V0 != null && edge.V1 != null) {
                    AddToCornerList(edge.V0.Adjacent, edge.V1);
                    AddToCornerList(edge.V1.Adjacent, edge.V0);
                }
                // Centers point to corners
                if (edge.D0 != null) {
                    AddToCornerList(edge.D0.Corners, edge.V0);
                    AddToCornerList(edge.D0.Corners, edge.V1);
                }
                if (edge.D1 != null) {
                    AddToCornerList(edge.D1.Corners, edge.V0);
                    AddToCornerList(edge.D1.Corners, edge.V1);
                }

                // Corners point to centers
                if (edge.V0 != null) {
                    AddToCenterList(edge.V0.Touches, edge.D0);
                    AddToCenterList(edge.V0.Touches, edge.D1);
                }
                if (edge.V1 != null) {
                    AddToCenterList(edge.V1.Touches, edge.D0);
                    AddToCenterList(edge.V1.Touches, edge.D1);
                }
            }
        }
Exemplo n.º 9
0
 private Edge1 LookupEdgeFromCenter(Center p, Center r) {
     foreach (var edge in p.Borders) {
         if (edge.D0 == r || edge.D1 == r) {
             return edge;
         }
     }
     return null;
 }