summaryrefslogtreecommitdiff
path: root/server/gen.go
blob: 68f9e5c98550bf2e143aca6d88db9185e67e39c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
			}
		}
	})
}