Esempio n. 1
0
func (b *Box) inSolid(world mapgen.BlockSource) bool {
	blockCollide := func(x, y, z int) bool {
		blockCoord := coords.Block{x, y, z}
		if world.Block(blockCoord).Solid() {
			center := blockCoord.Center()
			blockBox := NewBox(center.Vec3(), vmath.Vec3{0.5, 0.5, 0.5})
			return b.Collides(blockBox)
		}
		return false
	}
	f := func(n float64) int {
		return int(math.Floor(n))
	}
	xs := f(b.xs)
	xe := f(b.xe)
	ys := f(b.ys)
	ye := f(b.ye)
	zs := f(b.zs)
	ze := f(b.ze)

	for x := xs; x <= xe; x++ {
		for y := ys; y <= ye; y++ {
			for z := zs; z <= ze; z++ {
				if blockCollide(x, y, z) {
					return true
				}
			}
		}
	}
	return false
}