-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmenu.go
More file actions
88 lines (73 loc) · 2.11 KB
/
menu.go
File metadata and controls
88 lines (73 loc) · 2.11 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package main
import (
"log"
"time"
"github.com/forestgiant/easing"
"github.com/forestgiant/eff"
"github.com/forestgiant/eff/component/tween"
)
var blockFont eff.Font
var scoreboardFont eff.Font
type menu struct {
effLetters []letterBlock
tetrisLetters []letterBlock
initialized bool
progress float64
progressStep float64
tweener tween.Tweener
}
func (m *menu) Init(c eff.Canvas) {
var err error
blockFont, err = c.OpenFont("assets/fonts/roboto/Roboto-Bold.ttf", 24)
if err != nil {
log.Fatal(err)
}
scoreboardFont, err = c.OpenFont("assets/fonts/roboto/Roboto-Bold.ttf", 12)
if err != nil {
log.Fatal(err)
}
m.progressStep = float64(1) / float64(25)
h := c.Height()
effStr := "EFF"
effPt := eff.Point{X: (c.Width() - len(effStr)*letterBlockSize) / 2, Y: (c.Height() - letterBlockSize*2) / 2}
m.effLetters = append(m.effLetters, letterBlocksForString(effStr, eff.Point{X: effPt.X, Y: -1 * letterBlockSize})...)
tetrisStr := "TETRIS"
tetrisPt := eff.Point{X: (c.Width() - len(tetrisStr)*letterBlockSize) / 2, Y: (c.Height()-letterBlockSize*2)/2 + letterBlockSize}
m.tetrisLetters = append(m.tetrisLetters, letterBlocksForString(tetrisStr, eff.Point{X: tetrisPt.X, Y: h + letterBlockSize})...)
m.tweener = tween.NewTweener(time.Millisecond*500, func(progress float64) {
startY := -1 * letterBlockSize
// startY := 100
endY := effPt.Y
y := int(float64(endY-startY) * progress)
for i := range m.effLetters {
m.effLetters[i].rect.Y = startY + y
}
startY = h + letterBlockSize
// startY = h - 100
endY = tetrisPt.Y
y = int(float64(endY-startY) * progress)
for i := range m.tetrisLetters {
m.tetrisLetters[i].rect.Y = startY + y
}
}, false, false, nil, easing.BounceOut)
m.initialized = true
}
func (m *menu) Initialized() bool {
return m.initialized
}
func (m *menu) Draw(c eff.Canvas) {
for _, block := range m.effLetters {
block.draw(blockFont, c)
}
for _, block := range m.tetrisLetters {
block.draw(blockFont, c)
}
}
func (m *menu) Update(c eff.Canvas) {
if m.progress < 1 {
m.progress += m.progressStep
}
if !m.tweener.Done {
m.tweener.Tween()
}
}