package server import "math" func generateFlat(v *blockVolume) { v.syncSetAll(func(yield func(blockType) bool) { var p blockPos for p.Y = 0; p.Y < v.size.Y / 2; p.Y++ { for p.X = 0; p.X < v.size.X; p.X++ { for p.Z = 0; p.Z < v.size.Z; p.Z++ { var block blockType if p.Y == 0 { block = 7 } else if p.Y == v.size.Y/2 - 1 { block = 2 } else if p.Y > v.size.Y/2 - 15 { block = 3 } else if p.Y < v.size.Y/2 { block = 1 } if !yield(block) { return } } } } }) } func generateSphere(v *blockVolume) { v.syncSetAll(func(yield func(blockType) bool) { var (p blockPos; radius = float64(v.size.X) / 2) for p.Y = 0; p.Y < v.size.Y; p.Y++ { for p.X = 0; p.X < v.size.X; p.X++ { for p.Z = 0; p.Z < v.size.Z; p.Z++ { var block blockType dist := math.Sqrt( float64(v.size.X/2 - p.X)*float64(v.size.X/2 - p.X) + float64(v.size.Y/2 - p.Y)*float64(v.size.Y/2 - p.Y) + float64(v.size.Z/2 - p.Z)*float64(v.size.Z/2 - p.Z), ) if dist > radius - 2 && dist <= radius { block = 25 } if !yield(block) { return } } } } }) } func generateDebug(v *blockVolume) { v.syncSetAll(func(yield func(blockType) bool) { for i := 0; i < 256; i++ { if !yield(blockType(i)) { return } } }) }