home *** CD-ROM | disk | FTP | other *** search
- #include "WeaponEffectsParticleClusters.h"
-
- #include "Game.h"
- #include "random.h"
- #include "Network.h"
- #include "matrixmath.h"
-
- ChaingunMuzzleFlashParticleCluster::ChaingunMuzzleFlashParticleCluster(ChaingunShot* shot):ParticleCluster(20) {
- importance = 1;
-
- clientId = shot->clientId;
- weaponId = shot->weaponId;
-
- vectorCopy3d(shot->pos, this->pos);
- vectorCopy3d(shot->dir, this->dir);
- vectorCopy3d(shot->up, this->up);
- vectorCrossP3d(up, dir, left);
- model = Game::preloadedGameMedia.chaingunMuzzleFlashModel;
-
-
- boundingSphereRadius = 1.0f;
- }
-
- ChaingunMuzzleFlashParticleCluster::~ChaingunMuzzleFlashParticleCluster(){
- }
-
- void ChaingunMuzzleFlashParticleCluster::render(){
- // to make sure the flash appears on the muzzle
- if( Network::server->clients[clientId] != NULL && Network::server->clients[clientId]->vehicle != NULL && Network::server->clients[clientId]->vehicle->weapons[weaponId] != NULL){
- Weapon* weapon = Network::server->clients[clientId]->vehicle->weapons[weaponId];
- vectorCopy3d(weapon->vehicle->dir, this->dir);
- vectorCopy3d(weapon->vehicle->up, this->up);
- vectorCrossP3d(up, dir, left);
-
- vec4_t p;
- vectorAdd3d(weapon->mountPoint, weapon->muzzlePoint, p);
- float m[] = { left[0], left[1], left[2], 0.0f,
- up[0], up[1], up[2], 0.0f,
- dir[0], dir[1], dir[2], 0.0f,
- weapon->vehicle->pos[0], weapon->vehicle->pos[1], weapon->vehicle->pos[2], 1.0f
- };
- p[3] = 1.0f;
- matrixMultVector(m, p, 4, p);
- vectorCopy3d(p, this->pos);
- }
-
- glPushMatrix();
- float m[] = { left[0], left[1], left[2], 0.0f,
- up[0], up[1], up[2], 0.0f,
- dir[0], dir[1], dir[2], 0.0f,
- pos[0], pos[1], pos[2], 1.0f
- };
- glMultMatrixf(m);
-
- Renderer::renderModel(model);
- glPopMatrix();
- }
-
-
-
- ChaingunImpactParticleCluster::ChaingunImpactParticleCluster(ChaingunShot* shot, vec3_t pos):ParticleCluster(150) {
- importance = 1;
- vectorCopy3d(pos, this->pos);
- shader = Game::preloadedGameMedia.chaingunImpactShader;
-
- boundingSphereRadius = 0.5f;
- }
-
- ChaingunImpactParticleCluster::~ChaingunImpactParticleCluster(){
- }
-
- void ChaingunImpactParticleCluster::render(){
- if( Renderer::info.var.useTransparentPolysList ){
- Renderer::addBillboardToTransparentPolys(pos, 0.2f, 0.2f, shader, SDL_GetTicks() - spawntimeMillis);
- }else{
- shader->setup(SDL_GetTicks() - spawntimeMillis);
- Renderer::renderBillboard(pos, 0.2f, 0.2f, shader, SDL_GetTicks() - spawntimeMillis);
- shader->setdown();
- }
- }
-
-
-
- ChaingunRicochetParticleCluster::ChaingunRicochetParticleCluster(vec3_t pos1, vec3_t pos2):ParticleCluster(10) {
- importance = 2;
- vectorCopy3d(pos1, this->pos);
- vectorCopy3d(pos2, this->pos2);
- vectorSub3d(pos2, pos, dir);
-
- shader = Game::preloadedGameMedia.chaingunRicochetShader;
-
- boundingSphereRadius = vectorLength3d(dir);
- vectorNormalize3d(dir, dir);
- }
-
- ChaingunRicochetParticleCluster::~ChaingunRicochetParticleCluster(){
- }
-
- void ChaingunRicochetParticleCluster::render(){
- shader->setup(SDL_GetTicks() - spawntimeMillis);
-
- vec3_t toCam, up;
- vectorSub3d(Game::cam.pos, pos, toCam);
- vectorCrossP3d(toCam, dir, up);
- vectorNormalize3d(up, up);
-
- vec3_t p1, p2, p3, p4;
- vectorMA3d(pos, -0.02f, up, p1);
- vectorMA3d(pos2, -0.02f, up, p2);
- vectorMA3d(pos2, 0.02f, up, p3);
- vectorMA3d(pos, 0.02f, up, p4);
- Renderer::renderQuad(p1, p2, p3, p4);
-
- shader->setdown();
- }
-
-
-
-
-
-
-
- ChaingunMarkParticleCluster::ChaingunMarkParticleCluster(vec3_t pos, Face* face):ParticleCluster(6000) {
- importance = 3;
- vectorMA3d(pos, 0.01f, face->normal, this->pos);
-
- shader = Game::preloadedGameMedia.chaingunMarkShaders[face->material->surfaceType];
-
- vec3_t d1, d2;
- vectorSub3d(&face->vertices[0], pos, d1);
- vectorNormalize3d(d1, d1);
- vectorCrossP3d(face->normal, d1, d2);
- vectorNormalize3d(d2, d2);
-
- vectorMA3d(this->pos, 0.07f, d1, p1);
- vectorMA3d(this->pos, 0.07f, d2, p2);
- vectorMA3d(this->pos, -0.07f, d1, p3);
- vectorMA3d(this->pos, -0.07f, d2, p4);
-
- boundingSphereRadius = 0.5f;
- }
-
- ChaingunMarkParticleCluster::~ChaingunMarkParticleCluster(){
- }
-
- void ChaingunMarkParticleCluster::render(){
- shader->setup(SDL_GetTicks() - spawntimeMillis);
-
- Renderer::renderQuad(p1, p2, p3, p4);
-
- shader->setdown();
- }
-
-
-
-
-
- PlasmagunImpactParticleCluster::PlasmagunImpactParticleCluster(PlasmagunShot* shot, vec3_t pos):ParticleCluster(300) {
- importance = 1;
- vectorCopy3d(pos, this->pos);
- shader = Game::preloadedGameMedia.plasmagunImpactShader;
-
- boundingSphereRadius = 0.5f;
- }
-
- PlasmagunImpactParticleCluster::~PlasmagunImpactParticleCluster(){
- }
-
- void PlasmagunImpactParticleCluster::render(){
- if( Renderer::info.var.useTransparentPolysList ){
- Renderer::addBillboardToTransparentPolys(pos, 0.8f, 0.8f, shader, SDL_GetTicks() - spawntimeMillis);
- }else{
- Renderer::renderBillboard(pos, 0.8f, 0.8f, shader, SDL_GetTicks() - spawntimeMillis);
- }
- }
-
- PlasmagunMarkParticleCluster::PlasmagunMarkParticleCluster(vec3_t pos, Face* face):ParticleCluster(6000) {
- importance = 3;
- vectorMA3d(pos, 0.01f, face->normal, this->pos);
-
- shader = Game::preloadedGameMedia.plasmagunMarkShader;
-
- vec3_t d1, d2;
- vectorSub3d(&face->vertices[0], pos, d1);
- vectorNormalize3d(d1, d1);
- vectorCrossP3d(face->normal, d1, d2);
- vectorNormalize3d(d2, d2);
-
- vectorMA3d(this->pos, 0.15f, d1, p1);
- vectorMA3d(this->pos, 0.15f, d2, p2);
- vectorMA3d(this->pos, -0.15f, d1, p3);
- vectorMA3d(this->pos, -0.15f, d2, p4);
-
- boundingSphereRadius = 0.5f;
- }
-
- PlasmagunMarkParticleCluster::~PlasmagunMarkParticleCluster(){
- }
-
- void PlasmagunMarkParticleCluster::render(){
- shader->setup(SDL_GetTicks() - spawntimeMillis);
-
- Renderer::renderQuad(p1, p2, p3, p4);
-
- shader->setdown();
- }
-
-
-
-
-
-
-
- LaserMarkParticleCluster::LaserMarkParticleCluster(vec3_t pos, Face* face):ParticleCluster(6000) {
- importance = 3;
- vectorMA3d(pos, 0.01f, face->normal, this->pos);
-
- shader = Game::preloadedGameMedia.laserMarkShader;
-
- vec3_t d1, d2;
- vectorSub3d(&face->vertices[0], pos, d1);
- vectorNormalize3d(d1, d1);
- vectorCrossP3d(face->normal, d1, d2);
- vectorNormalize3d(d2, d2);
-
- vectorMA3d(this->pos, 0.1f, d1, p1);
- vectorMA3d(this->pos, 0.1f, d2, p2);
- vectorMA3d(this->pos, -0.1f, d1, p3);
- vectorMA3d(this->pos, -0.1f, d2, p4);
-
- boundingSphereRadius = 0.5f;
- }
-
- LaserMarkParticleCluster::~LaserMarkParticleCluster(){
- }
-
- void LaserMarkParticleCluster::render(){
- shader->setup(SDL_GetTicks() - spawntimeMillis);
-
- Renderer::renderQuad(p1, p2, p3, p4);
-
- shader->setdown();
- }
-
-
-
-
- RailgunTrailParticleCluster::RailgunTrailParticleCluster(vec3_t pos1, vec3_t pos2):ParticleCluster(500) {
- importance = 2;
- vectorCopy3d(pos1, this->pos);
- vectorCopy3d(pos2, this->pos2);
- vectorSub3d(pos2, pos, dir);
-
- shader = Game::preloadedGameMedia.railgunTrailShader;
-
- boundingSphereRadius = vectorLength3d(dir);
- vectorNormalize3d(dir, dir);
- }
-
- RailgunTrailParticleCluster::~RailgunTrailParticleCluster(){
- }
-
- void RailgunTrailParticleCluster::render(){
- unsigned long t = SDL_GetTicks() - spawntimeMillis;
-
- float w = 0.01f + 0.06*( t / (float)lifetimeMillis );
-
- vec3_t toCam, up;
- vectorSub3d(Game::cam.pos, pos, toCam);
- vectorCrossP3d(toCam, dir, up);
- vectorNormalize3d(up, up);
-
- vec3_t p1, p2, p3, p4;
- vectorMA3d(pos, -w, up, p1);
- vectorMA3d(pos2, -w, up, p2);
- vectorMA3d(pos2, w, up, p3);
- vectorMA3d(pos, w, up, p4);
-
- shader->setup(t);
- Renderer::renderQuad(p1, p2, p3, p4);
- shader->setdown();
- }
-
-
-
- RailgunImpactParticleCluster::RailgunImpactParticleCluster(vec3_t pos, Face* face):ParticleCluster(200) {
- importance = 2;
- vectorCopy3d(pos, this->pos);
- this->face = face;
-
- shader = Game::preloadedGameMedia.railgunImpactShader;
-
- boundingSphereRadius = 0.5f;
- }
-
- RailgunImpactParticleCluster::~RailgunImpactParticleCluster(){
- }
-
- void RailgunImpactParticleCluster::render(){
- unsigned long t = SDL_GetTicks() - spawntimeMillis;
- float r = 0.1f + 0.5*(t / (float)lifetimeMillis);
-
- if( face != NULL ){
- vec3_t d1, d2;
- vec3_t p1, p2, p3, p4;
- vectorSub3d(&face->vertices[0], pos, d1);
- vectorNormalize3d(d1, d1);
- vectorCrossP3d(face->normal, d1, d2);
- vectorNormalize3d(d2, d2);
-
- vectorMA3d(this->pos, r, d1, p1);
- vectorMA3d(this->pos, r, d2, p2);
- vectorMA3d(this->pos, -r, d1, p3);
- vectorMA3d(this->pos, -r, d2, p4);
-
- shader->setup(t);
- Renderer::renderQuad(p1, p2, p3, p4);
- shader->setdown();
- }else{
- if( Renderer::info.var.useTransparentPolysList ){
- Renderer::addBillboardToTransparentPolys(pos, r, r, shader, t);
- }else{
- Renderer::renderBillboard(pos, r, r, shader, t);
- }
- }
-
- }
-
-
- RailgunMarkParticleCluster::RailgunMarkParticleCluster(vec3_t pos, Face* face):ParticleCluster(6000) {
- importance = 3;
- vectorMA3d(pos, 0.01f, face->normal, this->pos);
-
- shader = Game::preloadedGameMedia.railgunMarkShader;
-
- vec3_t d1, d2;
- vectorSub3d(&face->vertices[0], pos, d1);
- vectorNormalize3d(d1, d1);
- vectorCrossP3d(face->normal, d1, d2);
- vectorNormalize3d(d2, d2);
-
- vectorMA3d(this->pos, 0.1f, d1, p1);
- vectorMA3d(this->pos, 0.1f, d2, p2);
- vectorMA3d(this->pos, -0.1f, d1, p3);
- vectorMA3d(this->pos, -0.1f, d2, p4);
-
- boundingSphereRadius = 0.5f;
- }
-
- RailgunMarkParticleCluster::~RailgunMarkParticleCluster(){
- }
-
- void RailgunMarkParticleCluster::render(){
- shader->setup(SDL_GetTicks() - spawntimeMillis);
-
- Renderer::renderQuad(p1, p2, p3, p4);
-
- shader->setdown();
- }
-
-
-
-
- TinyExplosionParticleCluster::TinyExplosionParticleCluster(vec3_t pos):ParticleCluster(320) {
- importance = 1;
- vectorCopy3d(pos, this->pos);
- shader = Game::preloadedGameMedia.tinyExplosionShader;
-
- boundingSphereRadius = 1.0f;
-
-
- if( Renderer::info.var.useDynamicLighting ){
- vec3_t col;
- vectorInit3d(0.8f, 0.7f, 0.5f, col);
- Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(pos, col, 3.0f, 100) );
- }
-
- if( Sound::info.var.enabled && Sound::info.var.playSamples ){
- Sound::playEffect(pos, Game::preloadedGameMedia.tinyExplosionSound, 0);
- }
- }
-
- TinyExplosionParticleCluster::~TinyExplosionParticleCluster(){
- }
-
- void TinyExplosionParticleCluster::render(){
- if( Renderer::info.var.useTransparentPolysList ){
- Renderer::addBillboardToTransparentPolys(pos, 0.5f, 0.5f, shader, SDL_GetTicks() - spawntimeMillis);
- }else{
- Renderer::renderBillboard(pos, 0.5f, 0.5f, shader, SDL_GetTicks() - spawntimeMillis);
- }
- }
-
-
-
- SmallExplosionParticleCluster::SmallExplosionParticleCluster(vec3_t pos):ParticleCluster(300) {
- importance = 1;
- vectorCopy3d(pos, this->pos);
- shader = Game::preloadedGameMedia.smallExplosionShader;
-
- boundingSphereRadius = 2.0f;
-
-
- if( Renderer::info.var.useDynamicLighting ){
- vec3_t col;
- vectorInit3d(0.8f, 0.7f, 0.5f, col);
- Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(pos, col, 5.0f, 100) );
- }
-
- if( Sound::info.var.enabled && Sound::info.var.playSamples ){
- Sound::playEffect(pos, Game::preloadedGameMedia.smallExplosionSound, 0);
- }
- }
-
- SmallExplosionParticleCluster::~SmallExplosionParticleCluster(){
- }
-
- void SmallExplosionParticleCluster::render(){
- if( Renderer::info.var.useTransparentPolysList ){
- Renderer::addBillboardToTransparentPolys(pos, 1.0f, 1.0f, shader, SDL_GetTicks() - spawntimeMillis);
- }else{
- Renderer::renderBillboard(pos, 1.0f, 1.0f, shader, SDL_GetTicks() - spawntimeMillis);
- }
- }
-
-
-
-
- MediumExplosionParticleCluster::MediumExplosionParticleCluster(vec3_t pos):ParticleCluster(720) {
- importance = 1;
- vectorCopy3d(pos, this->pos);
- shader = Game::preloadedGameMedia.mediumExplosionShader;
-
- boundingSphereRadius = 4.0f;
-
-
- if( Renderer::info.var.useDynamicLighting ){
- vec3_t col;
- vectorInit3d(0.8f, 0.7f, 0.5f, col);
- Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(pos, col, 7.0f, 300) );
- }
- if( Sound::info.var.enabled && Sound::info.var.playSamples ){
- Sound::playEffect(pos, Game::preloadedGameMedia.mediumExplosionSound, 0);
- }
-
- }
-
- MediumExplosionParticleCluster::~MediumExplosionParticleCluster(){
- }
-
- void MediumExplosionParticleCluster::render(){
- if( Renderer::info.var.useTransparentPolysList ){
- Renderer::addBillboardToTransparentPolys(pos, 2.0f, 2.0f, shader, SDL_GetTicks() - spawntimeMillis);
- }else{
- Renderer::renderBillboard(pos, 2.0f, 2.0f, shader, SDL_GetTicks() - spawntimeMillis);
- }
- }
-
-
-
- BigExplosionParticleCluster::BigExplosionParticleCluster(vec3_t pos):ParticleCluster(800) {
- importance = 1;
- vectorCopy3d(pos, this->pos);
- shader = Game::preloadedGameMedia.bigExplosionShader;
-
- boundingSphereRadius = 5.0f;
-
-
- if( Renderer::info.var.useDynamicLighting ){
- vec3_t col;
- vectorInit3d(0.8f, 0.7f, 0.5f, col);
- Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(pos, col, 10.0f, 400) );
- }
-
- if( Sound::info.var.enabled && Sound::info.var.playSamples ){
- Sound::playEffect(pos, Game::preloadedGameMedia.bigExplosionSound, 0);
- }
- }
-
- BigExplosionParticleCluster::~BigExplosionParticleCluster(){
- }
-
- void BigExplosionParticleCluster::render(){
- if( Renderer::info.var.useTransparentPolysList ){
- Renderer::addBillboardToTransparentPolys(pos, 4.0f, 4.0f, shader, SDL_GetTicks() - spawntimeMillis);
- }else{
- Renderer::renderBillboard(pos, 4.0f, 4.0f, shader, SDL_GetTicks() - spawntimeMillis);
- }
- }
-
-
-
-
- SmallSmokePuffParticleCluster::SmallSmokePuffParticleCluster(vec3_t pos):ParticleCluster(300) {
- importance = 2;
- vectorCopy3d(pos, this->pos);
- shader = Game::preloadedGameMedia.smallSmokePuffShader;
-
- boundingSphereRadius = 1.0f;
- }
-
- SmallSmokePuffParticleCluster::~SmallSmokePuffParticleCluster(){
- }
-
- void SmallSmokePuffParticleCluster::render(){
- unsigned long t = SDL_GetTicks() - spawntimeMillis;
- float r = 0.2f + 0.2*(t / (float)lifetimeMillis);
-
- if( Renderer::info.var.useTransparentPolysList ){
- Renderer::addBillboardToTransparentPolys(pos, r, r, shader, t);
- }else{
- // shader->setup(SDL_GetTicks() - spawntimeMillis);
- Renderer::renderBillboard(pos, r, r, shader, t);
- // shader->setdown();
- }
- }
-
-
-
-