void CPhysicsObject::SetShadow( const Vector &maxVelocity, const AngularImpulse &maxAngularVelocity, bool allowPhysicsMovement, bool allowPhysicsRotation ) { if ( m_pShadow ) { m_pShadow->MaxSpeed( maxVelocity, maxAngularVelocity ); } else { // m_pObject->get_core()->rot_speed_damp_factor = IVP_U_Float_Point( 1e5f, 1e5f, 1e5f ); m_shadowTempGravityDisable = false; unsigned int flags = GetCallbackFlags() | CALLBACK_SHADOW_COLLISION; flags &= ~CALLBACK_GLOBAL_FRICTION; flags &= ~CALLBACK_GLOBAL_COLLIDE_STATIC; SetCallbackFlags( flags ); IVP_Environment *pEnv = m_pObject->get_environment(); CPhysicsEnvironment *pVEnv = (CPhysicsEnvironment *)pEnv->client_data; m_pShadow = pVEnv->CreateShadowController( this, allowPhysicsMovement, allowPhysicsRotation ); m_pShadow->MaxSpeed( maxVelocity, maxAngularVelocity ); SetRollingDrag( 0 ); EnableDrag( false ); if ( !allowPhysicsMovement ) { EnableGravity( false ); } } }
void CPhysicsObject::SetShadow(float maxSpeed, float maxAngularSpeed, bool allowPhysicsMovement, bool allowPhysicsRotation) { if (m_pShadow) { m_pShadow->MaxSpeed(maxSpeed, maxAngularSpeed); } else { unsigned int flags = GetCallbackFlags() | CALLBACK_SHADOW_COLLISION; flags &= ~CALLBACK_GLOBAL_FRICTION; flags &= ~CALLBACK_GLOBAL_COLLIDE_STATIC; SetCallbackFlags(flags); m_pShadow = (CShadowController*)m_pEnv->CreateShadowController(this, allowPhysicsMovement, allowPhysicsRotation); m_pShadow->MaxSpeed(maxSpeed, maxAngularSpeed); } }