public static IMapGenerator Get(string gen, long Seed, MapGenMaterials Materials) { if (gen == null) gen = "QuickHillGenerator"; if (Generators.Count == 0) { Generators.Add("QuickHillGenerator", typeof(QuickHillGenerator)); } string id = "QuickHillGenerator"; if (Generators.ContainsKey(gen)) id = gen; Console.WriteLine("Initializing {0}.", id); IMapGenerator g = (IMapGenerator)Generators[id].GetConstructor(new Type[] { typeof(long) }).Invoke(new object[] { Seed }); g.Materials = Materials; g.GenerateCaves = true; g.GenerateDungeons = true; g.GenerateOres = true; g.GenerateWater = true; g.HellMode = false; g.GenerateTrees = true; g.NoPreservation = false; return g; }
private void DoPreset() { mMaterials = new MapGenMaterials(); if (cmbMatPreset.SelectedIndex != -1) { switch (cmbMatPreset.SelectedText) { case "Hell Mode": mMaterials.Grass = mMaterials.Soil; mMaterials.Sand = mMaterials.Gravel = 49; // Obsidian mMaterials.Water = mMaterials.Lava; mMaterials.Snow = 0; // F**K snow. TemperatureOffset = 30; break; default: break; } } if (pgMapGen.SelectedObject != null) { (pgMapGen.SelectedObject as IMapGenerator).Materials = mMaterials; } }
private void DoPreset() { mMaterials=new MapGenMaterials(); if (cmbMatPreset.SelectedIndex != -1) { switch (cmbMatPreset.SelectedText) { case "Hell Mode": mMaterials.Grass=mMaterials.Soil; mMaterials.Sand=mMaterials.Gravel=49; // Obsidian mMaterials.Water=mMaterials.Lava; mMaterials.Snow=0; // F**K snow. TemperatureOffset = 30; break; default: break; } } if (pgMapGen.SelectedObject != null) { (pgMapGen.SelectedObject as IMapGenerator).Materials = mMaterials; } }
internal virtual void Precipitate(ref byte[, ,] b, BiomeType[,] bt, MapGenMaterials mats, long X, long Z) { int xs = b.GetLength(0); int zs = b.GetLength(2); for (int x = 0; x < xs; x++) { for (int z = 0; z < zs; z++) { if(Biome.NeedsSnowAndIce(bt[x,z])) continue; // Fall down for (int y = b.GetLength(1) - 1; y > 0; y--) { byte block = b[x, y, z]; if (block == 0) continue; if (block == mats.Water) b[x, y, z] = mats.Ice; else b[x, y + 1, z] = mats.Snow; break; } } } }
public virtual void AddSoil(long X, long Z, RidgedMultifractal CavernNoise, Perlin CaveNoise, double[,] hm,ref byte[,,] b, BiomeType[,] biomes, int WaterHeight, int depth, MapGenMaterials mats) { int YH = b.GetLength(1) - 2; double xo = (double)(X * b.GetLength(0)); double zo = (double)(Z * b.GetLength(2)); for (int x = 0; x < b.GetLength(0); x++) { //Console.WriteLine(); for (int z = 0; z < b.GetLength(2); z++) { double hmY=(double)(System.Math.Min(hm[x, z],1d) * (b.GetLength(1) - 3)); bool HavePloppedGrass = false; bool HaveTouchedSoil = false; // Caves first if (GenerateCaves) { for (int y = 0; y < b.GetLength(1); y++) { // If we're in rock, and CavernNoise value is under a threshold value calculated by height // or CaveNoise value is over threshold value, and the block we're removing won't fall on us... if ( b[x, y, z] == 1 && ( ((CavernNoise.GetValue(x + xo, y, z + zo) / 2) + 1) < Utils.Lerp(CavernThresholdMax, CavernThresholdMin, (((double)y / (hmY + 1)))) || (Utils.FixLibnoiseOutput(CaveNoise.GetValue(x + xo, y, z + zo)) > CaveThreshold) ) && !(b[x, y, z] == 9 || b[x, y, z] == 8 || b[x, y, z] == 12 || b[x, y, z] == 13)) { // Remove it b[x, y, z] = 0; } } } for (int y = (int)b.GetLength(1) - 1; y > 0; y--) { byte supportBlock = b[x, y-1, z]; // Ensure there's going to be stuff holding us up. if (b[x, y, z] == mats.Rock && supportBlock==mats.Rock) { HaveTouchedSoil = true; if (y + depth >= YH) continue; byte ddt = b[x, y+depth, z]; switch (ddt) { case 0: // Air case 8: // Water case 9: // Water BiomeType bt = biomes[x,z]; if (bt == BiomeType.Tundra) { b[x, y, z] = mats.Sand; } else { if (y - depth <= WaterHeight && GenerateWater) { if ((bt == BiomeType.Taiga || bt == BiomeType.TemperateForest || bt == BiomeType.Tundra) && y > WaterHeight) { b[x, y, z] = (HavePloppedGrass) ? mats.Soil : mats.Grass; } else { b[x, y, z] = mats.Sand; } } else b[x, y, z] = (HavePloppedGrass) ? mats.Soil : mats.Grass; } if (!HavePloppedGrass) HavePloppedGrass = true; break; default: y = 0; break; } } else if (b[x, y, z] == 0 && y <= WaterHeight && !HaveTouchedSoil && GenerateWater) { b[x, y, z] = mats.Water; } } } } }