home *** CD-ROM | disk | FTP | other *** search
/ Enter 2005 March / ENTER.ISO / files / fwp-0.0.6-win32-installer.exe / RailgunShot.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2005-01-17  |  3.9 KB  |  132 lines

  1. #include "RailgunShot.h"
  2.  
  3. #include "Game.h"
  4. #include "Network.h"
  5. #include "WeaponEffectsParticleClusters.h"
  6.  
  7. RailgunShot::RailgunShot(int clientId, int weaponId): Shot(clientId, weaponId, 10000){
  8.     this->type = GAME_WEAPON_RAILGUN;
  9.     this->moveSpeed = 5.0f;
  10.     this->inflictedDamage = 15;
  11. }
  12.  
  13. RailgunShot::~RailgunShot(){
  14. }
  15.  
  16. void RailgunShot::leaveMuzzle(){
  17.     if( Renderer::info.var.useDynamicLighting ){
  18.         vec3_t col;
  19.         vectorInit3d(0.6f, 0.4f, 0.2f, col);
  20.         Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(pos, col, 1.0f, 20) );
  21.     }
  22.  
  23. //    Renderer::particleSystem.linkParticleCluster( new RailgunMuzzleFlashParticleCluster(this) );
  24.  
  25.     if( Sound::info.var.enabled && Sound::info.var.playSamples ){
  26.         Sound::playEffect(pos, Game::preloadedGameMedia.railgunFireSound, 0);
  27.     }
  28.  
  29.     // push
  30.     if( Network::server->clients[clientId] != NULL && Network::server->clients[clientId]->vehicle != NULL ){
  31.         vec3_t pushForce;
  32.         vectorScale3d(-1000.0f , this->dir, pushForce);
  33.         Network::server->clients[clientId]->vehicle->physicsInfo.addPushForce(pushForce, 50);
  34.     }
  35.  
  36.     Shot::leaveMuzzle(); // animation and some other stuff
  37. }
  38.  
  39. void RailgunShot::move(float deltaT){
  40.     unsigned int i;
  41.     trace_t trace;
  42.     trace.ignoreFlags = 0 | COLLISION_FLAG_BACKFACES | COLLISION_FLAG_SHOOT_THROUGH;
  43.  
  44.     traceRay(pos, dir, &trace);
  45.  
  46.     for(i=0;i<trace.hits.size();i++){
  47.         if( trace.hits[i].face != NULL ){    // hit a face of the arena
  48.             hitFace( trace.hits[i].face, trace.hits[i].pos );
  49.             lifetimeMillis = 0;
  50.             return;
  51.         }
  52.         if( trace.hits[i].vehicle != NULL ){    // hit a vehicle
  53.             if( trace.hits[i].vehicle == Network::server->clients[clientId]->vehicle )
  54.                 continue;
  55.             
  56.             hitVehicle( trace.hits[i].vehicle, trace.hits[i].pos);
  57.             lifetimeMillis = 0;
  58.             return;
  59.         }
  60.     }
  61.  
  62.     // hit nothing -> link trail anyway
  63.     vec3_t p;
  64.     vectorMA3d(pos, 500.0f, dir, p);
  65.     Renderer::particleSystem.linkParticleCluster( new RailgunTrailParticleCluster(pos, p) );
  66.  
  67.     lifetimeMillis = 0;
  68. }
  69.  
  70. void RailgunShot::hitFace(Face* face, vec3_t hp){
  71.  
  72.     Renderer::particleSystem.linkParticleCluster( new RailgunTrailParticleCluster(pos, hp) );
  73.  
  74.     if( Sound::info.var.enabled && Sound::info.var.playSamples ){
  75.         Sound::playEffect(hp, Game::preloadedGameMedia.railgunImpactSound, 0);
  76.     }
  77.  
  78.     if( Renderer::info.var.renderParticleEffects >= 2 ){
  79.         vec3_t p;
  80.         vectorMA3d(hp, 0.01f, face->normal, p);
  81.         Renderer::particleSystem.linkParticleCluster( new RailgunImpactParticleCluster(p, face));
  82.  
  83.         vectorMA3d(hp, 0.05f, face->normal, p);
  84.         Renderer::particleSystem.linkParticleCluster( new SmallSmokePuffParticleCluster(p) );
  85.     }
  86.  
  87.     if( Renderer::info.var.renderParticleEffects >= 3 ){
  88.         Renderer::particleSystem.linkParticleCluster( new RailgunMarkParticleCluster(hp, face) );
  89.     }
  90.  
  91.     if( Renderer::info.var.useDynamicLighting ){
  92.         vec3_t col;
  93.         vectorInit3d(0.6f, 0.4f, 0.2f, col);
  94.         Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(hp, col, 5.0f, 50) );
  95.     }
  96.  
  97.     Shot::hitFace(face, hp);
  98. }
  99.  
  100. void RailgunShot::hitVehicle(Vehicle* vehicle, vec3_t hp){
  101.  
  102.     Renderer::particleSystem.linkParticleCluster( new RailgunTrailParticleCluster(pos, hp) );
  103.  
  104.     if( Sound::info.var.enabled && Sound::info.var.playSamples ){
  105.         Sound::playEffect(hp, Game::preloadedGameMedia.railgunImpactSound, 0);
  106.     }
  107.  
  108.     if( Renderer::info.var.renderParticleEffects >= 2 ){
  109.         Renderer::particleSystem.linkParticleCluster( new SmallSmokePuffParticleCluster(hp) );
  110.  
  111.         Renderer::particleSystem.linkParticleCluster( new RailgunImpactParticleCluster(hp, NULL));
  112.     }
  113.  
  114.     if( Renderer::info.var.useDynamicLighting ){
  115.         vec3_t col;
  116.         vectorInit3d(0.6f, 0.4f, 0.2f, col);
  117.         Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(hp, col, 5.0f, 50) );
  118.     }
  119.  
  120.     // push
  121.     vec3_t pushForce;
  122.     vectorScale3d(2000.0f , this->dir, pushForce);
  123.     vehicle->physicsInfo.addPushForce(pushForce, 50);
  124.  
  125.     Shot::hitVehicle(vehicle, hp);
  126. }
  127.  
  128. void RailgunShot::render(){
  129. }
  130.  
  131.  
  132.