public Mountains(int seed, int width, int height, int minMountainRadius, int maxMountainRadius, int minMuntainDistance, int numSamplesBeforeAbort) : base(seed, width, height)
        {
            noiseMap = new float[width * height];
            float side = minMountainRadius / (float)Math.Sqrt(2);

            List <Vector2> points = PoissonSample.GeneratePoints(Random, minMuntainDistance, new Vector2(width, height), numSamplesBeforeAbort);

            for (int i = 0; i < points.Count; i++)
            {
                int cx = (int)points[i].X;
                int cy = (int)points[i].Y;

                int   rnd            = Random.Next(minMountainRadius, maxMountainRadius);
                int   buildStartX    = Math.Max(0, cx - rnd);
                int   buildEndX      = Math.Min(width, cx + rnd);
                int   buildStartY    = Math.Max(0, cy - rnd);
                int   buildEndY      = Math.Min(height, cy + rnd);
                int   center         = Math.Min((buildStartX + buildEndX) / 2 - buildStartX, (buildStartY + buildEndY) / 2 - buildStartY);
                float MountainHeight = (float)Random.NextDouble();
                float h = 0f;
                for (int c = 0; c < center; c++)
                {
                    h += MountainHeight / center * 2;

                    for (int y = buildStartY + c; y < buildEndY - c; y++)
                    {
                        for (int x = buildStartX + c; x < buildEndX - c; x++)
                        {
                            noiseMap[y * width + x] = h;
                        }
                    }
                }
            }
        }
Exemple #2
0
        public Planet(int id, int seed, GraphicsDeviceManager graphics, PlanetTypes planetType, PlanetSizes planetSize)
        {
            Id           = id;
            PlanetType   = planetType;
            PlanetSize   = planetSize;
            ChunksWidth  = PlanetSizeDImensions[(int)planetSize][0];
            ChunksHeight = PlanetSizeDImensions[(int)planetSize][1];
            CellsWidth   = ChunksWidth * CHUNK_WIDTH;
            CellsHeight  = ChunksHeight * CHUNK_HEIGHT;

            noiseGenerator = new NoiseGenerator(planetType, seed, CellsWidth, CellsHeight);

            Map = new Map.Map(id, seed, ChunksWidth, ChunksHeight, noiseGenerator, graphics, planetType);

            List <Vector2> greens = PoissonSample.GeneratePoints(new Random(seed), 15, new Vector2(CellsWidth, CellsHeight));
            List <Vector2> blues  = PoissonSample.GeneratePoints(new Random(seed), 20, new Vector2(CellsWidth, CellsHeight));
            List <Vector2> reds   = PoissonSample.GeneratePoints(new Random(seed), 25, new Vector2(CellsWidth, CellsHeight));

            for (int i = 0; i < greens.Count; i++)
            {
                Structures.Add(new Ore(GetCellAtPosition(greens[i]), Ore.OreTypes.Green));
            }
            for (int i = 0; i < blues.Count; i++)
            {
                Structures.Add(new Ore(GetCellAtPosition(blues[i]), Ore.OreTypes.Blue));
            }
            for (int i = 0; i < reds.Count; i++)
            {
                Structures.Add(new Ore(GetCellAtPosition(reds[i]), Ore.OreTypes.Red));
            }
        }