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(); }
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); } } }
public MapVoronoi(int seed) { this.seed = seed; cells = new Voronoi(); }
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); } }