-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProjectile.cpp
More file actions
142 lines (113 loc) · 4.5 KB
/
Projectile.cpp
File metadata and controls
142 lines (113 loc) · 4.5 KB
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
#include "Projectile.h"
// Globální zásobník projektilù
std::queue<Projectile> projectileQueue;
Projectile::Projectile(glm::vec3 initialPosition)
: position(initialPosition) {}
//void Projectile::fire(Projectile& projectile, glm::vec3 targetPosition) {
// // Nastavení pozice støely na cílovou pozici
// projectile.position = targetPosition;
// drawProjectile(projectile);
//}
void drawCube2(float size, float x, float y, float z) {
//std::cout << "Vykreslení: (" << x << ", " << y << ", " << z << ")" << std::endl;
// Vypoèítání poloviny velikosti kostky pro pozici støedu
float halfSize = size / 2.0f;
// Nastavení pozice støedu kostky
glTranslatef(x, y, z);
// Nastavení barvy kostky
glColor3f(1.0f, 0.0f, 0.0f); // Èervená barva
// Vykreslení kostky
glBegin(GL_QUADS);
// Pøední stìna
glVertex3f(-halfSize, -halfSize, halfSize);
glVertex3f(halfSize, -halfSize, halfSize);
glVertex3f(halfSize, halfSize, halfSize);
glVertex3f(-halfSize, halfSize, halfSize);
// Zadní stìna
glVertex3f(-halfSize, -halfSize, -halfSize);
glVertex3f(-halfSize, halfSize, -halfSize);
glVertex3f(halfSize, halfSize, -halfSize);
glVertex3f(halfSize, -halfSize, -halfSize);
// Horní stìna
glVertex3f(-halfSize, halfSize, -halfSize);
glVertex3f(-halfSize, halfSize, halfSize);
glVertex3f(halfSize, halfSize, halfSize);
glVertex3f(halfSize, halfSize, -halfSize);
// Dolní stìna
glVertex3f(-halfSize, -halfSize, -halfSize);
glVertex3f(halfSize, -halfSize, -halfSize);
glVertex3f(halfSize, -halfSize, halfSize);
glVertex3f(-halfSize, -halfSize, halfSize);
// Pravá stìna
glVertex3f(halfSize, -halfSize, -halfSize);
glVertex3f(halfSize, halfSize, -halfSize);
glVertex3f(halfSize, halfSize, halfSize);
glVertex3f(halfSize, -halfSize, halfSize);
// Levá stìna
glVertex3f(-halfSize, -halfSize, -halfSize);
glVertex3f(-halfSize, -halfSize, halfSize);
glVertex3f(-halfSize, halfSize, halfSize);
glVertex3f(-halfSize, halfSize, -halfSize);
glEnd();
//glPopMatrix();
glFlush();
}
void addProjectile(const glm::vec3& position) {
Projectile newProjectile(position);
projectileQueue.push(newProjectile);
}
void Projectile::drawAllProjectiles(float size) {
//
// TODO REPAIR MOVEMENT -> NOT MOVING :(
//
// Vytvoøíme kopii fronty
std::queue<Projectile> temporaryQueue = projectileQueue;
// Simulace pohybu projektilù
glm::vec3 movement(10.0f, 0.0f, 0.0f); // Pohyb o 0.1 na osu x
Projectile projectile; // Vytvoøení objektu Projectile
// Projdeme všechny projektilové objekty ve frontì
while (!temporaryQueue.empty()) {
// Získání projektilu z fronty
projectile = projectileQueue.front();
// Posun projektilu o vektor movement
projectile.position += movement;
projectile = temporaryQueue.front();
drawCube2(size, projectile.position.x, projectile.position.y, projectile.position.z);
temporaryQueue.pop(); // Neprovádíme pop na pùvodní frontì
}
}
void Projectile::drawProjectile(glm::vec3 _position) {
float size = 2.0f;
drawCube2(size, _position.x, _position.y, _position.z);
}
void removeFirstProjectile() {
if (!projectileQueue.empty()) {
projectileQueue.pop();
}
}
// Funkce pro obsluhu kliknutí myší
void Projectile::onKeyboardEvent(GLFWwindow* window, glm::vec3 _position, int button, int action, int mods) {
if (button == GLFW_MOUSE_BUTTON_LEFT && action == GLFW_PRESS) {
//std::cout << "Leve tlacitko mysi bylo stisknuto." << std::endl;
Projectile newProjectile(_position); // Vytvoø nový objekt Projectile
//std::cout << "_position: (" << _position.x << ", " << _position.y << ", " << _position.z << ")" << std::endl;
//projectileStack.emplace_back(newProjectile); // Pøidej nový projektil do zásobníku
//drawAllProjectiles(10.0f); // Vykresli všechny projektilky jako kostky
addProjectile(_position);
}
}
std::queue<Projectile> Projectile::getAllProjectiles() {
return projectileQueue;
}
void Projectile::addMovementToAllProjectiles(glm::vec3 _movement) {
std::queue<Projectile> resultQueue;
while (!projectileQueue.empty()) {
Projectile currentProjectile = projectileQueue.front();
currentProjectile.position += _movement;
resultQueue.push(currentProjectile);
projectileQueue.pop();
}
// Aktualizovat frontu projektilù
projectileQueue = resultQueue;
}