Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

bullet.cpp File Reference

#include <windows.h>
#include "bullet.h"
#include "decal.h"
#include "vector.h"
#include "vertex.h"
#include "polygon.h"
#include "texture.h"
#include "listnode.h"
#include "collision.h"
#include "general.h"
#include "camera.h"
#include "bsp.h"
#include "particle.h"
#include "mmgr.h"

Go to the source code of this file.

Functions

void InitializeBullets ()
void UpdateBullets ()
void DeleteBullets ()

Variables

VERTEXvertex
TEXTUREtexture
int numBullets
BULLETbullet
int numBulletsActive
int numleaves
LinkedList< ListNodeLeafList
LinkedList< ListNodePartitionList
ListNodelistnode
CAMERAcamera
int currentCamera
int bulletspeed
int bullettype
BSP_noderoot
int maxDecals
DECAL muzzleflashdecal
DECAL impactflashdecal


Function Documentation

void DeleteBullets  
 

Definition at line 490 of file bullet.cpp.

References BULLET::Delete(), and numBullets.

Referenced by WndProc().

00491 {
00492     // Call the delete method for all bullets
00493     for (int loop = 0; loop < numBullets; loop++)
00494         bullet[loop].Delete();
00495     // Delete the array of bullets
00496     delete[] bullet;
00497 }

void InitializeBullets  
 

Definition at line 93 of file bullet.cpp.

References BULLET::active, BULLET::Initialize(), BULLET::modelpolylist, numBullets, BULLET::numpolys, BULLET::numverts, POLYGON::Rotate, POLYGON::Scale, POLYGON::Shift, TEXTURE::TexID, POLYGON::Texture, VERTEX::u, VERTEX::v, POLYGON::Vertex, VERTEX::x, VERTEX::y, and VERTEX::z.

Referenced by InitGL().

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 }

void UpdateBullets  
 

Definition at line 328 of file bullet.cpp.

References BULLET::active, DECAL::active, bulletspeed, bullettype, CheckClipPlanes(), CheckPointInTriangle(), ClassifyPoint(), BULLET::collisionnode, BULLET::collisionpoly, BULLET::CollisionVector, DECAL::CollisionVector, DECAL::counter, CreateDecal(), CreateSparks(), currentCamera, BSP_node::decallist, FindCurrentLeaf(), BULLET::flag, LinkedList< T >::Get(), VECTOR::GetMagnitude(), LinkedList< DECAL >::Insert(), BULLET::leaf, line_plane_collision(), DECAL::linkPosition, maxDecals, OBJECT::Multiplier, ListNode::node, BSP_node::nodepolylist, numBullets, numBulletsActive, BSP_node::numdecals, numleaves, BSP_node::numpolys, VERTEX::nx, VERTEX::ny, VERTEX::nz, OBJECT::Position, BULLET::PreviousPosition, DECAL::Size, DECAL::type, BULLET::VelocityVector, POLYGON::Vertex, BSP_node::visible, VECTOR::x, VERTEX::x, VECTOR::y, VERTEX::y, VECTOR::z, and VERTEX::z.

Referenced by DrawGLScene().

00329 {
00330     // Update Bullets
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     // Loop through maximum number of bullets
00339     for (int loop = 0; loop < numBullets; loop++)
00340     {
00341         // Set to a distance further than any in the map
00342         shortestdistance = 1000000.0;
00343         // If the bullet is active
00344         if (bullet[loop].active == true)
00345         {
00346             // If it has just been fired
00347             if (bullet[loop].flag == true)
00348             {
00349                 // Loop through all leaves
00350                 for (CollisionNode = 1; CollisionNode <= numleaves; CollisionNode++)
00351                 {
00352                     // Get the leaf node
00353                     tempListNode = LeafList.Get(CollisionNode);
00354                     tempNode = tempListNode->node;
00355                     // If the node is marked as visible
00356                     if (tempNode->visible == true)
00357                     {
00358                         // Loop through all polygons in the leaf
00359                         for (CollisionPoly = 0; CollisionPoly < tempNode->numpolys; CollisionPoly++)
00360                         {
00361                             // Get a point on the polygon
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                             // Get the normal of the polygon
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                             // If the bullet isn't in front of the polygon then continue
00370                             if (ClassifyPoint(bullet[loop].Position, p0, pN) != 1)
00371                                 continue;
00372                             // Find the bullets final position
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                             // Find collision point on the plane
00377                             CollisionPoint = line_plane_collision(&bullet[loop].Position, &EndPos, &tempNode->nodepolylist[CollisionPoly]);
00378                             // If the collision point is outside the frustum then continue (stops collisions behind the player)
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                             // If collision point is within the polygon
00391                             if (CheckPointInTriangle(CollisionPoint, a, b, c))
00392                             {
00393                                 // Get the collision distance
00394                                 distance = CollisionPoint - bullet[loop].Position;
00395                                 magnitudedistance = distance.GetMagnitude();
00396                                 // If collision distance is shorter than previous distance
00397                                 if (magnitudedistance < shortestdistance)
00398                                 {
00399                                     // Bullet has been processed so set first time flag to false
00400                                     bullet[loop].flag = false;
00401                                     // Set new shortest distance
00402                                     shortestdistance = magnitudedistance;
00403                                     // Set collision details
00404                                     bullet[loop].CollisionVector = CollisionPoint;
00405                                     bullet[loop].collisionnode = CollisionNode;
00406                                     bullet[loop].collisionpoly = CollisionPoly;
00407                                 }
00408                             }
00409                         }
00410                     }
00411                 }
00412             }
00413             // Set bullet speed
00414             float bulletFactor;
00415             if (bulletspeed == 0)
00416                 bulletFactor = 1200.0;
00417             else
00418                 bulletFactor = 10.0;
00419             // Set the previous position
00420             bullet[loop].PreviousPosition = bullet[loop].Position;
00421             // Get the present position
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             // Find the leaf node of the bullets position (to determine when to render it)
00426             bullet[loop].leaf = FindCurrentLeaf(bullet[loop].Position, root);
00427             // Get the bullets collision node
00428             tempListNode = LeafList.Get(bullet[loop].collisionnode);
00429             tempNode = tempListNode->node;
00430             // Get a point on the collision polygon and it's normal
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             // Classify the bullet position with respect to the collision polygon
00438             Pos = ClassifyPoint(bullet[loop].Position, p0, pN);
00439             // If the bullet is on or behind the collision polygon
00440             if (Pos != 1)
00441             {
00442                 // Set the bullet to inactive
00443                 bullet[loop].active = false;
00444                 // Decrease the active bullet count
00445                 numBulletsActive--;
00446                 // Create the particles
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                 // If we have not reached the maximum decals for this node
00450                 if (tempNode->numdecals < maxDecals)
00451                 {
00452                     // Create a new decal and set it's properties
00453                     tempNode->numdecals++;
00454                     tempDecal = new DECAL;
00455                     // Set the decal to the current global type of decal selected
00456                     tempDecal->type = bullettype;
00457                     // Set the decal's size accordingly
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                     // Set persistence counter (decreased with each render)
00465                     tempDecal->counter = 2000;
00466 
00467                     CreateDecal(tempDecal->CollisionVector, &tempNode->nodepolylist[bullet[loop].collisionpoly], tempDecal);
00468                     tempNode->decallist.Insert(tempDecal);
00469 
00470                     // Set impact-flash decal properties
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             // Find distance of bullet from camera
00478             distance = bullet[loop].Position - camera[currentCamera].Position;
00479             magnitudedistance = distance.GetMagnitude();
00480             // If the distance is greater than 500 units then make bullet inactive
00481             if (magnitudedistance > 500)
00482             {
00483                 bullet[loop].active = 0;
00484                 numBulletsActive--;
00485             }
00486         }
00487     }
00488 }


Variable Documentation

BULLET* bullet
 

Definition at line 19 of file bullet.cpp.

int bulletspeed
 

Definition at line 27 of file bullet.cpp.

Referenced by UpdateBullets().

int bullettype
 

Definition at line 28 of file bullet.cpp.

Referenced by UpdateBullets().

CAMERA* camera
 

Definition at line 25 of file bullet.cpp.

int currentCamera
 

Definition at line 26 of file bullet.cpp.

Referenced by UpdateBullets().

DECAL impactflashdecal
 

Definition at line 32 of file bullet.cpp.

LinkedList<ListNode> LeafList
 

Definition at line 22 of file bullet.cpp.

ListNode* listnode
 

Definition at line 24 of file bullet.cpp.

int maxDecals
 

Definition at line 30 of file bullet.cpp.

Referenced by UpdateBullets().

DECAL muzzleflashdecal
 

Definition at line 31 of file bullet.cpp.

int numBullets
 

Definition at line 18 of file bullet.cpp.

Referenced by DeleteBullets(), InitializeBullets(), and UpdateBullets().

int numBulletsActive
 

Definition at line 20 of file bullet.cpp.

Referenced by UpdateBullets().

int numleaves
 

Definition at line 21 of file bullet.cpp.

Referenced by UpdateBullets().

LinkedList<ListNode> PartitionList
 

Definition at line 23 of file bullet.cpp.

BSP_node* root
 

Definition at line 29 of file bullet.cpp.

TEXTURE* texture
 

Definition at line 17 of file bullet.cpp.

VERTEX* vertex
 

Definition at line 16 of file bullet.cpp.


Generated on Fri Dec 23 05:19:56 2005 for Particles by doxygen1.2.15