void CNPC_Zombine::DropGrenade( Vector vDir ) { if ( m_hGrenade == NULL ) return; m_hGrenade->SetParent( NULL ); m_hGrenade->SetOwnerEntity( NULL ); Vector vGunPos; QAngle angles; GetAttachment( "grenade_attachment", vGunPos, angles ); IPhysicsObject *pPhysObj = m_hGrenade->VPhysicsGetObject(); if ( pPhysObj == NULL ) { m_hGrenade->SetMoveType( MOVETYPE_VPHYSICS ); m_hGrenade->SetSolid( SOLID_VPHYSICS ); m_hGrenade->SetCollisionGroup( COLLISION_GROUP_WEAPON ); m_hGrenade->CreateVPhysics(); } if ( pPhysObj ) { pPhysObj->Wake(); pPhysObj->SetPosition( vGunPos, angles, true ); pPhysObj->ApplyForceCenter( vDir * 0.2f ); pPhysObj->RecheckCollisionFilter(); } m_hGrenade = NULL; }
void CPhysicsEntitySolver::Spawn() { SetNextThink( gpGlobals->curtime + m_separationDuration ); PhysDisableEntityCollisions( m_hMovingEntity, m_hPhysicsBlocker ); m_savedCollisionGroup = m_hPhysicsBlocker->GetCollisionGroup(); m_hPhysicsBlocker->SetCollisionGroup( COLLISION_GROUP_DEBRIS ); if ( m_hPhysicsBlocker->VPhysicsGetObject() ) { m_hPhysicsBlocker->VPhysicsGetObject()->RecheckContactPoints(); } }