void CRagdollProp::SetObjectCollisionBox( void ) { if ( m_allAsleep ) { Vector fullMins, fullMaxs; RagdollComputeExactBbox( m_ragdoll, GetAbsOrigin(), fullMins, fullMaxs ); SetCollisionBounds( fullMins - GetAbsOrigin(), fullMaxs - GetAbsOrigin() ); SetAbsMins( fullMins ); SetAbsMaxs( fullMaxs ); } else { SetCollisionBounds( m_savedESMins, m_savedESMaxs ); ComputeSurroundingBox(); } }
//----------------------------------------------------------------------------- // Computes the surrounding collision bounds based on whatever algorithm we want... //----------------------------------------------------------------------------- void CCollisionProperty::WorldSpaceSurroundingBounds( Vector *pVecMins, Vector *pVecMaxs ) { const Vector &vecAbsOrigin = GetCollisionOrigin(); if ( GetOuter()->IsEFlagSet( EFL_DIRTY_SURROUNDING_COLLISION_BOUNDS )) { GetOuter()->RemoveEFlags( EFL_DIRTY_SURROUNDING_COLLISION_BOUNDS ); ComputeSurroundingBox( pVecMins, pVecMaxs ); VectorSubtract( *pVecMins, vecAbsOrigin, m_vecSurroundingMins ); VectorSubtract( *pVecMaxs, vecAbsOrigin, m_vecSurroundingMaxs ); ASSERT_COORD( m_vecSurroundingMins ); ASSERT_COORD( m_vecSurroundingMaxs ); } else { VectorAdd( m_vecSurroundingMins, vecAbsOrigin, *pVecMins ); VectorAdd( m_vecSurroundingMaxs, vecAbsOrigin, *pVecMaxs ); } }