-
Notifications
You must be signed in to change notification settings - Fork 0
/
Bomb.cpp
59 lines (50 loc) · 1.11 KB
/
Bomb.cpp
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
#include "Bomb.h"
#include "Window.h"
Bomb::Bomb(glm::vec3 pos)
{
transform = pos;
bomb = new OBJObject("bomb.obj", "bomb.jpg");
sphere = new Sphere("sphere.obj", "explosion.jpg");
glm::mat4 tmp = bomb->toWorld;
tmp = glm::translate(tmp, pos);
tmp = glm::rotate(tmp, glm::radians(90.0f), glm::vec3(0, 1, 0));
bomb->toWorld = tmp;
isVisible = false;
hSpeed = 0.15f;
vSpeed = 0.0f;
}
Bomb::~Bomb()
{
}
void Bomb::draw(GLuint shaderProgram)
{
if (isVisible) {
bomb->draw(shaderProgram);
}
if (sphere->isVisible) {
sphere->draw(shaderProgram);
}
}
void Bomb::update()
{
if (isVisible) {
transform.y -= vSpeed;
transform.z = Bomber::speed * 1.5f;
vSpeed = 0.002;
bomb->toWorld[3] = glm::vec4(transform, 1.0f);
if (transform.y <= 0) {
isVisible = false;
sphere->explode(glm::vec3(transform.x, 0, transform.z));
}
}
sphere->update();
}
void Bomb::dropBomb(glm::vec3 pos) {
transform = pos;
bomb->toWorld[3] = glm::vec4(transform, 1.0f);
if (Bomber::turnBack) {
bomb->toWorld = glm::rotate(bomb->toWorld, glm::radians(180.0f), glm::vec3(0, 1, 0));
}
isVisible = true;
vSpeed = 0.0f;
}