summaryrefslogtreecommitdiff
path: root/server/gen.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/gen.go')
-rw-r--r--server/gen.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/server/gen.go b/server/gen.go
new file mode 100644
index 0000000..68f9e5c
--- /dev/null
+++ b/server/gen.go
@@ -0,0 +1,62 @@
+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
+ }
+ }
+ })
+} \ No newline at end of file