Esempio n. 1
0
bool CStage::InitPhysicsManager()
{
	static TestContactReport s_TCR;
	static TestTriggerReport s_TTR;

	// initialize physics scene
	CSceneDesc phys_scene_desc;
	m_pPhysicsScene = PhysicsEngine().CreateScene( phys_scene_desc );

	if( m_pPhysicsScene == NULL )
		return false;

	m_pPhysicsScene->SetUserContactReport( &s_TCR );
	m_pPhysicsScene->SetActorGroupPairFlags(0,0,ContactPairFlag::NOTIFY_ALL);
//	m_pPhysicsScene->SetActorGroupPairFlags(0,0,NX_NOTIFY_ON_START_TOUCH|NX_NOTIFY_ON_TOUCH|NX_NOTIFY_ON_END_TOUCH);

	m_pPhysicsScene->SetUserTriggerReport( &s_TTR );

	// set pairs that don't collide with each other
/*	m_pPhysicsManager->SetCollisionGroupState( ENTITY_COLL_GROUP_STATICGEOMETRY,ENTITY_COLL_GROUP_STATICGEOMETRY, false );
	m_pPhysicsManager->SetCollisionGroupState( ENTITY_COLL_GROUP_PLAYER,		ENTITY_COLL_GROUP_ITEM, false );
	m_pPhysicsManager->SetCollisionGroupState( ENTITY_COLL_GROUP_DOOR,			ENTITY_COLL_GROUP_STATICGEOMETRY, false );
	m_pPhysicsManager->SetCollisionGroupState( ENTITY_COLL_GROUP_DOOR,			ENTITY_COLL_GROUP_DOOR, false );
	m_pPhysicsManager->SetCollisionGroupState( ENTITY_COLL_GROUP_PLAYER,		ENTITY_COLL_GROUP_PLAYER, false );
	m_pPhysicsManager->SetCollisionGroupState( ENTITY_COLL_GROUP_NOCLIP,		false );
*/

	int default_material_index = 0;
	CMaterial *pDefaultMaterial = m_pPhysicsScene->GetMaterial( default_material_index );
	float default_static_friction  = 1.5f;
	float default_dynamic_friction = 1.2f;
	float default_restitution      = 0.5f;
	float rc = 0;
	if( pDefaultMaterial )
	{
		// Peek at some default parameter values of the default material
		float sf = pDefaultMaterial->GetStaticFriction();
		float df = pDefaultMaterial->GetDynamicFriction();
		float rc = pDefaultMaterial->GetRestitution();
		pDefaultMaterial->SetStaticFriction( default_static_friction );
		pDefaultMaterial->SetDynamicFriction( default_dynamic_friction );
		pDefaultMaterial->SetRestitution( default_restitution );
	}

	// Register another material as a fallback
	CMaterialDesc mat_desc;
	mat_desc.StaticFriction  = default_static_friction;
	mat_desc.DynamicFriction = default_dynamic_friction;
	mat_desc.Restitution     = default_restitution;
	physics::CMaterial *pFallbackMaterial = m_pPhysicsScene->CreateMaterial( mat_desc );
	int mat_id = pFallbackMaterial->GetMaterialID();

	return true;
}