void CMatrix4::SetRotationDegrees(CVector3 v) { v.x = ( float )( v.x*180.0/PI ); v.y = ( float )( v.y*180.0/PI ); v.z = ( float )( v.z*180.0/PI ); SetRotationRadians(v); }
void CClientObject::SetRotationDegrees ( const CVector & vecRotation ) { // Convert from degrees to radians CVector vecTemp; vecTemp.fX = vecRotation.fX * 3.1415926535897932384626433832795f / 180.0f; vecTemp.fY = vecRotation.fY * 3.1415926535897932384626433832795f / 180.0f; vecTemp.fZ = vecRotation.fZ * 3.1415926535897932384626433832795f / 180.0f; SetRotationRadians ( vecTemp ); }
void CClientWeapon::SetDirection ( CVector & vecDirection ) { CVector vecRotation; GetRotationRadians ( vecRotation ); vecRotation.fZ = atan2 ( vecDirection.fY, vecDirection.fX ); CVector2D vecTemp ( vecDirection.fX, vecDirection.fY ); float length = vecTemp.Length (); vecTemp = CVector2D ( length, vecDirection.fZ ); vecTemp.Normalize (); vecRotation.fY = atan2 ( vecTemp.fX, vecTemp.fY )/* - ConvertDegreesToRadians ( 90 )*/; SetRotationRadians ( vecRotation ); }
void CClientObject::SetPosition ( const CVector& vecPosition ) { // Move the object if ( m_pObject ) { CVector vecRot; GetRotationRadians ( vecRot ); m_pObject->Teleport ( vecPosition.fX, vecPosition.fY, vecPosition.fZ ); #ifndef MTA_BUILDINGS m_pObject->ProcessCollision (); #endif m_pObject->SetupLighting (); SetRotationRadians ( vecRot ); } if ( m_vecPosition != vecPosition ) { // Store the position in our datastruct m_vecPosition = vecPosition; // Update our streaming position UpdateStreamPosition ( vecPosition ); } }
void CClientWeapon::DoPulse ( void ) { /*if ( m_bHasTargetDirection ) { CVector vecDirection = m_vecLastDirection; CVector vecOffset = m_vecTargetDirection - vecDirection; vecOffset /= CVector ( 10, 10, 10 ); vecDirection += vecOffset; vecDirection.Normalize (); m_vecLastDirection = vecDirection; SetDirection ( vecDirection ); }*/ if ( m_targetType != TARGET_TYPE_FIXED ) { CVector vecTargetPos; if ( m_targetType == TARGET_TYPE_ENTITY ) { if ( m_pTarget ) { if ( m_pTarget->GetType ( ) == CCLIENTPED || m_pTarget->GetType ( ) == CCLIENTPLAYER ) { CClientPed * pPed = (CClientPed *) (CClientEntity *)(m_pTarget); pPed->GetBonePosition( m_targetBone, vecTargetPos ); } else { m_pTarget->GetPosition( vecTargetPos ); } } else { ResetWeaponTarget ( ); } } else if ( m_targetType == TARGET_TYPE_VECTOR ) { vecTargetPos = m_vecTarget; } if ( !m_pAttachedToEntity ) { // Calculate direction to target CVector vecPosition; GetPosition ( vecPosition ); CVector vecDirection = vecTargetPos - vecPosition; // Convert direction to rotation CVector vecRotation = vecDirection.ToRotation (); SetRotationRadians ( vecRotation ); } else { // Transform target position into local (AttachedToEntity) space CMatrix attachedToMatrix; m_pAttachedToEntity->GetMatrix ( attachedToMatrix ); CVector vecLocalTargetPos = attachedToMatrix.Inverse ().TransformVector ( vecTargetPos ); // Calculate local direction CVector vecDirection = vecLocalTargetPos - m_vecAttachedPosition; // Convert local direction to local rotation CVector vecRotation = vecDirection.ToRotation (); // Apply local rotation SetAttachedOffsets ( m_vecAttachedPosition, vecRotation ); } } if ( m_nAmmoInClip <= 0 ) { if ( m_weaponConfig.bInstantReload == false ) { if ( m_nAmmoTotal >= m_pWeaponStat->GetMaximumClipAmmo() && m_State != WEAPONSTATE_RELOADING ) { m_PreviousState = m_State; m_State = WEAPONSTATE_RELOADING; m_reloadTimer.Reset(); } else if ( m_State == WEAPONSTATE_RELOADING && m_reloadTimer.Get() >= m_pWeapon->GetWeaponReloadTime ( m_pWeaponStat ) ) { m_State = m_PreviousState; m_nAmmoInClip = m_pWeaponStat->GetMaximumClipAmmo(); m_nAmmoTotal -= m_pWeaponStat->GetMaximumClipAmmo(); } else return; } else { if ( m_nAmmoTotal >= m_pWeaponStat->GetMaximumClipAmmo() && m_State != WEAPONSTATE_RELOADING ) { m_nAmmoInClip = m_pWeaponStat->GetMaximumClipAmmo(); m_nAmmoTotal -= m_pWeaponStat->GetMaximumClipAmmo(); } } } if ( m_nAmmoInClip > 0 && ( IsLocalEntity ( ) || m_pOwner == g_pClientGame->GetLocalPlayer ( ) ) ) { if ( m_State == WEAPONSTATE_FIRING && m_fireTimer.Get() >= m_iWeaponFireRate ) { Fire (); } } }
Quaternion::Quaternion(const float *angles) { SetRotationRadians(angles); }