home *** CD-ROM | disk | FTP | other *** search
- #include "RailgunShot.h"
-
- #include "Game.h"
- #include "Network.h"
- #include "WeaponEffectsParticleClusters.h"
-
- RailgunShot::RailgunShot(int clientId, int weaponId): Shot(clientId, weaponId, 10000){
- this->type = GAME_WEAPON_RAILGUN;
- this->moveSpeed = 5.0f;
- this->inflictedDamage = 15;
- }
-
- RailgunShot::~RailgunShot(){
- }
-
- void RailgunShot::leaveMuzzle(){
- if( Renderer::info.var.useDynamicLighting ){
- vec3_t col;
- vectorInit3d(0.6f, 0.4f, 0.2f, col);
- Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(pos, col, 1.0f, 20) );
- }
-
- // Renderer::particleSystem.linkParticleCluster( new RailgunMuzzleFlashParticleCluster(this) );
-
- if( Sound::info.var.enabled && Sound::info.var.playSamples ){
- Sound::playEffect(pos, Game::preloadedGameMedia.railgunFireSound, 0);
- }
-
- // push
- if( Network::server->clients[clientId] != NULL && Network::server->clients[clientId]->vehicle != NULL ){
- vec3_t pushForce;
- vectorScale3d(-1000.0f , this->dir, pushForce);
- Network::server->clients[clientId]->vehicle->physicsInfo.addPushForce(pushForce, 50);
- }
-
- Shot::leaveMuzzle(); // animation and some other stuff
- }
-
- void RailgunShot::move(float deltaT){
- unsigned int i;
- trace_t trace;
- trace.ignoreFlags = 0 | COLLISION_FLAG_BACKFACES | COLLISION_FLAG_SHOOT_THROUGH;
-
- traceRay(pos, dir, &trace);
-
- for(i=0;i<trace.hits.size();i++){
- if( trace.hits[i].face != NULL ){ // hit a face of the arena
- hitFace( trace.hits[i].face, trace.hits[i].pos );
- lifetimeMillis = 0;
- return;
- }
- if( trace.hits[i].vehicle != NULL ){ // hit a vehicle
- if( trace.hits[i].vehicle == Network::server->clients[clientId]->vehicle )
- continue;
-
- hitVehicle( trace.hits[i].vehicle, trace.hits[i].pos);
- lifetimeMillis = 0;
- return;
- }
- }
-
- // hit nothing -> link trail anyway
- vec3_t p;
- vectorMA3d(pos, 500.0f, dir, p);
- Renderer::particleSystem.linkParticleCluster( new RailgunTrailParticleCluster(pos, p) );
-
- lifetimeMillis = 0;
- }
-
- void RailgunShot::hitFace(Face* face, vec3_t hp){
-
- Renderer::particleSystem.linkParticleCluster( new RailgunTrailParticleCluster(pos, hp) );
-
- if( Sound::info.var.enabled && Sound::info.var.playSamples ){
- Sound::playEffect(hp, Game::preloadedGameMedia.railgunImpactSound, 0);
- }
-
- if( Renderer::info.var.renderParticleEffects >= 2 ){
- vec3_t p;
- vectorMA3d(hp, 0.01f, face->normal, p);
- Renderer::particleSystem.linkParticleCluster( new RailgunImpactParticleCluster(p, face));
-
- vectorMA3d(hp, 0.05f, face->normal, p);
- Renderer::particleSystem.linkParticleCluster( new SmallSmokePuffParticleCluster(p) );
- }
-
- if( Renderer::info.var.renderParticleEffects >= 3 ){
- Renderer::particleSystem.linkParticleCluster( new RailgunMarkParticleCluster(hp, face) );
- }
-
- if( Renderer::info.var.useDynamicLighting ){
- vec3_t col;
- vectorInit3d(0.6f, 0.4f, 0.2f, col);
- Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(hp, col, 5.0f, 50) );
- }
-
- Shot::hitFace(face, hp);
- }
-
- void RailgunShot::hitVehicle(Vehicle* vehicle, vec3_t hp){
-
- Renderer::particleSystem.linkParticleCluster( new RailgunTrailParticleCluster(pos, hp) );
-
- if( Sound::info.var.enabled && Sound::info.var.playSamples ){
- Sound::playEffect(hp, Game::preloadedGameMedia.railgunImpactSound, 0);
- }
-
- if( Renderer::info.var.renderParticleEffects >= 2 ){
- Renderer::particleSystem.linkParticleCluster( new SmallSmokePuffParticleCluster(hp) );
-
- Renderer::particleSystem.linkParticleCluster( new RailgunImpactParticleCluster(hp, NULL));
- }
-
- if( Renderer::info.var.useDynamicLighting ){
- vec3_t col;
- vectorInit3d(0.6f, 0.4f, 0.2f, col);
- Renderer::particleSystem.linkParticleCluster( new DynamicLightParticleCluster(hp, col, 5.0f, 50) );
- }
-
- // push
- vec3_t pushForce;
- vectorScale3d(2000.0f , this->dir, pushForce);
- vehicle->physicsInfo.addPushForce(pushForce, 50);
-
- Shot::hitVehicle(vehicle, hp);
- }
-
- void RailgunShot::render(){
- }
-
-
-