public Chunk GetChunk(IntVector3 start, IntVector3 end) { var chunk = new Chunk(start, end); var pos = new IntVector3(start); for (pos.X = chunk.Start.X; pos.X < chunk.End.X; pos.X++) for (pos.Y = chunk.Start.Y; pos.Y < chunk.End.Y; pos.Y++) for (pos.Z = chunk.Start.Z; pos.Z < chunk.End.Z; pos.Z++) chunk.SetVoxel(pos, GetVoxel(pos)); return chunk; }
public void AddChunk(Chunk chunk) { var pos = new IntVector3(chunk.Start); for (pos.X = chunk.Start.X; pos.X < chunk.End.X; pos.X++) for (pos.Y = chunk.Start.Y; pos.Y < chunk.End.Y; pos.Y++) for (pos.Z = chunk.Start.Z; pos.Z < chunk.End.Z; pos.Z++) SetVoxel(pos, chunk.GetVoxel(pos)); if (ChunkAdded != null) ChunkAdded(chunk); }
public virtual Chunk GenerateChunk(IntVector3 start, IntVector3 end, int lod = 1) { Debug.WriteLine("Generating Chunk at " + start.ToString()); var chunk = new Chunk(start, end); var pos = new IntVector3(start); for (pos.X = chunk.Start.X; pos.X < chunk.End.X; pos.X += lod) for (pos.Y = chunk.Start.Y; pos.Y < chunk.End.Y; pos.Y += lod) for (pos.Z = chunk.Start.Z; pos.Z < chunk.End.Z; pos.Z += lod) chunk.SetVoxel(pos, GenerateVoxel(pos)); return chunk; }
public void RemoveChunk(Chunk chunk) { var pos = new IntVector3(chunk.Start); for (pos.X = chunk.Start.X; pos.X < chunk.End.X; pos.X++) for (pos.Y = chunk.Start.Y; pos.Y < chunk.End.Y; pos.Y++) for (pos.Z = chunk.Start.Z; pos.Z < chunk.End.Z; pos.Z++) { if (Voxels.ContainsKey (pos)) Voxels.Remove (pos); } if (ChunkRemoved != null) ChunkRemoved(chunk); }
public override Chunk GenerateChunk(IntVector3 start, IntVector3 end, int lod = 1) { var result = new Chunk(new IntVector3(start), new IntVector3(end)); if (NoiseGen == null) return result; float pointHeight = 0f; int y = 0; var pos = new IntVector3(start); // Iterate over every voxel of our volume for (int z = result.Start.Z; z <= result.End.Z; z++) { pos.Z = z; for (int x = result.Start.X; x <= result.End.X; x++) { pos.X = x; // get height of the terrain at this x,z pos pointHeight = Height(pos.X, pos.Z); if (pointHeight > 0f) { // loop through y voxel positions at x,z for (y = result.Start.Y; y <= result.End.Y; y++) { // generate a voxel for the stuff under the ground within the chunk pos.Y = y; result.SetVoxel(pos, GenerateVoxel(pos, pointHeight)); } } else if (result.Start.Y == 0) { // dump in a base rock voxel at y == 0 pos.Y = 0; result.SetVoxel(pos, new Voxel(255, 0)); } } } return result; }
/* void BuildModules() { gen = new Perlin { Seed = Seed, OctaveCount = 2, Frequency = 0.06f }; } */ public override Chunk GenerateChunk(IntVector3 start, IntVector3 end, int lod = 1) { var result = new Chunk(new IntVector3(start), new IntVector3(end)); var pos = new IntVector3(start); // Iterate over every voxel of our volume for (int x = result.Start.X; x <= result.End.X; x++) { pos.X = x; for (int z = result.Start.Z; z <= result.End.Z; z++) { pos.Z = z; for (int y = result.Start.Y; y <= result.End.Y; y++) { pos.Y = y; result.SetVoxel(pos, GenerateVoxel(pos)); } } } return result; }