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 }