private void PerlinNoiseGenration(Vector3 position, VisFrame[,,] frames, WorldTile[] neighbours, GraphicsDevice device, SpriteBatch sp) { //PerlinNoise.CreateStaticMap(WorldTile.WORLD_TILE_WIDTH, device); var test = PerlinNoise.GeneratePerlinNoiseGPU(new Vector3(position.X / 1000f, position.Y, position.Z / 1000f), device, sp); var grid = new Color[test.Width * test.Height]; test.GetData(grid); for (var x = 0; x < frames.GetLength(0); x++) { for (var z = 0; z < frames.GetLength(2); z++) { var highest = grid[x * z].R * .5 < _minHeight ? _minHeight : grid[x * z].R * .5; if (highest > _maxHeight) { highest = _maxHeight; } var currentIndex = 0; var counter = 0; for (var y = 0; y < highest; y++) { frames[x, y, z] = new VisFrame(FrameManager.Frames[_columnData[currentIndex].Frame]) { Visible = true }; counter++; if (_columnData[currentIndex].Height != 0) { if (counter >= _columnData[currentIndex].Height) { counter = 0; currentIndex++; } } else { if (highest - UpperFramesHeightTogether - 1 <= y) { counter = 0; currentIndex++; } } } } } FillWithAir(frames); //ApplyVis(frames,neighbours); }
private void FillWithAir(VisFrame[,,] frames) { for (var x = 0; x < frames.GetLength(0); x++) { for (var z = 0; z < frames.GetLength(2); z++) { for (var y = 0; y < WorldTile.WORLD_TILE_HEIGHT; y++) { if (frames[x, y, z] == null) { frames[x, y, z] = new VisFrame(FrameManager.Frames["Air"]) { Visible = false }; } } } } }
private void NormalGeneration(Vector3 position, VisFrame[,,] frames, WorldTile[] neighbours, GraphicsDevice device, SpriteBatch sp) { for (var x = 0; x < frames.GetLength(0); x++) { for (var z = 0; z < frames.GetLength(2); z++) { var currentIndex = 0; var counter = 0; for (var y = 0; y < _maxHeight; y++) { frames[x, y, z] = new VisFrame(FrameManager.Frames[_columnData[currentIndex].Frame]) { Visible = true }; counter++; if (_columnData[currentIndex].Height != 0) { if (counter >= _columnData[currentIndex].Height) { counter = 0; currentIndex++; } } else { if (_maxHeight - UpperFramesHeightTogether - 1 <= y) { counter = 0; currentIndex++; } } } } } FillWithAir(frames); //ApplyVis(frames, neighbours); }