-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTriangle.cpp
111 lines (96 loc) · 2.59 KB
/
Triangle.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
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Module: Gameplay Programming
// Assignment 1: Pixl
#include "Triangle.h"
Triangle::Triangle() : Entity() {
spriteData.width = TriangleNS::WIDTH;
spriteData.height = TriangleNS::HEIGHT;
spriteData.x = TriangleNS::X;
spriteData.y = TriangleNS::Y;
spriteData.rect.bottom = TriangleNS::HEIGHT;
spriteData.rect.right = TriangleNS::WIDTH;
spriteData.scale = TriangleNS::SCALING;
velocity.x = 0;
velocity.y = 0;
startFrame = TriangleNS::TRIANGLE_START_FRAME;
endFrame = TriangleNS::TRIANGLE_END_FRAME;
currentFrame = startFrame;
radius = TriangleNS::WIDTH / 2.0f;
mass = TriangleNS::MASS;
collisionType = entityNS::CIRCLE;
}
bool Triangle::initialize(Game *gamePtr, int width, int height, int ncols, TextureManager *textureM) {
return(Entity::initialize(gamePtr, width, height, ncols, textureM));
}
void Triangle::draw() {
Image::draw();
}
void Triangle::update(float deltaTime) {
Entity::update(deltaTime);
spriteData.angle += deltaTime * TriangleNS::ROTATION_RATE;
spriteData.x += deltaTime * velocity.x;
spriteData.y += deltaTime * velocity.y;
}
// To spawn a triangle outside the border
void Triangle::spawn() {
// Set Triangles Details
setActive(true);
setHealth(1);
setFrames(TriangleNS::TRIANGLE_START_FRAME, TriangleNS::TRIANGLE_END_FRAME);
setCurrentFrame(TriangleNS::TRIANGLE_START_FRAME);
setVelocity(10, 20);
setObjectType(OBJECT_TYPE_TRIANGLE);
// random spawn on border
int side = rand() % 4;
switch (side) {
// left
case 0: {
this->setX(0 - rand() % 10);
this->setY(rand() % GAME_HEIGHT);
} break;
// top
case 1: {
this->setX(rand() % GAME_WIDTH);
this->setY(-rand() % 10);
} break;
// right
case 2: {
this->setX(GAME_WIDTH + rand() % 10);
this->setY(rand() % GAME_HEIGHT);
} break;
// bottom
case 3: {
this->setX(rand() % GAME_WIDTH);
this->setY(GAME_HEIGHT + rand() % 10);
} break;
}
}
void Triangle::damage(WEAPON weapon) {
switch (weapon) {
case WEAPON_MISSILE: {
this->setHealth(0);
} break;
case WEAPON_EXPLOSION: {
this->setHealth(0);
} break;
case WEAPON_PLAYER: {
this->setHealth(0);
} break;
}
if (this->getHealth() < 0)
this->setHealth(0);
}
void Triangle::trackingPlayer(Entity* player) {
// For tracking the player
double dx = player->getX() - getX();
double dy = player->getY() - getY();
// 1, 4 quad
if (dx > 0)
setRadians(atan(dy / dx));
// 2, 3 quad
else if (dx < 0)
setRadians(PI + atan(dy / dx));
setVelocity(
cos(getRadians()) * 50,
sin(getRadians()) * 50
);
}