-
Notifications
You must be signed in to change notification settings - Fork 0
/
Bullet.pde
79 lines (76 loc) · 1.71 KB
/
Bullet.pde
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
class Bullet {
float size = SCALE/2, speed = MAXVELOCITY*2, r;
PVector loc, velocity;
int damage;
boolean visible = true;
Bullet(PVector loc_, PVector direction) {
loc = loc_;
velocity = PVector.mult(direction, speed);
r = size/2;
speed = MAXVELOCITY*2;
visible = true;
damage = 30;
}
void display() {
fill(0, 255, 0, 50); stroke(0);
ellipse(loc.x, loc.y, size, size);
stroke(255);
}
void update() {
loc.add(velocity);
}
void run() {
if (!visible) return;
update();
display();
}
boolean outOfBounds() {
if (loc.y>height || loc.y<0 || loc.x<0 || loc.x>width) return true;
else return false;
}
}
class FastBullet extends Bullet {
FastBullet(PVector loc_, PVector direction) {
super(loc_, direction);
velocity.mult(2);
damage = 20;
}
}
class ExplodingBullet extends Bullet {
Bullet[] shards;
Gun parent;
int countdown = 100;
boolean exploded = false;
ExplodingBullet(PVector loc_, PVector direction, Gun parent_) {
super(loc_, direction);
velocity.mult(0.75);
parent = parent_;
shards = new Bullet[6];
damage = 60;
for (int i=0; i<6; i++) {
shards[i] = new WeakBullet(PVector.add(loc, PVector.mult(velocity, countdown)), PVector.fromAngle(radians(i*60)));
shards[i].visible = false;
}
}
void update() {
loc.add(velocity);
countdown--;
if (countdown == 0) {
explode();
}
}
void explode() {
exploded = true;
for (int i=0; i<6; i++) {
shards[i].visible = true;
}
loc = new PVector(-1, -1);
}
}
class WeakBullet extends Bullet{
WeakBullet(PVector loc_, PVector direction) {
super(loc_, direction);
visible = false;
damage = 10;
}
}