Exemplo n.º 1
0
void CPhysicController::Move ( const Vect3f& _vDirection, float _ElapsedTime )
{
	assert ( m_pPhXController != NULL );

	float l_fDirectionY = _vDirection.y;
	
	if ( m_bUseGravity )
	{
	 	l_fDirectionY += ( m_fGravity * _ElapsedTime );
	}

	NxVec3 l_Direction ( _vDirection.x, l_fDirectionY, _vDirection.z);
	NxF32 sharpness = 1.0f;
	NxU32 collisionFlags = 0;
	//NxU32 Collision = 0;
	float heightDelta = m_Jump.GetHeight( _ElapsedTime );
	if ( heightDelta != 0.f )
	{
		l_Direction.y+=heightDelta;
		/*l_Direction.x *= 0.3f;
		l_Direction.z *= 0.3f;*/
	}

	int mask = 1 << ECG_PLAYER;
	mask |= 1 << ECG_DYNAMIC_OBJECTS;
	mask |= 1 << ECG_STATIC_OBJECTS;
	mask |= 1 << ECG_ESCENE;
	mask |= 1 << ECG_ENEMY;
	mask |= 1 << ECG_LIMITS;

	m_pPhXController->move( l_Direction , mask, 0.000001f, collisionFlags, sharpness );
	
	if ( ( collisionFlags & NXCC_COLLISION_DOWN ) || ( collisionFlags & NXCC_COLLISION_UP ) )
	{
		m_Jump.StopJump();
	}

	NxExtendedVec3 tmp;
	
	tmp = m_pPhXController->getDebugPosition();
	
	SetPosition ( Vect3f ( (float) tmp.x, (float) tmp.y, (float) tmp.z ) );
	CObject3D::InitMat44();
}
Vect3f CFPSCameraController::GetDirection() const
{
	Vect3f l_Direction(-sin(m_Yaw)*cos(m_Pitch), sin(m_Pitch), cos(m_Yaw)*cos(m_Pitch));
	return l_Direction;
}