-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathhand.go
79 lines (66 loc) · 1.31 KB
/
hand.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"github.com/hajimehoshi/ebiten/v2"
)
type Hand struct {
cards []Card
selected int
}
func NewHand() *Hand {
return &Hand{}
}
func (h *Hand) All() []Card {
return h.cards
}
func (h *Hand) Put(c Card) {
h.cards = append(h.cards, c)
}
func (h *Hand) Remove() *Card {
if len(h.cards) == 0 {
return nil
}
card := h.Selected()
h.cards = append(h.cards[:h.selected], h.cards[h.selected+1:]...)
if h.selected > len(h.cards)-1 {
h.selected = len(h.cards) - 1
}
return card
}
func (h *Hand) Selected() *Card {
if len(h.cards) == 0 {
return nil
}
card := h.cards[h.selected]
return &card
}
func (h *Hand) Left() {
if h.selected <= 0 {
h.selected = len(h.cards) - 1
return
}
h.selected--
}
func (h *Hand) Right() {
if h.selected >= len(h.cards)-1 {
h.selected = 0
return
}
h.selected++
}
func (h *Hand) Draw(target *ebiten.Image) {
// angle := (180 / math.Pi) / float64(len(h.cards))
for i, c := range h.cards {
var scale float64
if h.selected == i {
scale = .12
} else {
scale = .10
}
op := ebiten.DrawImageOptions{}
op.GeoM.Scale(scale, scale)
// op.GeoM.Rotate(float64(-3*i) * angle)
op.GeoM.Translate(config.Layout.Hand.StartX, config.Layout.Hand.StartY)
op.GeoM.Translate(float64(i)*config.Layout.Card.Width, 0)
target.DrawImage(c.image, &op)
}
}