Ejemplo n.º 1
0
    private Biome GetPrimaryAndHeight(Chunk chunk, int chunkPosX, int chunkPosZ, int x, int z, out double height)
    {
        Biome primaryBiome = chunk.GetBiome(chunkPosX, chunkPosZ, false);

        double x1, x2, y1, y2;

        x1 = x2 = y1 = y2 = primaryBiome.GetHeightValue(x, z);

        if (AttemptFindBiomeTransition(chunk, chunkPosX, chunkPosZ, primaryBiome, x, z, Chunk.BIOME_BLEND_DISTANCE, 1, 0, out int steps1, out double biomeHeight1))
        {
            x2 = biomeHeight1;
        }

        if (AttemptFindBiomeTransition(chunk, chunkPosX, chunkPosZ, primaryBiome, x, z, Chunk.BIOME_BLEND_DISTANCE, -1, 0, out int steps2, out double biomeHeight2))
        {
            x1 = biomeHeight2;
        }

        double biasX = (1.0 - steps1 / (double)(Chunk.BIOME_BLEND_DISTANCE + 1) + steps2 / (double)(Chunk.BIOME_BLEND_DISTANCE + 1)) / 2;

        if (AttemptFindBiomeTransition(chunk, chunkPosX, chunkPosZ, primaryBiome, x, z, Chunk.BIOME_BLEND_DISTANCE, 0, 1, out int steps3, out double biomeHeight3))
        {
            y2 = biomeHeight3;
        }

        if (AttemptFindBiomeTransition(chunk, chunkPosX, chunkPosZ, primaryBiome, x, z, Chunk.BIOME_BLEND_DISTANCE, 0, -1, out int steps4, out double biomeHeight4))
        {
            y1 = biomeHeight4;
        }

        double biasZ = (1.0 - steps3 / (double)(Chunk.BIOME_BLEND_DISTANCE + 1) + steps4 / (double)(Chunk.BIOME_BLEND_DISTANCE + 1)) / 2;

        height = x1;
        return(primaryBiome);
    }
Ejemplo n.º 2
0
    private bool AttemptFindBiomeTransition(Chunk chunk, int chunkPosX, int chunkPosZ, Biome primaryBiome, int x, int z, int maxDistance, int xMove, int zMove, out int steps, out double height)
    {
        for (int dist = 1; dist <= maxDistance; dist++)
        {
            int newX = x + xMove * dist;
            int newZ = z + zMove * dist;

            Biome biome = chunk.GetBiome(chunkPosX + xMove * dist, chunkPosZ + zMove * dist, false);
            if (biome != primaryBiome)
            {
                steps  = dist;
                height = biome.GetHeightValue(newX, newZ);

                return(true);
            }
        }

        steps  = 0;
        height = 0;

        return(false);
    }