-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathzoom.go
60 lines (55 loc) · 1.15 KB
/
zoom.go
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
package main
import (
"github.com/ArchRobison/FrequonInvaders/universe"
)
var (
zoomRate float32
zoomAmount float32
zoomCompression float32
)
const (
// 60/64 ratio derived from original C++ version assuming it ran at 60 frames/sec
zoomGrow = 60. / 64.
zoomShrink = -zoomGrow
)
// Set zoom rate. Argument should be zoomGrow or zoomShrink for normal speed.
func setZoom(dir float32) {
zoomRate = dir
if benchmarking {
// Accelerate zoom
zoomRate *= 20
}
if dir > 0 {
zoomAmount = 0
// Disable birthing of Frequons until zoom completes.
universe.SetNLiveMax(0)
} else {
// Use current zoomAmount
}
}
func updateZoom(dt float32) {
z := zoomAmount + zoomRate*dt
if z > 1 {
z = 1
if zoomAmount < 1 {
// Have reached full zoom. Enable birthing of Frequons.
if currentMode == modeGame {
universe.SetNLiveMax(1)
} else if benchmarking {
universe.SetNLiveMax(8)
} else {
universe.SetNLiveMax(maxFrequon.Value)
}
}
} else if z < 0 {
z = 0
}
zoomAmount = z
if z != 0 {
const min, max = 1., 16.
zoomCompression = min / (min + (max-min)*(1-z))
} else {
fourierIsVisible = false
endGame()
}
}