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; }