// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT using System; using OpenTK; namespace ClassicalSharp.Generator { public unsafe sealed class FlatGrassGenerator : IMapGenerator { public override string GeneratorName { get { return "Flatgrass"; } } int width, length; public override byte[] Generate(int width, int height, int length, int seed) { byte[] map = new byte[width * height * length]; this.width = width; this.length = length; fixed(byte* ptr = map) { CurrentState = "Setting dirt blocks"; MapSet(ptr, 0, height / 2 - 2, Block.Dirt); CurrentState = "Setting grass blocks"; MapSet(ptr, height / 2 - 1, height / 2 - 1, Block.Grass); } return map; } unsafe void MapSet(byte* ptr, int yStart, int yEnd, byte block) { int startIndex = yStart * length * width; int endIndex = (yEnd * length + (length - 1)) * width + (width - 1); int count = (endIndex - startIndex) + 1, offset = 0; while (offset < count) { int bytes = Math.Min(count - offset, width * length); MemUtils.memset((IntPtr)ptr, block, startIndex + offset, bytes); offset += bytes; CurrentProgress = (float)offset / count; } } } }