コード例 #1
0
ファイル: ChunkGenerator.cs プロジェクト: Alan-Baylis/Caravan
    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);
    }
コード例 #2
0
ファイル: ChunkGenerator.cs プロジェクト: Alan-Baylis/Caravan
    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);
    }
コード例 #3
0
ファイル: ChunkGenerator.cs プロジェクト: Alan-Baylis/Caravan
    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);
    }