void CGravControllerPoint::AttachEntity( CBaseEntity *pEntity, IPhysicsObject *pPhys, const Vector &position ) { m_attachedEntity = pEntity; pPhys->WorldToLocal( &m_localPosition, position ); m_worldPosition = position; pPhys->GetDamping( NULL, &m_saveDamping ); float damping = 2; pPhys->SetDamping( NULL, &damping ); m_controller = physenv->CreateMotionController( this ); m_controller->AttachObject( pPhys, true ); m_controller->SetPriority( IPhysicsMotionController::HIGH_PRIORITY ); SetTargetPosition( position ); m_maxAcceleration = phys_gunforce.GetFloat() * pPhys->GetInvMass(); m_targetRotation = pEntity->GetAbsAngles(); float torque = phys_guntorque.GetFloat(); m_maxAngularAcceleration = torque * pPhys->GetInvInertia(); }
void CPhysicsNPCSolver::BecomePenetrationSolver() { CBaseEntity *pEntity = m_hEntity.Get(); if ( pEntity ) { m_allowIntersection = true; IPhysicsObject *pList[VPHYSICS_MAX_OBJECT_LIST_COUNT]; int listCount = pEntity->VPhysicsGetObjectList( pList, ARRAYSIZE(pList) ); PhysDisableEntityCollisions( m_hNPC, pEntity ); m_pController = physenv->CreateMotionController( this ); for ( int i = 0; i < listCount; i++ ) { m_pController->AttachObject( pList[i], false ); pList[i]->Wake(); } m_pController->SetPriority( IPhysicsMotionController::HIGH_PRIORITY ); } }