-
Notifications
You must be signed in to change notification settings - Fork 0
/
projectile.go
86 lines (79 loc) · 1.7 KB
/
projectile.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
80
81
82
83
84
85
86
package main
import rl "github.com/gen2brain/raylib-go/raylib"
type projectile struct {
x, y int32
damage int
t string
}
var (
projectiles []*projectile
damageLookUp = map[string]int{
laser: laserDamage,
missle: missleDamage,
}
)
func drawProjectiles() {
for _, v := range projectiles {
txt := laserTexture2D
switch v.t {
case missle:
txt = missleTexture2D
break
}
rl.DrawTexture(txt, v.x, v.y, rl.White)
//rl.DrawRectangle(v.x, v.y, projectileRes, projectileRes, rl.Red)
}
}
func spawnProjectile(x, y int32, t string) {
projectiles = append(projectiles, &projectile{
x: x,
y: y,
damage: damageLookUp[t],
t: t,
})
}
func updateProjectilePos() {
for i, v := range projectiles {
v.y -= laserSpeed
if v.y < 0 && !rocketPlayer.powerUps["minigun"].active {
t := projectiles[:i]
if i+1 < len(projectiles) {
t = append(t, projectiles[i+1:]...)
}
projectiles = t
}
}
}
func checkForProjectileHit() {
for i, projectile := range projectiles {
pBox := rl.Rectangle{
X: float32(projectile.x),
Y: float32(projectile.y),
Width: float32(projectileRes),
Height: float32(projectileRes),
}
for _, enemy := range enemies {
if enemy.invisible {
continue
}
eBox := rl.Rectangle{
X: float32(enemy.x),
Y: float32(enemy.y),
Width: float32(enemyRes),
Height: float32(enemyRes),
}
if rl.CheckCollisionRecs(pBox, eBox) {
t := projectiles[:i]
if i+1 < len(projectiles) {
t = append(t, projectiles[i+1:]...)
}
projectiles = t
enemy.hp -= projectile.damage
if enemy.hp <= 0 {
enemy.invisible = true
rocketPlayer.destroyedObj[enemy.t] += 1
}
}
}
}
}