Esempio n. 1
0
func (ct *CaveTest) block(bc coords.Block, height int) mapgen.Block {
	if bc.X == 0 && bc.Y == 16 && bc.Z == 0 {
		return mapgen.BLOCK_SPAWN
	}

	if bc.Y > height {
		return mapgen.BLOCK_AIR
	}

	// Calculate a cave
	xf, yf, zf := bc.Float64()
	ridge1 := ct.ridgedFilter.Filter(xf, yf, zf, ct.simplexNoise)
	ridge2 := ct.ridgedFilter.Filter(xf, yf, zf, ct.simplexNoise2)
	if ridge1 >= 0.95 {
		ridge1 = 1
	} else {
		ridge1 = 0
	}
	if ridge2 >= 0.95 {
		ridge2 = 1
	} else {
		ridge2 = 0
	}
	if ridge1*ridge2 == 1 {
		if DEBUG {
			return mapgen.BLOCK_STONE
		}
		return mapgen.BLOCK_AIR
	}

	if bc.Y == height {
		if DEBUG {
			return mapgen.BLOCK_GLASS
		}
		return mapgen.BLOCK_GRASS
	}

	if DEBUG {
		return mapgen.BLOCK_AIR
	}
	if bc.Y < height-3 {
		return mapgen.BLOCK_STONE
	}
	if height > bc.Y {
		return mapgen.BLOCK_DIRT
	}

	return mapgen.BLOCK_AIR
}