-
Notifications
You must be signed in to change notification settings - Fork 5
/
pickup_bonus.go
78 lines (63 loc) · 1.42 KB
/
pickup_bonus.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
package main
import (
resource "github.com/quasilyte/ebitengine-resource"
"github.com/quasilyte/ge"
"github.com/quasilyte/ge/gesignal"
"github.com/quasilyte/ge/physics"
"github.com/quasilyte/gmath"
)
type pickupBonusKind uint8
const (
pickupHP pickupBonusKind = iota
pickupAmmo
)
var pickupKindList = []pickupBonusKind{
pickupHP,
pickupAmmo,
}
type pickupBonus struct {
scene *ge.Scene
kind pickupBonusKind
sprite *ge.Sprite
body physics.Body
EventDestroyed gesignal.Event[*pickupBonus]
}
func newPickupBonus(pos gmath.Vec, kind pickupBonusKind) *pickupBonus {
b := &pickupBonus{kind: kind}
b.body.Pos = pos
return b
}
func (b *pickupBonus) Init(scene *ge.Scene) {
b.scene = scene
var spriteID resource.ImageID
switch b.kind {
case pickupHP:
spriteID = ImagePickupHP
case pickupAmmo:
spriteID = ImagePickupAmmo
default:
panic("unexpected pickup bonus kind")
}
b.sprite = scene.NewSprite(spriteID)
b.sprite.Pos.Base = &b.body.Pos
scene.AddGraphics(b.sprite)
b.body.InitStaticCircle(b, 16)
b.body.LayerMask = 0b11
scene.AddBody(&b.body)
}
func (b *pickupBonus) IsDisposed() bool {
return b.sprite.IsDisposed()
}
func (b *pickupBonus) Destroy() {
e := newExplosion(b.body.Pos)
e.Image = ImageExplosion2
e.Hue = 2
b.scene.AddObject(e)
b.EventDestroyed.Emit(b)
b.Dispose()
}
func (b *pickupBonus) Dispose() {
b.sprite.Dispose()
b.body.Dispose()
}
func (b *pickupBonus) Update(delta float64) {}