public void Generate(Action callback, Vector2 inChunkCoords, World.WorldGenData inWorldGenData, ChunkGenerator inChunkGenerator) { _tempMap = Noise.GenerateNoiseData ( inWorldGenData.tempSeed, inWorldGenData.chunkSize, inChunkCoords, inWorldGenData.tempOctaves, inWorldGenData.tempScale, inWorldGenData.tempPersistance, inWorldGenData.tempLacunarity, inWorldGenData.tempRedistribution ); _humidMap = Noise.GenerateNoiseData ( inWorldGenData.humidSeed, inWorldGenData.chunkSize, inChunkCoords, inWorldGenData.humidOctaves, inWorldGenData.humidScale, inWorldGenData.humidPersistance, inWorldGenData.humidLacunarity, inWorldGenData.humidRedistribution ); _heightMap = Noise.GenerateNoiseData ( inWorldGenData.heightSeed, inWorldGenData.chunkSize, inChunkCoords, inWorldGenData.heightOctaves, inWorldGenData.heightScale, inWorldGenData.heightPersistance, inWorldGenData.heightLacunarity, inWorldGenData.heightRedistribution ); _falloffMap = Noise.GenerateNoiseData ( inWorldGenData.falloffSeed, inWorldGenData.chunkSize, inChunkCoords, inWorldGenData.falloffOctaves, inWorldGenData.falloffScale, inWorldGenData.falloffPersistance, inWorldGenData.falloffLacunarity, inWorldGenData.falloffRedistribution ); _falloffMap = Noise.GenerateFalloffMap(_falloffMap); _heightMap = Noise.ApplyFalloffMap(_heightMap, _falloffMap); lock (inChunkGenerator.noiseDataThreadInfoQueue) inChunkGenerator.noiseDataThreadInfoQueue.Enqueue(callback); }
public void Generate(Action callback, NoiseData inNoiseData, World.WorldGenData inWorldGenData, ChunkGenerator inChunkGenerator) { int textureSize = inWorldGenData.chunkSize; float[,] heightMap = inNoiseData.heightMap.noise; float[,] humidMap = inNoiseData.humidMap.noise; BiomeManager biomeManager = inChunkGenerator.biomeManager; // Calculate colormap _colorMap = new Color[textureSize * textureSize]; for (int y = 0; y < textureSize; y++) { for (int x = 0; x < textureSize; x++) { _colorMap[y * textureSize + x] = biomeManager.GetBiome(heightMap[x, y], humidMap[x, y]).color; } } lock (inChunkGenerator.textureDataThreadInfoQueue) inChunkGenerator.textureDataThreadInfoQueue.Enqueue(callback); }
public void Generate(Action callback, NoiseData inNoiseData, World.WorldGenData inWorldGenData, ChunkGenerator inChunkGenerator) { AnimationCurve heightMultiplierCurve = new AnimationCurve(inWorldGenData.heightMultiplierCurve.keys); float meshHeightMultiplier = inWorldGenData.meshHeightMultiplier; float[,] heightMap = inNoiseData.heightMap.noise; Vector3 upVector = Vector3.up; for (int y = 0; y < vertexSize; y++) { for (int x = 0; x < vertexSize; x++) { _vertexCoords[y * vertexSize + x] = new Vector3(x, heightMultiplierCurve.Evaluate(heightMap[x, y]) * meshHeightMultiplier, y); _normals[y * vertexSize + x] = upVector; _UVCoords[y * vertexSize + x] = new Vector2((float)x / meshSize, (float)y / meshSize); } } bool diagonal = false; for (int y = 0; y < meshSize; y++) { for (int x = 0; x < meshSize; x++) { int currentTileID = y * meshSize + x; int triVertOffset = y * vertexSize + x; int triangleOffset = currentTileID * 6; if (diagonal) { _triVertIDs[triangleOffset + 0] = triVertOffset + 0; _triVertIDs[triangleOffset + 1] = triVertOffset + vertexSize + 0; _triVertIDs[triangleOffset + 2] = triVertOffset + vertexSize + 1; _triVertIDs[triangleOffset + 3] = triVertOffset + 0; _triVertIDs[triangleOffset + 4] = triVertOffset + vertexSize + 1; _triVertIDs[triangleOffset + 5] = triVertOffset + 1; } else { _triVertIDs[triangleOffset + 0] = triVertOffset + 0; _triVertIDs[triangleOffset + 1] = triVertOffset + vertexSize + 0; _triVertIDs[triangleOffset + 2] = triVertOffset + 1; _triVertIDs[triangleOffset + 3] = triVertOffset + 1; _triVertIDs[triangleOffset + 4] = triVertOffset + vertexSize + 0; _triVertIDs[triangleOffset + 5] = triVertOffset + vertexSize + 1; } diagonal = !diagonal; } diagonal = !diagonal; } lock (inChunkGenerator.meshDataThreadInfoQueue) inChunkGenerator.meshDataThreadInfoQueue.Enqueue(callback); }