void CBaseViewModel::CalcIronsights( Vector &pos, QAngle &ang ) { CBaseCombatWeapon *pWeapon = GetOwningWeapon(); if (!pWeapon) return; //get delta time for interpolation float delta = (gpGlobals->curtime - pWeapon->m_flIronsightedTime) * 2.5f; //modify this value to adjust how fast the interpolation is float exp = (pWeapon->IsIronsighted()) ? (delta > 1.0f) ? 1.0f : delta : //normal blending (delta > 1.0f) ? 0.0f : 1.0f - delta; //reverse interpolation if (exp <= 0.001f) //fully not ironsighted; save performance return; Vector newPos = pos; QAngle newAng = ang; Vector vForward, vRight, vUp, vOffset; AngleVectors(newAng, &vForward, &vRight, &vUp); vOffset = pWeapon->GetIronsightPositionOffset(); newPos += vForward * vOffset.x; newPos += vRight * vOffset.y; newPos += vUp * vOffset.z; newAng += pWeapon->GetIronsightAngleOffset(); //fov is handled by CBaseCombatWeapon pos += (newPos - pos) * exp; ang += (newAng - ang) * exp; }
//BG2 -Added for Iron Sights Testing. Credits to Jorg for the code. -HairyPotter void CBaseViewModel::CalcIronsights( Vector &pos, QAngle &ang ) { //CBaseCombatWeapon *pWeapon = GetOwningWeapon(); CBaseCombatWeapon *pWeapon = m_hWeapon.Get(); if ( !pWeapon ) return; //get delta time for interpolation float time = pWeapon->IsIronsighted() ? IRONSIGHTS_ANGLE_IN_TIME : IRONSIGHTS_ANGLE_OUT_TIME; float delta( ( gpGlobals->curtime - pWeapon->m_flIronsightedTime ) / time ); float exp = ( pWeapon->IsIronsighted() ) ? ( delta > 1.0f ) ? 1.0f : delta : //normal blending ( delta > 1.0f ) ? 0.0f : 1.0f - delta; //reverse interpolation if( exp <= 0.0f ) //fully not ironsighted; save performance return; if( exp > 1.0f ) exp = 1.0f; Vector newPos = pos; QAngle newAng = ang; Vector vForward, vRight, vUp, vOffset; AngleVectors( newAng, &vForward, &vRight, &vUp ); vOffset = pWeapon->GetIronsightPositionOffset(); newPos += vForward * vOffset.x; newPos += vRight * vOffset.y; newPos += vUp * vOffset.z; newAng += pWeapon->GetIronsightAngleOffset(); //This also handles the pitch... //fov is handled by CBaseCombatWeapon pos += ( newPos - pos ) * exp; ang += ( newAng - ang ) * exp; }