コード例 #1
0
ファイル: view.cpp プロジェクト: torbensko/HAL
// This is called by cdll_client_int to setup view model origins. This has to be done before
// simulation so entities can access attachment points on view models during simulation.
void CViewRender::OnRenderStart()
{
    VPROF_("CViewRender::OnRenderStart", 2, VPROF_BUDGETGROUP_OTHER_UNACCOUNTED, false, 0);
    SetUpView();

    // Adjust mouse sensitivity based upon the current FOV
    C_BasePlayer *player = C_BasePlayer::GetLocalPlayer();
    if ( player )
    {
        default_fov.SetValue( player->m_iDefaultFOV );

        //Update our FOV, including any zooms going on
        int iDefaultFOV = default_fov.GetInt();
        int	localFOV	= player->GetFOV();
        int min_fov		= player->GetMinFOV();

        // Don't let it go too low
        localFOV = max( min_fov, localFOV );

        gHUD.m_flFOVSensitivityAdjust = 1.0f;
#ifndef _XBOX
        if ( gHUD.m_flMouseSensitivityFactor )
        {
            gHUD.m_flMouseSensitivity = sensitivity.GetFloat() * gHUD.m_flMouseSensitivityFactor;
        }
        else
#endif
        {
            // No override, don't use huge sensitivity
            if ( localFOV == iDefaultFOV )
            {
#ifndef _XBOX
                // reset to saved sensitivity
                gHUD.m_flMouseSensitivity = 0;
#endif
            }
            else
            {
                // Set a new sensitivity that is proportional to the change from the FOV default and scaled
                //  by a separate compensating factor
                if ( iDefaultFOV == 0 )
                {
                    Assert(0); // would divide by zero, something is broken with iDefatulFOV
                    iDefaultFOV = 1;
                }
                gHUD.m_flFOVSensitivityAdjust =
                    ((float)localFOV / (float)iDefaultFOV) * // linear fov downscale
                    zoom_sensitivity_ratio.GetFloat(); // sensitivity scale factor
#ifndef _XBOX
                gHUD.m_flMouseSensitivity = gHUD.m_flFOVSensitivityAdjust * sensitivity.GetFloat(); // regular sensitivity
#endif
            }
        }
    }
}
コード例 #2
0
ファイル: view.cpp プロジェクト: Randdalf/bliink
// This is called by cdll_client_int to setup view model origins. This has to be done before
// simulation so entities can access attachment points on view models during simulation.
void CViewRender::OnRenderStart()
{
	VPROF_("CViewRender::OnRenderStart", 2, VPROF_BUDGETGROUP_OTHER_UNACCOUNTED, false, 0);
	IterateRemoteSplitScreenViewSlots_Push( true );
	FOR_EACH_VALID_SPLITSCREEN_PLAYER( hh )
	{
		ACTIVE_SPLITSCREEN_PLAYER_GUARD_VGUI( hh );

		// This will fill in one of the m_UserView[ hh ] slots
		SetUpView();

		// Adjust mouse sensitivity based upon the current FOV
		C_BasePlayer *player = C_BasePlayer::GetLocalPlayer();
		if ( player )
		{
			default_fov.SetValue( player->m_iDefaultFOV );

			//Update our FOV, including any zooms going on
			int iDefaultFOV = default_fov.GetInt();
			int	localFOV	= player->GetFOV();
			int min_fov		= player->GetMinFOV();

			// Don't let it go too low
			localFOV = MAX( min_fov, localFOV );

			GetHud().m_flFOVSensitivityAdjust = 1.0f;
	#ifndef _XBOX
			if ( GetHud().m_flMouseSensitivityFactor )
			{
				GetHud().m_flMouseSensitivity = sensitivity.GetFloat() * GetHud().m_flMouseSensitivityFactor;
			}
			else
	#endif
			{
				// No override, don't use huge sensitivity
				if ( localFOV == iDefaultFOV )
				{
	#ifndef _XBOX
					// reset to saved sensitivity
					GetHud().m_flMouseSensitivity = 0;
	#endif
				}
				else
				{  
					// Set a new sensitivity that is proportional to the change from the FOV default and scaled
					//  by a separate compensating factor
					if ( iDefaultFOV == 0 )
					{
						Assert(0); // would divide by zero, something is broken with iDefatulFOV
						iDefaultFOV = 1;
					}
					GetHud().m_flFOVSensitivityAdjust = 
						((float)localFOV / (float)iDefaultFOV) * // linear fov downscale
						zoom_sensitivity_ratio.GetFloat(); // sensitivity scale factor
	#ifndef _XBOX
					GetHud().m_flMouseSensitivity = GetHud().m_flFOVSensitivityAdjust * sensitivity.GetFloat(); // regular sensitivity
	#endif
				}
			}
		}
	}

	// Setup the frustum cache for this frame.
	m_bAllowViewAccess = true;
	FOR_EACH_VALID_SPLITSCREEN_PLAYER( iSlot )
	{
		const CViewSetup &view = GetView( iSlot );
		FrustumCache()->Add( &view, iSlot );
	}
	FrustumCache()->SetUpdated();
	m_bAllowViewAccess = false;

	IterateRemoteSplitScreenViewSlots_Pop();
}