예제 #1
0
        public static Map Convert(Voronoi v)
        {
            rd = new RenderTarget2D(device, Map.MAPSIZE, Map.MAPSIZE);

            List<VertexPositionColor> lv = new List<VertexPositionColor>();

            foreach (Voronoi.Edge edge in v.Edges.Values)
            {
                lv.Add(new VertexPositionColor(new Vector3(edge.d0.position, (float)((double)edge.d0.Properties["Height"])), Color.Black));
                lv.Add(new VertexPositionColor(new Vector3(edge.v0.position, (float)((double)edge.v0.Properties["Height"])), Color.Black));
                lv.Add(new VertexPositionColor(new Vector3(edge.v1.position, (float)((double)edge.v1.Properties["Height"])), Color.Black));

                lv.Add(new VertexPositionColor(new Vector3(edge.d1.position, (float)((double)edge.d1.Properties["Height"])), Color.Black));
                lv.Add(new VertexPositionColor(new Vector3(edge.v0.position, (float)((double)edge.v0.Properties["Height"])), Color.Black));
                lv.Add(new VertexPositionColor(new Vector3(edge.v1.position, (float)((double)edge.v1.Properties["Height"])), Color.Black));
            }
            device.SetRenderTarget(rd);

            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Apply();
                device.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.TriangleStrip, lv.ToArray(), 0, lv.Count / 3);
                //device.DrawPrimitives(PrimitiveType.TriangleList, 0, lv.Count / 3);
            }
            device.SetRenderTarget(null);
            ((Texture2D)rd).SaveAsJpeg(new FileStream("Map.jpg", FileMode.OpenOrCreate), 1025, 1025);

            return new Map();
        }
예제 #2
0
 void setOcean(Voronoi.Center c)
 {
     c.Properties["Lake"] = false;
     if (!(bool)c.Properties["Land"])
     {
         foreach (Voronoi.Corner corn in c.corners.Values)
             corn.Properties["Land"] = false;
         foreach (Voronoi.Center next in c.neighbors.Values)
         {
             if ((bool)next.Properties["Lake"])
                 setOcean(next);
         }
     }
 }
예제 #3
0
 public MapVoronoi(int seed)
 {
     this.seed = seed;
     cells = new Voronoi();
 }
예제 #4
0
 void createRiver(Voronoi.Corner corn)
 {
     Voronoi.Corner next = (Voronoi.Corner)corn.Properties["DownSlope"];
     Voronoi.Edge edge = corn.protrudes.Values.First(e => e.v0 == next || e.v1 == next);
     if ((bool)corn.Properties["Land"] && (bool)corn.Properties["Lake"])
     {
         if (next.Properties.ContainsKey("River"))
             next.Properties["River"] = (int)corn.Properties["River"] + (int)next.Properties["River"] + 1;
         else
             next.Properties.Add("River", (int)corn.Properties["River"] + 1);
         if (edge.Properties.ContainsKey("River"))
             edge.Properties["River"] = (int)corn.Properties["River"] + (int)edge.Properties["River"] + 1;
         else
             edge.Properties.Add("River", (int)corn.Properties["River"] + 1);
         createRiver(next);
     }
 }