00001 #include <windows.h>
00002 #include "bullet.h"
00003 #include "decal.h"
00004 #include "vector.h"
00005 #include "vertex.h"
00006 #include "polygon.h"
00007 #include "texture.h"
00008 #include "listnode.h"
00009 #include "collision.h"
00010 #include "general.h"
00011 #include "camera.h"
00012 #include "bsp.h"
00013 #include "particle.h"
00014 #include "mmgr.h"
00015
00016 extern VERTEX* vertex;
00017 extern TEXTURE* texture;
00018 extern int numBullets;
00019 extern BULLET* bullet;
00020 extern int numBulletsActive;
00021 extern int numleaves;
00022 extern LinkedList<ListNode> LeafList;
00023 extern LinkedList<ListNode> PartitionList;
00024 extern ListNode* listnode;
00025 extern CAMERA* camera;
00026 extern int currentCamera;
00027 extern int bulletspeed;
00028 extern int bullettype;
00029 extern BSP_node* root;
00030 extern int maxDecals;
00031 extern DECAL muzzleflashdecal;
00032 extern DECAL impactflashdecal;
00033
00034 BULLET::BULLET()
00035 {
00036 }
00037
00038 BULLET::~BULLET()
00039 {
00040 }
00041
00042 void BULLET::Reset()
00043 {
00044 Orientation.Reset();
00045 Position.Reset();
00046 Delta_x = 0.0;
00047 Delta_y = 0.0;
00048 Delta_z = 0.0;
00049 Matrix.LoadIdentity();
00050 }
00051
00052 void BULLET::Initialize()
00053 {
00054 modelvertlist = new VERTEX[numverts];
00055 modelpolylist = new POLYGON[numpolys];
00056 }
00057
00058 void BULLET::Draw()
00059 {
00060 glPushMatrix();
00061 glTranslatef(Position.x,Position.y,Position.z);
00062 Matrix.QuatToMatrix(Orientation);
00063 glMultMatrixf(Matrix.Element);
00064
00065 float mat_ambient[] = { 0.3, 0.3, 0.3, 1.0 };
00066 float mat_diffuse[] = { 0.3, 0.3, 0.3, 1.0 };
00067 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
00068 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00069
00070 glDisable(GL_TEXTURE_2D);
00071 for (int loop = 0; loop < numpolys; loop++)
00072 {
00073 glBegin(GL_TRIANGLES);
00074 glNormal3fv(&modelpolylist[loop].Vertex[0].nx);
00075 glTexCoord2f(modelpolylist[loop].Vertex[0].u, modelpolylist[loop].Vertex[0].v);
00076 glVertex3fv(&modelpolylist[loop].Vertex[0].x);
00077 glTexCoord2f(modelpolylist[loop].Vertex[1].u, modelpolylist[loop].Vertex[1].v);
00078 glVertex3fv(&modelpolylist[loop].Vertex[1].x);
00079 glTexCoord2f(modelpolylist[loop].Vertex[2].u, modelpolylist[loop].Vertex[2].v);
00080 glVertex3fv(&modelpolylist[loop].Vertex[2].x);
00081 glEnd();
00082 }
00083 glEnable(GL_TEXTURE_2D);
00084 glPopMatrix();
00085 }
00086
00087 void BULLET::Delete()
00088 {
00089 delete[] modelvertlist;
00090 delete[] modelpolylist;
00091 }
00092
00093 void InitializeBullets()
00094 {
00095 for (int loop = 0; loop < numBullets; loop++)
00096 {
00097 bullet[loop].numverts = 8;
00098 bullet[loop].numpolys = 12;
00099 bullet[loop].Initialize();
00100 bullet[loop].active = 0;
00101
00102 vertex[0].x = -0.05;
00103 vertex[0].y = 0.05;
00104 vertex[0].z = 0.0;
00105
00106 vertex[1].x = 0.05;
00107 vertex[1].y = 0.05;
00108 vertex[1].z = 0.0;
00109
00110 vertex[2].x = 0.05;
00111 vertex[2].y = 0.05;
00112 vertex[2].z = -0.2;
00113
00114 vertex[3].x = -0.05;
00115 vertex[3].y = 0.05;
00116 vertex[3].z = -0.2;
00117
00118 vertex[4].x = -0.05;
00119 vertex[4].y = -0.05;
00120 vertex[4].z = 0.0;
00121
00122 vertex[5].x = 0.05;
00123 vertex[5].y = -0.05;
00124 vertex[5].z = 0.0;
00125
00126 vertex[6].x = 0.05;
00127 vertex[6].y = -0.05;
00128 vertex[6].z = -0.2;
00129
00130 vertex[7].x = -0.05;
00131 vertex[7].y = -0.05;
00132 vertex[7].z = -0.2;
00133
00134 bullet[loop].modelpolylist[0].Scale[0] = 1.0;
00135 bullet[loop].modelpolylist[0].Scale[1] = 1.0;
00136 bullet[loop].modelpolylist[0].Shift[0] = 0.0;
00137 bullet[loop].modelpolylist[0].Shift[1] = 0.0;
00138 bullet[loop].modelpolylist[0].Rotate = 0.0;
00139 bullet[loop].modelpolylist[0].Vertex[0] = vertex[0];
00140 bullet[loop].modelpolylist[0].Vertex[1] = vertex[2];
00141 bullet[loop].modelpolylist[0].Vertex[2] = vertex[3];
00142 bullet[loop].modelpolylist[0].Texture = texture[4].TexID;
00143 bullet[loop].modelpolylist[0].Vertex[0].u = 0.0;
00144 bullet[loop].modelpolylist[0].Vertex[0].v = 0.0;
00145 bullet[loop].modelpolylist[0].Vertex[1].u = 1.0;
00146 bullet[loop].modelpolylist[0].Vertex[1].v = 1.0;
00147 bullet[loop].modelpolylist[0].Vertex[2].u = 0.0;
00148 bullet[loop].modelpolylist[0].Vertex[2].v = 1.0;
00149
00150 bullet[loop].modelpolylist[1].Scale[0] = 1.0;
00151 bullet[loop].modelpolylist[1].Scale[1] = 1.0;
00152 bullet[loop].modelpolylist[1].Shift[0] = 0.0;
00153 bullet[loop].modelpolylist[1].Shift[1] = 0.0;
00154 bullet[loop].modelpolylist[1].Rotate = 0.0;
00155 bullet[loop].modelpolylist[1].Vertex[0] = vertex[0];
00156 bullet[loop].modelpolylist[1].Vertex[1] = vertex[1];
00157 bullet[loop].modelpolylist[1].Vertex[2] = vertex[2];
00158 bullet[loop].modelpolylist[1].Texture = texture[4].TexID;
00159 bullet[loop].modelpolylist[1].Vertex[0].u = 0.0;
00160 bullet[loop].modelpolylist[1].Vertex[0].v = 0.0;
00161 bullet[loop].modelpolylist[1].Vertex[1].u = 1.0;
00162 bullet[loop].modelpolylist[1].Vertex[1].v = 0.0;
00163 bullet[loop].modelpolylist[1].Vertex[2].u = 1.0;
00164 bullet[loop].modelpolylist[1].Vertex[2].v = 1.0;
00165
00166 bullet[loop].modelpolylist[2].Scale[0] = 1.0;
00167 bullet[loop].modelpolylist[2].Scale[1] = 1.0;
00168 bullet[loop].modelpolylist[2].Shift[0] = 0.0;
00169 bullet[loop].modelpolylist[2].Shift[1] = 0.0;
00170 bullet[loop].modelpolylist[2].Rotate = 0.0;
00171 bullet[loop].modelpolylist[2].Vertex[0] = vertex[5];
00172 bullet[loop].modelpolylist[2].Vertex[1] = vertex[7];
00173 bullet[loop].modelpolylist[2].Vertex[2] = vertex[6];
00174 bullet[loop].modelpolylist[2].Texture = texture[4].TexID;
00175 bullet[loop].modelpolylist[2].Vertex[0].u = 0.0;
00176 bullet[loop].modelpolylist[2].Vertex[0].v = 0.0;
00177 bullet[loop].modelpolylist[2].Vertex[1].u = 1.0;
00178 bullet[loop].modelpolylist[2].Vertex[1].v = 1.0;
00179 bullet[loop].modelpolylist[2].Vertex[2].u = 0.0;
00180 bullet[loop].modelpolylist[2].Vertex[2].v = 1.0;
00181
00182 bullet[loop].modelpolylist[3].Scale[0] = 1.0;
00183 bullet[loop].modelpolylist[3].Scale[1] = 1.0;
00184 bullet[loop].modelpolylist[3].Shift[0] = 0.0;
00185 bullet[loop].modelpolylist[3].Shift[1] = 0.0;
00186 bullet[loop].modelpolylist[3].Rotate = 0.0;
00187 bullet[loop].modelpolylist[3].Vertex[0] = vertex[5];
00188 bullet[loop].modelpolylist[3].Vertex[1] = vertex[4];
00189 bullet[loop].modelpolylist[3].Vertex[2] = vertex[7];
00190 bullet[loop].modelpolylist[3].Texture = texture[4].TexID;
00191 bullet[loop].modelpolylist[3].Vertex[0].u = 0.0;
00192 bullet[loop].modelpolylist[3].Vertex[0].v = 0.0;
00193 bullet[loop].modelpolylist[3].Vertex[1].u = 1.0;
00194 bullet[loop].modelpolylist[3].Vertex[1].v = 0.0;
00195 bullet[loop].modelpolylist[3].Vertex[2].u = 1.0;
00196 bullet[loop].modelpolylist[3].Vertex[2].v = 1.0;
00197
00198 bullet[loop].modelpolylist[4].Scale[0] = 1.0;
00199 bullet[loop].modelpolylist[4].Scale[1] = 1.0;
00200 bullet[loop].modelpolylist[4].Shift[0] = 0.0;
00201 bullet[loop].modelpolylist[4].Shift[1] = 0.0;
00202 bullet[loop].modelpolylist[4].Rotate = 0.0;
00203 bullet[loop].modelpolylist[4].Vertex[0] = vertex[4];
00204 bullet[loop].modelpolylist[4].Vertex[1] = vertex[1];
00205 bullet[loop].modelpolylist[4].Vertex[2] = vertex[0];
00206 bullet[loop].modelpolylist[4].Texture = texture[4].TexID;
00207 bullet[loop].modelpolylist[4].Vertex[0].u = 0.0;
00208 bullet[loop].modelpolylist[4].Vertex[0].v = 0.0;
00209 bullet[loop].modelpolylist[4].Vertex[1].u = 1.0;
00210 bullet[loop].modelpolylist[4].Vertex[1].v = 1.0;
00211 bullet[loop].modelpolylist[4].Vertex[2].u = 0.0;
00212 bullet[loop].modelpolylist[4].Vertex[2].v = 1.0;
00213
00214 bullet[loop].modelpolylist[5].Scale[0] = 1.0;
00215 bullet[loop].modelpolylist[5].Scale[1] = 1.0;
00216 bullet[loop].modelpolylist[5].Shift[0] = 0.0;
00217 bullet[loop].modelpolylist[5].Shift[1] = 0.0;
00218 bullet[loop].modelpolylist[5].Rotate = 0.0;
00219 bullet[loop].modelpolylist[5].Vertex[0] = vertex[4];
00220 bullet[loop].modelpolylist[5].Vertex[1] = vertex[5];
00221 bullet[loop].modelpolylist[5].Vertex[2] = vertex[1];
00222 bullet[loop].modelpolylist[5].Texture = texture[4].TexID;
00223 bullet[loop].modelpolylist[5].Vertex[0].u = 0.0;
00224 bullet[loop].modelpolylist[5].Vertex[0].v = 0.0;
00225 bullet[loop].modelpolylist[5].Vertex[1].u = 1.0;
00226 bullet[loop].modelpolylist[5].Vertex[1].v = 0.0;
00227 bullet[loop].modelpolylist[5].Vertex[2].u = 1.0;
00228 bullet[loop].modelpolylist[5].Vertex[2].v = 1.0;
00229
00230 bullet[loop].modelpolylist[6].Scale[0] = 1.0;
00231 bullet[loop].modelpolylist[6].Scale[1] = 1.0;
00232 bullet[loop].modelpolylist[6].Shift[0] = 0.0;
00233 bullet[loop].modelpolylist[6].Shift[1] = 0.0;
00234 bullet[loop].modelpolylist[6].Rotate = 0.0;
00235 bullet[loop].modelpolylist[6].Vertex[0] = vertex[6];
00236 bullet[loop].modelpolylist[6].Vertex[1] = vertex[3];
00237 bullet[loop].modelpolylist[6].Vertex[2] = vertex[2];
00238 bullet[loop].modelpolylist[6].Texture = texture[4].TexID;
00239 bullet[loop].modelpolylist[6].Vertex[0].u = 0.0;
00240 bullet[loop].modelpolylist[6].Vertex[0].v = 0.0;
00241 bullet[loop].modelpolylist[6].Vertex[1].u = 1.0;
00242 bullet[loop].modelpolylist[6].Vertex[1].v = 1.0;
00243 bullet[loop].modelpolylist[6].Vertex[2].u = 0.0;
00244 bullet[loop].modelpolylist[6].Vertex[2].v = 1.0;
00245
00246 bullet[loop].modelpolylist[7].Scale[0] = 1.0;
00247 bullet[loop].modelpolylist[7].Scale[1] = 1.0;
00248 bullet[loop].modelpolylist[7].Shift[0] = 0.0;
00249 bullet[loop].modelpolylist[7].Shift[1] = 0.0;
00250 bullet[loop].modelpolylist[7].Rotate = 0.0;
00251 bullet[loop].modelpolylist[7].Vertex[0] = vertex[6];
00252 bullet[loop].modelpolylist[7].Vertex[1] = vertex[7];
00253 bullet[loop].modelpolylist[7].Vertex[2] = vertex[3];
00254 bullet[loop].modelpolylist[7].Texture = texture[4].TexID;
00255 bullet[loop].modelpolylist[7].Vertex[0].u = 0.0;
00256 bullet[loop].modelpolylist[7].Vertex[0].v = 0.0;
00257 bullet[loop].modelpolylist[7].Vertex[1].u = 1.0;
00258 bullet[loop].modelpolylist[7].Vertex[1].v = 0.0;
00259 bullet[loop].modelpolylist[7].Vertex[2].u = 1.0;
00260 bullet[loop].modelpolylist[7].Vertex[2].v = 1.0;
00261
00262 bullet[loop].modelpolylist[8].Scale[0] = 1.0;
00263 bullet[loop].modelpolylist[8].Scale[1] = 1.0;
00264 bullet[loop].modelpolylist[8].Shift[0] = 0.0;
00265 bullet[loop].modelpolylist[8].Shift[1] = 0.0;
00266 bullet[loop].modelpolylist[8].Rotate = 0.0;
00267 bullet[loop].modelpolylist[8].Vertex[0] = vertex[7];
00268 bullet[loop].modelpolylist[8].Vertex[1] = vertex[0];
00269 bullet[loop].modelpolylist[8].Vertex[2] = vertex[3];
00270 bullet[loop].modelpolylist[8].Texture = texture[4].TexID;
00271 bullet[loop].modelpolylist[8].Vertex[0].u = 0.0;
00272 bullet[loop].modelpolylist[8].Vertex[0].v = 0.0;
00273 bullet[loop].modelpolylist[8].Vertex[1].u = 1.0;
00274 bullet[loop].modelpolylist[8].Vertex[1].v = 1.0;
00275 bullet[loop].modelpolylist[8].Vertex[2].u = 0.0;
00276 bullet[loop].modelpolylist[8].Vertex[2].v = 1.0;
00277
00278 bullet[loop].modelpolylist[9].Scale[0] = 1.0;
00279 bullet[loop].modelpolylist[9].Scale[1] = 1.0;
00280 bullet[loop].modelpolylist[9].Shift[0] = 0.0;
00281 bullet[loop].modelpolylist[9].Shift[1] = 0.0;
00282 bullet[loop].modelpolylist[9].Rotate = 0.0;
00283 bullet[loop].modelpolylist[9].Vertex[0] = vertex[7];
00284 bullet[loop].modelpolylist[9].Vertex[1] = vertex[4];
00285 bullet[loop].modelpolylist[9].Vertex[2] = vertex[0];
00286 bullet[loop].modelpolylist[9].Texture = texture[4].TexID;
00287 bullet[loop].modelpolylist[9].Vertex[0].u = 0.0;
00288 bullet[loop].modelpolylist[9].Vertex[0].v = 0.0;
00289 bullet[loop].modelpolylist[9].Vertex[1].u = 1.0;
00290 bullet[loop].modelpolylist[9].Vertex[1].v = 0.0;
00291 bullet[loop].modelpolylist[9].Vertex[2].u = 1.0;
00292 bullet[loop].modelpolylist[9].Vertex[2].v = 1.0;
00293
00294 bullet[loop].modelpolylist[10].Scale[0] = 1.0;
00295 bullet[loop].modelpolylist[10].Scale[1] = 1.0;
00296 bullet[loop].modelpolylist[10].Shift[0] = 0.0;
00297 bullet[loop].modelpolylist[10].Shift[1] = 0.0;
00298 bullet[loop].modelpolylist[10].Rotate = 0.0;
00299 bullet[loop].modelpolylist[10].Vertex[0] = vertex[5];
00300 bullet[loop].modelpolylist[10].Vertex[1] = vertex[2];
00301 bullet[loop].modelpolylist[10].Vertex[2] = vertex[1];
00302 bullet[loop].modelpolylist[10].Texture = texture[4].TexID;
00303 bullet[loop].modelpolylist[10].Vertex[0].u = 0.0;
00304 bullet[loop].modelpolylist[10].Vertex[0].v = 0.0;
00305 bullet[loop].modelpolylist[10].Vertex[1].u = 1.0;
00306 bullet[loop].modelpolylist[10].Vertex[1].v = 1.0;
00307 bullet[loop].modelpolylist[10].Vertex[2].u = 0.0;
00308 bullet[loop].modelpolylist[10].Vertex[2].v = 1.0;
00309
00310 bullet[loop].modelpolylist[11].Scale[0] = 1.0;
00311 bullet[loop].modelpolylist[11].Scale[1] = 1.0;
00312 bullet[loop].modelpolylist[11].Shift[0] = 0.0;
00313 bullet[loop].modelpolylist[11].Shift[1] = 0.0;
00314 bullet[loop].modelpolylist[11].Rotate = 0.0;
00315 bullet[loop].modelpolylist[11].Vertex[0] = vertex[5];
00316 bullet[loop].modelpolylist[11].Vertex[1] = vertex[6];
00317 bullet[loop].modelpolylist[11].Vertex[2] = vertex[2];
00318 bullet[loop].modelpolylist[11].Texture = texture[4].TexID;
00319 bullet[loop].modelpolylist[11].Vertex[0].u = 0.0;
00320 bullet[loop].modelpolylist[11].Vertex[0].v = 0.0;
00321 bullet[loop].modelpolylist[11].Vertex[1].u = 1.0;
00322 bullet[loop].modelpolylist[11].Vertex[1].v = 0.0;
00323 bullet[loop].modelpolylist[11].Vertex[2].u = 1.0;
00324 bullet[loop].modelpolylist[11].Vertex[2].v = 1.0;
00325 }
00326 }
00327
00328 void UpdateBullets()
00329 {
00330
00331 int Pos, CollisionNode, CollisionPoly;
00332 VECTOR EndPos, p0, pN, a, b, c;
00333 ListNode* tempListNode;
00334 BSP_node* tempNode;
00335 DECAL* tempDecal;
00336 float magnitudedistance, shortestdistance;
00337 VECTOR distance, CollisionPoint;
00338
00339 for (int loop = 0; loop < numBullets; loop++)
00340 {
00341
00342 shortestdistance = 1000000.0;
00343
00344 if (bullet[loop].active == true)
00345 {
00346
00347 if (bullet[loop].flag == true)
00348 {
00349
00350 for (CollisionNode = 1; CollisionNode <= numleaves; CollisionNode++)
00351 {
00352
00353 tempListNode = LeafList.Get(CollisionNode);
00354 tempNode = tempListNode->node;
00355
00356 if (tempNode->visible == true)
00357 {
00358
00359 for (CollisionPoly = 0; CollisionPoly < tempNode->numpolys; CollisionPoly++)
00360 {
00361
00362 p0.x = tempNode->nodepolylist[CollisionPoly].Vertex[0].x;
00363 p0.y = tempNode->nodepolylist[CollisionPoly].Vertex[0].y;
00364 p0.z = tempNode->nodepolylist[CollisionPoly].Vertex[0].z;
00365
00366 pN.x = tempNode->nodepolylist[CollisionPoly].Vertex[0].nx;
00367 pN.y = tempNode->nodepolylist[CollisionPoly].Vertex[0].ny;
00368 pN.z = tempNode->nodepolylist[CollisionPoly].Vertex[0].nz;
00369
00370 if (ClassifyPoint(bullet[loop].Position, p0, pN) != 1)
00371 continue;
00372
00373 EndPos.x = bullet[loop].Position.x - bullet[loop].VelocityVector.x * 500.0;
00374 EndPos.y = bullet[loop].Position.y - bullet[loop].VelocityVector.y * 500.0;
00375 EndPos.z = bullet[loop].Position.z - bullet[loop].VelocityVector.z * 500.0;
00376
00377 CollisionPoint = line_plane_collision(&bullet[loop].Position, &EndPos, &tempNode->nodepolylist[CollisionPoly]);
00378
00379 if (!CheckClipPlanes(camera[currentCamera], CollisionPoint))
00380 continue;
00381 a.x = tempNode->nodepolylist[CollisionPoly].Vertex[0].x;
00382 a.y = tempNode->nodepolylist[CollisionPoly].Vertex[0].y;
00383 a.z = tempNode->nodepolylist[CollisionPoly].Vertex[0].z;
00384 b.x = tempNode->nodepolylist[CollisionPoly].Vertex[1].x;
00385 b.y = tempNode->nodepolylist[CollisionPoly].Vertex[1].y;
00386 b.z = tempNode->nodepolylist[CollisionPoly].Vertex[1].z;
00387 c.x = tempNode->nodepolylist[CollisionPoly].Vertex[2].x;
00388 c.y = tempNode->nodepolylist[CollisionPoly].Vertex[2].y;
00389 c.z = tempNode->nodepolylist[CollisionPoly].Vertex[2].z;
00390
00391 if (CheckPointInTriangle(CollisionPoint, a, b, c))
00392 {
00393
00394 distance = CollisionPoint - bullet[loop].Position;
00395 magnitudedistance = distance.GetMagnitude();
00396
00397 if (magnitudedistance < shortestdistance)
00398 {
00399
00400 bullet[loop].flag = false;
00401
00402 shortestdistance = magnitudedistance;
00403
00404 bullet[loop].CollisionVector = CollisionPoint;
00405 bullet[loop].collisionnode = CollisionNode;
00406 bullet[loop].collisionpoly = CollisionPoly;
00407 }
00408 }
00409 }
00410 }
00411 }
00412 }
00413
00414 float bulletFactor;
00415 if (bulletspeed == 0)
00416 bulletFactor = 1200.0;
00417 else
00418 bulletFactor = 10.0;
00419
00420 bullet[loop].PreviousPosition = bullet[loop].Position;
00421
00422 bullet[loop].Position.x -= bullet[loop].VelocityVector.x * bulletFactor * bullet[loop].Multiplier;
00423 bullet[loop].Position.y -= bullet[loop].VelocityVector.y * bulletFactor * bullet[loop].Multiplier;
00424 bullet[loop].Position.z -= bullet[loop].VelocityVector.z * bulletFactor * bullet[loop].Multiplier;
00425
00426 bullet[loop].leaf = FindCurrentLeaf(bullet[loop].Position, root);
00427
00428 tempListNode = LeafList.Get(bullet[loop].collisionnode);
00429 tempNode = tempListNode->node;
00430
00431 p0.x = tempNode->nodepolylist[bullet[loop].collisionpoly].Vertex[0].x;
00432 p0.y = tempNode->nodepolylist[bullet[loop].collisionpoly].Vertex[0].y;
00433 p0.z = tempNode->nodepolylist[bullet[loop].collisionpoly].Vertex[0].z;
00434 pN.x = tempNode->nodepolylist[bullet[loop].collisionpoly].Vertex[0].nx;
00435 pN.y = tempNode->nodepolylist[bullet[loop].collisionpoly].Vertex[0].ny;
00436 pN.z = tempNode->nodepolylist[bullet[loop].collisionpoly].Vertex[0].nz;
00437
00438 Pos = ClassifyPoint(bullet[loop].Position, p0, pN);
00439
00440 if (Pos != 1)
00441 {
00442
00443 bullet[loop].active = false;
00444
00445 numBulletsActive--;
00446
00447 VECTOR CollisionPoint = line_plane_collision(&bullet[loop].PreviousPosition, &bullet[loop].Position, &tempNode->nodepolylist[bullet[loop].collisionpoly]);
00448 CreateSparks(bullet[loop].PreviousPosition, CollisionPoint, pN);
00449
00450 if (tempNode->numdecals < maxDecals)
00451 {
00452
00453 tempNode->numdecals++;
00454 tempDecal = new DECAL;
00455
00456 tempDecal->type = bullettype;
00457
00458 if (tempDecal->type == 0)
00459 tempDecal->Size = 0.5;
00460 else
00461 tempDecal->Size = 1.0;
00462 tempDecal->linkPosition = tempNode->numdecals;
00463 tempDecal->CollisionVector = bullet[loop].CollisionVector;
00464
00465 tempDecal->counter = 2000;
00466
00467 CreateDecal(tempDecal->CollisionVector, &tempNode->nodepolylist[bullet[loop].collisionpoly], tempDecal);
00468 tempNode->decallist.Insert(tempDecal);
00469
00470
00471 impactflashdecal.CollisionVector = bullet[loop].CollisionVector;
00472 CreateDecal(impactflashdecal.CollisionVector, &tempNode->nodepolylist[bullet[loop].collisionpoly], &impactflashdecal);
00473 impactflashdecal.active = true;
00474 impactflashdecal.Size = 1;
00475 }
00476 }
00477
00478 distance = bullet[loop].Position - camera[currentCamera].Position;
00479 magnitudedistance = distance.GetMagnitude();
00480
00481 if (magnitudedistance > 500)
00482 {
00483 bullet[loop].active = 0;
00484 numBulletsActive--;
00485 }
00486 }
00487 }
00488 }
00489
00490 void DeleteBullets()
00491 {
00492
00493 for (int loop = 0; loop < numBullets; loop++)
00494 bullet[loop].Delete();
00495
00496 delete[] bullet;
00497 }