//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_PropVehicleDriveable::RestrictView( float *pYawBounds, float *pPitchBounds, float *pRollBounds, QAngle &vecViewAngles ) { int eyeAttachmentIndex = LookupAttachment( "vehicle_driver_eyes" ); Vector vehicleEyeOrigin; QAngle vehicleEyeAngles; GetAttachmentLocal( eyeAttachmentIndex, vehicleEyeOrigin, vehicleEyeAngles ); // Limit the yaw. if ( pYawBounds ) { float flAngleDiff = AngleDiff( vecViewAngles.y, vehicleEyeAngles.y ); flAngleDiff = clamp( flAngleDiff, pYawBounds[0], pYawBounds[1] ); vecViewAngles.y = vehicleEyeAngles.y + flAngleDiff; } // Limit the pitch. if ( pPitchBounds ) { float flAngleDiff = AngleDiff( vecViewAngles.x, vehicleEyeAngles.x ); flAngleDiff = clamp( flAngleDiff, pPitchBounds[0], pPitchBounds[1] ); vecViewAngles.x = vehicleEyeAngles.x + flAngleDiff; } // Limit the roll. if ( pRollBounds ) { float flAngleDiff = AngleDiff( vecViewAngles.z, vehicleEyeAngles.z ); flAngleDiff = clamp( flAngleDiff, pRollBounds[0], pRollBounds[1] ); vecViewAngles.z = vehicleEyeAngles.z + flAngleDiff; } }
//----------------------------------------------------------------------------- // Purpose: Blend view angles. //----------------------------------------------------------------------------- void C_PropJeep::UpdateViewAngles( C_BasePlayer *pLocalPlayer, CUserCmd *pCmd ) { if ( r_JeepViewBlendTo.GetInt() ) { // Check to see if the mouse has been touched in a bit or that we are not throttling. if ( ( pCmd->mousedx != 0 || pCmd->mousedy != 0 ) || ( fabsf( m_flThrottle ) < 0.01f ) ) { m_flViewAngleDeltaTime = 0.0f; } else { m_flViewAngleDeltaTime += gpGlobals->frametime; } if ( m_flViewAngleDeltaTime > r_JeepViewBlendToTime.GetFloat() ) { // Blend the view angles. int eyeAttachmentIndex = LookupAttachment( "vehicle_driver_eyes" ); Vector vehicleEyeOrigin; QAngle vehicleEyeAngles; GetAttachmentLocal( eyeAttachmentIndex, vehicleEyeOrigin, vehicleEyeAngles ); QAngle outAngles; InterpolateAngles( pCmd->viewangles, vehicleEyeAngles, outAngles, r_JeepViewBlendToScale.GetFloat() ); pCmd->viewangles = outAngles; } } BaseClass::UpdateViewAngles( pLocalPlayer, pCmd ); }
//----------------------------------------------------------------------------- // Sets up various attachment points once the model is selected //----------------------------------------------------------------------------- void CObjectBaseMannedGun::OnModelSelected() { m_nBarrelAttachment = LookupAttachment( "barrel" ); m_nBarrelPivotAttachment = LookupAttachment( "barrelpivot" ); m_nStandAttachment = LookupAttachment( "vehicle_feet_passenger0" ); m_nEyesAttachment = LookupAttachment( "vehicle_eyes_passenger0" ); // Find the barrel height in its quiescent state... Vector vBarrel; QAngle vBarrelAngles; GetAttachmentLocal( m_nBarrelAttachment, vBarrel, vBarrelAngles ); m_flBarrelHeight = vBarrel.z; }
//----------------------------------------------------------------------------- // Purpose: // Input : pLocalPlayer - // pCmd - //----------------------------------------------------------------------------- void C_PropVehiclePrisonerPod::UpdateViewAngles( C_BasePlayer *pLocalPlayer, CUserCmd *pCmd ) { int eyeAttachmentIndex = LookupAttachment( "vehicle_driver_eyes" ); Vector vehicleEyeOrigin; QAngle vehicleEyeAngles; GetAttachmentLocal( eyeAttachmentIndex, vehicleEyeOrigin, vehicleEyeAngles ); // Limit the yaw. float flAngleDiff = AngleDiff( pCmd->viewangles.y, vehicleEyeAngles.y ); flAngleDiff = clamp( flAngleDiff, POD_VIEW_YAW_MIN, POD_VIEW_YAW_MAX ); pCmd->viewangles.y = vehicleEyeAngles.y + flAngleDiff; // Limit the pitch -- don't let them look down into the empty pod! flAngleDiff = AngleDiff( pCmd->viewangles.x, vehicleEyeAngles.x ); flAngleDiff = clamp( flAngleDiff, POD_VIEW_PITCH_MIN, POD_VIEW_PITCH_MAX ); pCmd->viewangles.x = vehicleEyeAngles.x + flAngleDiff; }
//----------------------------------------------------------------------------- // Purpose: // Input : pLocalPlayer - // pCmd - //----------------------------------------------------------------------------- void C_PropVehicleChoreoGeneric::UpdateViewAngles( C_BasePlayer *pLocalPlayer, CUserCmd *pCmd ) { int eyeAttachmentIndex = LookupAttachment( "vehicle_driver_eyes" ); Vector vehicleEyeOrigin; QAngle vehicleEyeAngles; GetAttachmentLocal( eyeAttachmentIndex, vehicleEyeOrigin, vehicleEyeAngles ); // Limit the yaw. float flAngleDiff = AngleDiff( pCmd->viewangles.y, vehicleEyeAngles.y ); flAngleDiff = clamp( flAngleDiff, m_vehicleView.flYawMin, m_vehicleView.flYawMax ); pCmd->viewangles.y = vehicleEyeAngles.y + flAngleDiff; // Limit the pitch -- don't let them look down into the empty pod! flAngleDiff = AngleDiff( pCmd->viewangles.x, vehicleEyeAngles.x ); flAngleDiff = clamp( flAngleDiff, m_vehicleView.flPitchMin, m_vehicleView.flPitchMax ); pCmd->viewangles.x = vehicleEyeAngles.x + flAngleDiff; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_ObjectBaseMannedGun::OnDataChanged( DataUpdateType_t updateType ) { BaseClass::OnDataChanged(updateType); if ( updateType == DATA_UPDATE_CREATED ) { // FIXME: Will this work with build animations models? m_nBarrelAttachment = LookupAttachment( "barrel" ); m_nBarrelPivotAttachment = LookupAttachment( "barrelpivot" ); m_nStandAttachment = LookupAttachment( "vehicle_feet_passenger0" ); // Find the barrel height in its quiescent state... Vector vBarrel; QAngle vBarrelAngles; GetAttachmentLocal(m_nBarrelAttachment, vBarrel, vBarrelAngles); m_flBarrelHeight = vBarrel.z; // HACK HACK: This should be read from a .txt file at some point!!!! CHudTexture newTexture; Q_strcpy( newTexture.szTextureFile, "sprites/crosshairs" ); newTexture.rc.left = 0; newTexture.rc.top = 48; newTexture.rc.right = newTexture.rc.left + 24; newTexture.rc.bottom = newTexture.rc.top + 24; iconCrosshair = gHUD.AddUnsearchableHudIconToList( newTexture ); } else { // Set the bone state.. SetBoneController( 0, m_flGunYaw ); SetBoneController( 1, m_flGunPitch ); if ( m_nMoveStyle == MOVEMENT_STYLE_BARREL_PIVOT ) { SetBoneController( 2, m_flBarrelPitch ); } } }