-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbullets.go
More file actions
82 lines (69 loc) · 1.47 KB
/
bullets.go
File metadata and controls
82 lines (69 loc) · 1.47 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
package golaga
import (
"github.com/hajimehoshi/ebiten/v2"
"log"
"time"
)
func NewBullets(player *Player) *Bullets {
return &Bullets{
player: player,
bullets: []*Bullet{},
}
}
type Bullets struct {
bullets []*Bullet
lastBulletSpawned time.Time
player *Player
}
func (b *Bullets) GetBullets() []*Bullet {
return b.bullets
}
func (b *Bullets) Update() error {
if ebiten.IsKeyPressed(ebiten.KeySpace) {
if time.Since(b.lastBulletSpawned) > TimeBetweenBullets {
b.bullets = append(b.bullets, NewBullet(*b.player.pos))
b.lastBulletSpawned = time.Now()
go Bang()
}
}
for _, bullet := range b.bullets {
if err := bullet.Update(); err != nil {
log.Printf("Error updating bullet: %v", err)
}
}
return nil
}
func (b *Bullets) Draw(screen *ebiten.Image) {
if b == nil || b.bullets == nil {
return
}
for _, bullet := range b.GetBullets() {
if bullet == nil {
continue
}
screen.DrawImage(bullet.img, &ebiten.DrawImageOptions{
GeoM: *bullet.pos,
})
}
}
func NewBullet(playerPos ebiten.GeoM) *Bullet {
bpos := ebiten.GeoM{}
bpos.Translate(playerPos.Element(0, 2)+47, playerPos.Element(1, 2)-20)
return &Bullet{artCache["Fire_Shot_4_2"], &bpos}
}
type Bullet struct {
img *ebiten.Image
pos *ebiten.GeoM
}
func (b *Bullet) Update() error {
if b == nil {
return nil
}
b.pos.Translate(0, -1*BulletSpeed)
return nil
}
func (b *Bullet) Draw(screen *ebiten.Image) {
screen.DrawImage(b.img, &ebiten.DrawImageOptions{
GeoM: *b.pos,
})
}