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
}
}
})
}
|