//----------------------------------------------------------------------------- // Purpose: Draw the laser rifle effect //----------------------------------------------------------------------------- void CWeaponCombatLaserRifle::BulletWasFired( const Vector &vecStart, const Vector &vecEnd ) { // Humans fire jazzed up bullets, Aliens fire laserbeams if ( GetTeamNumber() == TEAM_HUMANS ) { UTIL_Tracer( (Vector&)vecStart, (Vector&)vecEnd, entindex(), 1, 5000, false, "HLaserTracer" ); } else { UTIL_Tracer( (Vector&)vecStart, (Vector&)vecEnd, entindex(), 1, 5000, false, "ALaserTracer" ); } }
//--------------------------------------------------------- // !!!TEMP // !!!TEMP // !!!TEMP // !!!TEMP // // (sjb) //--------------------------------------------------------- void CGenericNPC::TempGunEffect( void ) { QAngle vecAngle; Vector vecDir, vecShot; Vector vecMuzzle, vecButt; GetAttachment( 2, vecMuzzle, vecAngle ); GetAttachment( 3, vecButt, vecAngle ); vecDir = vecMuzzle - vecButt; VectorNormalize( vecDir ); // CPVSFilter filter( GetAbsOrigin() ); //te->ShowLine( filter, 0.0, vecSpot, vecSpot + vecForward ); //UTIL_Sparks( vecMuzzle ); bool fSound = false; if( random->RandomInt( 0, 3 ) == 0 ) { fSound = true; } Vector start = vecMuzzle + vecDir * 64; Vector end = vecMuzzle + vecDir * 4096; UTIL_Tracer( start, end, 0, TRACER_DONT_USE_ATTACHMENT, 5500, fSound ); CPASAttenuationFilter filter2( this, "GenericNPC.GunSound" ); EmitSound( filter2, entindex(), "GenericNPC.GunSound" ); }
//----------------------------------------------------------------------------- // Purpose: // Input : &startPos - // &endPos - // width - // useMuzzle - //----------------------------------------------------------------------------- void CASW_PropJeep::DrawBeam( const Vector &startPos, const Vector &endPos, float width ) { //Tracer down the middle UTIL_Tracer( startPos, endPos, 0, TRACER_DONT_USE_ATTACHMENT, 6500, false, "GaussTracer" ); //Draw the main beam shaft CBeam *pBeam = CBeam::BeamCreate( GAUSS_BEAM_SPRITE, 0.5 ); pBeam->SetStartPos( startPos ); pBeam->PointEntInit( endPos, this ); pBeam->SetEndAttachment( LookupAttachment("Muzzle") ); pBeam->SetWidth( width ); pBeam->SetEndWidth( 0.05f ); pBeam->SetBrightness( 255 ); pBeam->SetColor( 255, 185+random->RandomInt( -16, 16 ), 40 ); pBeam->RelinkBeam(); pBeam->LiveForTime( 0.1f ); //Draw electric bolts along shaft pBeam = CBeam::BeamCreate( GAUSS_BEAM_SPRITE, 3.0f ); pBeam->SetStartPos( startPos ); pBeam->PointEntInit( endPos, this ); pBeam->SetEndAttachment( LookupAttachment("Muzzle") ); pBeam->SetBrightness( random->RandomInt( 64, 255 ) ); pBeam->SetColor( 255, 255, 150+random->RandomInt( 0, 64 ) ); pBeam->RelinkBeam(); pBeam->LiveForTime( 0.1f ); pBeam->SetNoise( 1.6f ); pBeam->SetEndWidth( 0.1f ); }
void CWeaponMomentumGun::DrawBeam(const Vector &startPos, const Vector &endPos, float width) { //Tracer down the middle UTIL_Tracer(startPos, endPos, 0, TRACER_DONT_USE_ATTACHMENT, 6500, false, "GaussTracer"); //Draw the main beam shaft CBeam *pBeam = CBeam::BeamCreate("sprites/orangelight1.vmt", 15.5); // It starts at startPos pBeam->SetStartPos(startPos); // This sets up some things that the beam uses to figure out where // it should start and end pBeam->PointEntInit(endPos, this); // This makes it so that the laser appears to come from the muzzle of the pistol pBeam->SetEndAttachment(LookupAttachment("Muzzle")); pBeam->SetWidth(width); // pBeam->SetEndWidth( 0.05f ); // Higher brightness means less transparent pBeam->SetBrightness(255); pBeam->SetColor(255, 185 + random->RandomInt(-16, 16), 40); pBeam->RelinkBeam(); // The beam should only exist for a very short time pBeam->LiveForTime(0.1f); }
void C_QUA_Strider::MakeTracer( const Vector &vecTracerSrc, const trace_t &tr, int iTracerType ) { float flTracerDist; Vector vecDir; Vector vecEndPos; vecDir = tr.endpos - vecTracerSrc; flTracerDist = VectorNormalize( vecDir ); UTIL_Tracer( vecTracerSrc, tr.endpos, 0, TRACER_DONT_USE_ATTACHMENT, 5000, true, "StriderTracer" ); }
void CNPC_AlienGrunt::TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr ) { CTakeDamageInfo ainfo = info; float flDamage = ainfo.GetDamage(); if ( ptr->hitgroup == 10 && (ainfo.GetDamageType() & (DMG_BULLET | DMG_SLASH | DMG_CLUB))) { // hit armor if ( m_flDamageTime != gpGlobals->curtime || (random->RandomInt(0,10) < 1) ) { CPVSFilter filter( ptr->endpos ); te->ArmorRicochet( filter, 0.0, &ptr->endpos, &ptr->plane.normal ); m_flDamageTime = gpGlobals->curtime; } if ( random->RandomInt( 0, 1 ) == 0 ) { Vector vecTracerDir = vecDir; vecTracerDir.x += random->RandomFloat( -0.3, 0.3 ); vecTracerDir.y += random->RandomFloat( -0.3, 0.3 ); vecTracerDir.z += random->RandomFloat( -0.3, 0.3 ); vecTracerDir = vecTracerDir * -512; Vector vEndPos = ptr->endpos + vecTracerDir; UTIL_Tracer( ptr->endpos, vEndPos, ENTINDEX( edict() ) ); } flDamage -= 20; if (flDamage <= 0) flDamage = 0.1;// don't hurt the monster much, but allow bits_COND_LIGHT_DAMAGE to be generated ainfo.SetDamage( flDamage ); } else { SpawnBlood( ptr->endpos, vecDir, BloodColor(), flDamage);// a little surface blood. TraceBleed( flDamage, vecDir, ptr, ainfo.GetDamageType() ); } AddMultiDamage( ainfo, this ); }
//--------------------------------------------------------- //--------------------------------------------------------- void CNPC_GroundTurret::MakeTracer( const Vector &vecTracerSrc, const trace_t &tr, int iTracerType ) { #if 1 //BaseClass::MakeTracer( vecTracerSrc, tr, iTracerType ); UTIL_Tracer( vecTracerSrc, tr.endpos, 0, TRACER_DONT_USE_ATTACHMENT, 5000, true, "AR2Tracer" ); #else CBeam *pBeam; int width = 2; pBeam = CBeam::BeamCreate( GROUNDTURRET_BEAM_SPRITE, width ); if ( !pBeam ) return; pBeam->SetStartPos( vecTracerSrc ); pBeam->SetEndPos( tr.endpos ); pBeam->SetWidth( width ); pBeam->SetEndWidth( width / 4.0f ); pBeam->SetBrightness( 100 ); pBeam->SetColor( 0, 145+random->RandomInt( -16, 16 ), 255 ); pBeam->RelinkBeam(); pBeam->LiveForTime( random->RandomFloat( 0.2f, 0.5f ) ); #endif }
//----------------------------------------------------------------------------- // Purpose: Make a tracer using a particle effect //----------------------------------------------------------------------------- void UTIL_ParticleTracer( const char *pszTracerEffectName, const Vector &vecStart, const Vector &vecEnd, int iEntIndex, int iAttachment, bool bWhiz ) { int iParticleIndex = GetParticleSystemIndex( pszTracerEffectName ); UTIL_Tracer( vecStart, vecEnd, iEntIndex, iAttachment, 0, bWhiz, "ParticleTracer", iParticleIndex ); }
//------------------------------------------------------------------------------ // Purpose : // Input : // Output : //------------------------------------------------------------------------------ void CNPC_MissileDefense::FireCannons( void ) { // ---------------------------------------------- // Make sure I have an enemy // ---------------------------------------------- if (GetEnemy() == NULL) { return; } // ---------------------------------------------- // Make sure I have ammo // ---------------------------------------------- if( m_iAmmoLoaded < 1 ) { return; } // ---------------------------------------------- // Make sure gun it pointing in right direction // ---------------------------------------------- Vector vGunDir; GetGunAim( &vGunDir ); Vector vTargetPos; EnemyShootPosition(GetEnemy(),&vTargetPos); Vector vTargetDir = vTargetPos - GetAbsOrigin(); VectorNormalize( vTargetDir ); float fDotPr = DotProduct( vGunDir, vTargetDir ); if (fDotPr < 0.95) { return; } // ---------------------------------------------- // Check line of sight // ---------------------------------------------- trace_t tr; AI_TraceLine( GetEnemy()->EyePosition(), GetAbsOrigin(), MASK_SOLID_BRUSHONLY, this, COLLISION_GROUP_NONE, &tr); if (tr.fraction < 1.0) { return; } Vector vecRight; Vector vecDir; Vector vecCenter; AngleVectors( GetLocalAngles(), NULL, &vecRight, NULL ); vecCenter = WorldSpaceCenter(); if( GetEnemy() == NULL ) { return; } bool fSound = false; if( random->RandomInt( 0, 3 ) == 0 ) { fSound = true; } EmitSound( "NPC_MissileDefense.Attack" ); Vector vecGun; QAngle vecAng; GetAttachment( MD_AP_LGUN, vecGun, vecAng ); Vector vecTarget; EnemyShootPosition(GetEnemy(),&vecTarget); vecDir = vecTarget - vecCenter; VectorNormalize(vecDir); vecDir.x += random->RandomFloat( -NOISE, NOISE ); vecDir.y += random->RandomFloat( -NOISE, NOISE ); Vector vecStart = vecGun + vecDir * 110; Vector vecEnd = vecGun + vecDir * 4096; UTIL_Tracer( vecStart, vecEnd, 0, TRACER_DONT_USE_ATTACHMENT, 3000 + random->RandomFloat( 0, 2000 ), fSound ); vecDir = vecTarget - vecCenter; VectorNormalize(vecDir); vecDir.x += random->RandomFloat( -NOISE, NOISE ); vecDir.y += random->RandomFloat( -NOISE, NOISE ); vecDir.z += random->RandomFloat( -NOISE, NOISE ); GetAttachment( MD_AP_RGUN, vecGun, vecAng ); vecStart = vecGun + vecDir * 110; vecEnd = vecGun + vecDir * 4096; UTIL_Tracer( vecStart, vecEnd, 0, TRACER_DONT_USE_ATTACHMENT, 3000 + random->RandomFloat( 0, 2000 ) ); m_iAmmoLoaded -= 2; if( m_iAmmoLoaded < 1 ) { // Incite a reload. EmitSound( "NPC_MissileDefense.Reload" ); m_flReloadedTime = gpGlobals->curtime + 0.3; return; } // Do damage to the missile based on distance. // if < 1, make damage 0. float flDist = (GetEnemy()->GetLocalOrigin() - vecGun).Length(); float flDamage; flDamage = 4000 - flDist; flDamage /= 1000.0; if( flDamage > 0 ) { if( flDist <= 1500 ) { flDamage *= 2; } CTakeDamageInfo info( this, this, flDamage, DMG_MISSILEDEFENSE ); CalculateBulletDamageForce( &info, GetAmmoDef()->Index("SMG1"), vecDir, GetEnemy()->GetAbsOrigin() ); GetEnemy()->TakeDamage( info ); } }
static int luasrc_UTIL_Tracer (lua_State *L) { UTIL_Tracer(luaL_checkvector(L, 1), luaL_checkvector(L, 2), luaL_optint(L, 3, 0), luaL_optint(L, 4, -1), luaL_optnumber(L, 5, 0), luaL_optboolean(L, 6, 0), luaL_optstring(L, 7, 0), luaL_optint(L, 8, 0)); return 0; }