/
wave.go
65 lines (55 loc) · 1.4 KB
/
wave.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
61
62
63
64
65
package main
import (
"time"
"github.com/draeron/golaunchpad/pkg/launchpad"
"github.com/draeron/golaunchpad/examples/common"
"github.com/draeron/golaunchpad/pkg/launchpad/button"
"github.com/draeron/golaunchpad/pkg/launchpad/event"
"github.com/draeron/gopkgs/color"
"github.com/draeron/gopkgs/logger"
)
var log = logger.NewLogrus("main")
var pad launchpad.Controller
func main() {
log.Info("starting wave example")
defer log.Info("exiting wave example")
pad = common.Setup()
defer pad.Close()
setup()
common.WaitExit()
}
func setup() {
common.Must(pad.SetColorAll(color.Black))
common.Must(pad.SetColor(button.Logo, color.LightGray))
go func() {
ch := make(chan event.Event, 10)
pad.Subscribe(ch)
for e := range ch {
if e.Btn.IsPad() {
if e.Type == event.Pressed {
col := common.RandColor()
err := pad.SetColor(e.Btn, col)
log.ErrorIf(err, "")
go wavefx(e.Btn, col)
} else if e.Type == event.Released {
err := pad.SetColor(e.Btn, color.Black)
log.ErrorIf(err, "")
}
}
}
}()
}
func wavefx(btn button.Button, col color.Color) {
x, y := btn.Coord()
for radius := 1; radius < 8; radius++ {
btns := []button.Button{
button.FromXY(x+radius, y),
button.FromXY(x, y+radius),
button.FromXY(x-radius, y),
button.FromXY(x, y-radius),
}
pad.SetColorMany(btns, col)
<-time.After(time.Millisecond * 50)
pad.SetColorMany(btns, color.Black)
}
}