Esempio n. 1
0
        public void Generate(IScene scene, string[] s)
        {
            //string noiseGen = MainConsole.Instance.CmdPrompt("Noise generator (Perlin or Kosh)", "Perlin", new List<string>(new [] { "Perlin", "Kosh" }));
            //if(noiseGen == "Perlin")
            {
                _noiseGen = m_perlinNoise;
                PerlinNoiseSettings pns = new PerlinNoiseSettings();
                pns.ResultX        = scene.RegionInfo.RegionSizeX;
                pns.ResultY        = scene.RegionInfo.RegionSizeY;
                pns.RandomSeed     = int.Parse(MainConsole.Instance.Prompt("Random Seed (0-infinity)", "10"));
                pns.CorsenessX     = int.Parse(MainConsole.Instance.Prompt("Corseness (X direction) (2-1000)", "100"));
                pns.CorsenessY     = int.Parse(MainConsole.Instance.Prompt("Corseness (Y direction) (2-1000)", "100"));
                pns.FlatEdges      = MainConsole.Instance.Prompt("Flat Edges (recommended)", "true", new List <string>(new[] { "true", "false" })) == "true";
                pns.Octaves        = int.Parse(MainConsole.Instance.Prompt("Octaves (0-infinity)", "5"));
                pns.Persistence    = float.Parse(MainConsole.Instance.Prompt("Persistence", "0.8"));
                _noiseGen.Settings = pns;
            }

            /*else
             * {
             *  _noiseGen = m_kochLikeNoise;
             *  KochLikeNoiseSettings kns = new KochLikeNoiseSettings();
             *  kns.ResultX = MainConsole.Instance.Prompt.RegionInfo.RegionSizeX;
             *  kns.ResultY = MainConsole.Instance.Prompt.RegionInfo.RegionSizeY;
             *  kns.H = double.Parse(MainConsole.Instance.Prompt("H", "1.0"));
             *  kns.InitalGridX = int.Parse(MainConsole.Instance.Prompt("Initial Grid X", "2"));
             *  if(kns.InitalGridX < 2)
             *      kns.InitalGridX = 2;
             *  kns.InitalGridY = int.Parse(MainConsole.Instance.Prompt("Initial Grid Y", "2"));
             *  if(kns.InitalGridY < 2)
             *      kns.InitalGridY = 2;
             *  kns.RandomMin = int.Parse(MainConsole.Instance.Prompt("Random Min", "-1"));
             *  kns.RandomMax = int.Parse(MainConsole.Instance.Prompt("Random Max", "1"));
             *  kns.RandomSeed = int.Parse(MainConsole.Instance.Prompt("Random Seed", "0"));
             *  kns.Scale = double.Parse(MainConsole.Instance.Prompt("Scale", "1.0"));
             *  _noiseGen.Settings = kns;
             * }*/
            float scaling = float.Parse(MainConsole.Instance.Prompt("Fractal Scaling", "50"));

            float[,] land = _noiseGen.Generate();
            ITerrainChannel c = new TerrainChannel(scene);

            for (int x = 0; x < scene.RegionInfo.RegionSizeX; x++)
            {
                for (int y = 0; y < scene.RegionInfo.RegionSizeY; y++)
                {
                    c[x, y] = (land[x, y] * scaling) + (float)scene.RegionInfo.RegionSettings.WaterHeight + 10;
                }
            }
            scene.RequestModuleInterface <ITerrainModule>().TerrainMap = c;
            scene.RequestModuleInterface <ITerrainModule>().TaintTerrain();
            scene.RegisterModuleInterface <ITerrainChannel>(c);
        }
Esempio n. 2
0
        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            PerlinNoiseSettings[] settings = new PerlinNoiseSettings[this.layers.Items.Count];
            for (int i = 0; i < this.layers.Items.Count; i++)
            {
                settings[i] = PerlinNoiseSettings.Parse((string)this.layers.Items[i]);
            }

            this.start = DateTime.Now;
            this.full  = PerlinNoiseGenerator.GetImage(settings, (int)this.resolution.Value, (int)this.threads.Value, (int)this.seed.Value);
            this.end   = DateTime.Now;
        }
Esempio n. 3
0
        private void generate_Click(object sender, EventArgs e)
        {
            if (layers.Items.Count == 0)
            {
                MessageBox.Show("Please add a layer.");
                return;
            }

            int layerCount = 0;

            foreach (string l in layers.Items)
            {
                layerCount += PerlinNoiseSettings.Parse(l).Levels;
            }

            this.viewer = new ImageViewer((int)this.resolution.Value * layerCount);
            this.viewer.Show();
            this.backgroundWorker.RunWorkerAsync();
        }
        public static void ApplyNoiseToMapTexture(Texture2D mapTexture, PerlinNoiseSettings settings,
                                                  float noiseOffsetFactor)
        {
            var noiseTexture =
                NoiseTextureHelper.PerlinNoise(mapTexture.width, settings);

            var mapColors   = mapTexture.GetPixels();
            var noiseColors = noiseTexture.GetPixels();

            Debug.Assert(mapColors.Length == noiseColors.Length,
                         "Cannot use textures with different resolutions!");

            for (var i = 0; i < mapColors.Length; ++i)
            {
                mapColors[i].r -= noiseColors[i].r * noiseOffsetFactor;
            }

            mapTexture.SetPixels(mapColors);
            mapTexture.Apply();
        }
Esempio n. 5
0
        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            PerlinNoiseSettings[] settings = new PerlinNoiseSettings[this.layers.Items.Count];
            for (int i = 0; i < this.layers.Items.Count; i++)
                settings[i] = PerlinNoiseSettings.Parse((string)this.layers.Items[i]);

            this.start = DateTime.Now;
            this.full = PerlinNoiseGenerator.GetImage(settings, (int)this.resolution.Value, (int)this.threads.Value, (int)this.seed.Value);
            this.end = DateTime.Now;
        }
Esempio n. 6
0
 public PerlinNoise(PerlinNoiseSettings settings)
 {
     Settings     = settings;
     _permutation = CalculatePermutation();
     _gradients   = CalculateGradients();
 }