//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFWeaponBaseGrenadeProj::Deflected( CBaseEntity *pDeflectedBy, Vector &vecDir ) { IPhysicsObject *pPhysicsObject = VPhysicsGetObject(); if ( pPhysicsObject ) { Vector vecOldVelocity, vecVelocity; pPhysicsObject->GetVelocity( &vecOldVelocity, NULL ); float flVel = vecOldVelocity.Length(); vecVelocity = vecDir; vecVelocity *= flVel; AngularImpulse angVelocity( ( 600, random->RandomInt( -1200, 1200 ), 0 ) ); // Now change grenade's direction. pPhysicsObject->SetVelocityInstantaneous( &vecVelocity, &angVelocity ); } CBaseCombatCharacter *pBCC = pDeflectedBy->MyCombatCharacterPointer(); IncremenentDeflected(); m_hDeflectOwner = pDeflectedBy; SetThrower( pBCC ); ChangeTeam( pDeflectedBy->GetTeamNumber() ); if ( !TFGameRules()->IsDeathmatch() ) m_nSkin = pDeflectedBy->GetTeamNumber() - 2; // TODO: Live TF2 adds white trail to reflected pipes and stickies. We need one as well. }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFProjectile_Rocket::Deflected( CBaseEntity *pDeflectedBy, Vector &vecDir ) { // Get rocket's speed. float flVel = GetAbsVelocity().Length(); QAngle angForward; VectorAngles( vecDir, angForward ); // Now change rocket's direction. SetAbsAngles( angForward ); SetAbsVelocity( vecDir * flVel ); // And change owner. IncremenentDeflected(); SetOwnerEntity( pDeflectedBy ); ChangeTeam( pDeflectedBy->GetTeamNumber() ); SetScorer( pDeflectedBy ); }