private void UpdateChunks() { var processed = factory.Completed(); if (!processed.IsEmpty) { foreach (var entity in processed) { var coord = entity.Coordinate; var mesh = entity.Element; var blocks = chunkBlocks.Get(coord); var chunk = Chunk.Create(blocks, material, coord.x, coord.y, coord.z, gameObject, mesh); chunks.Set(coord, chunk); } } }
public void Ping(Vector3Int position) { var current = generators.Get(MathHelper.Anchor(position.x, position.y, position.z, REGION)); chunkBlocks.Ping(position, radius, v => { var coord = MathHelper.Anchor(v.x, v.y, v.z, REGION); if (!generators.TryGet(ref coord, out ChunkGenerator biome)) { biome = current.Transitions[(int)(Random.value * (current.Transitions.Length))]; generators.Set(coord, biome); } var chunk = new ChunkBlocks(v.x, v.y, v.z, SIZE); var result = biome.Generate(v, chunk, SIZE); factory.Enqueue(result); return(result); });