//----------------------------------------------------------------------------- // Purpose: Receive proxy for the script_intro fov changes //----------------------------------------------------------------------------- void RecvProxy_IntroFOV( const CRecvProxyData *pData, void *pStruct, void *pOut ) { C_ScriptIntro *pIntroScript = (C_ScriptIntro *) pStruct; // Only detect changes float flTime = pData->m_Value.m_Float; if ( pIntroScript->m_flNextFOVBlendTime != flTime ) { pIntroScript->m_flNextFOVBlendTime = pData->m_Value.m_Float; // Store off the start FOV if ( pIntroScript->m_IntroData.m_playerViewFOV ) { pIntroScript->m_iFOVAtStartBlend = pIntroScript->m_IntroData.m_playerViewFOV; } else { C_BasePlayer *player = C_BasePlayer::GetLocalPlayer(); if ( player ) { pIntroScript->m_iFOVAtStartBlend = player->GetFOV(); } } } }
// 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); SetUpViews(); // 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 } } } }
/* =========== ControllerMove =========== */ void CInput::ControllerMove( float frametime, CUserCmd *cmd ) { if ( IsPC() ) { if ( !m_fCameraInterceptingMouse && m_fMouseActive ) { MouseMove( cmd); } } // birdpoop: let's do some xinput stuff ourself. cmd->ltrigger = 0.f; cmd->rtrigger = 0.f; // Maybe do something better in the future but for demo purposes we'll always have a controller attached // so it's safe to assume some things we wouldn't normally assume. XINPUT_STATE controllerstate; ZeroMemory( &controllerstate, sizeof(XINPUT_STATE) ); if (ERROR_SUCCESS == XInputGetState( 0, &controllerstate ) ) { // Trigger input is 8bit int, let's make it 0 - 1 cmd->ltrigger = (float)controllerstate.Gamepad.bLeftTrigger / 255; cmd->rtrigger = (float)controllerstate.Gamepad.bRightTrigger / 255; } JoyStickMove( frametime, cmd); // NVNT if we have a haptic device.. if(haptics && haptics->HasDevice()) { if(engine->IsPaused() || engine->IsLevelMainMenuBackground() || vgui::surface()->IsCursorVisible() || !engine->IsInGame()) { // NVNT send a menu process to the haptics system. haptics->MenuProcess(); return; } #ifdef CSTRIKE_DLL // NVNT cstrike fov grabing. C_BasePlayer *player = C_BasePlayer::GetLocalPlayer(); if(player){ haptics->UpdatePlayerFOV(player->GetFOV()); } #endif // NVNT calculate move with the navigation on the haptics system. haptics->CalculateMove(cmd->forwardmove, cmd->sidemove, frametime); // NVNT send a game process to the haptics system. haptics->GameProcess(); #if defined( WIN32 ) && !defined( _X360 ) // NVNT update our avatar effect. UpdateAvatarEffect(); #endif } }
bool CClientTools::GetLocalPlayerEyePosition( Vector& org, QAngle& ang, float &fov ) { C_BasePlayer *pl = C_BasePlayer::GetLocalPlayer(); if ( pl == NULL ) return false; org = pl->EyePosition(); ang = pl->EyeAngles(); fov = pl->GetFOV(); return true; }
bool CClientTools::GetLocalPlayerEyePosition( Vector& org, QAngle& ang, float &fov ) { ACTIVE_SPLITSCREEN_PLAYER_GUARD( 0 ); C_BasePlayer *pl = C_BasePlayer::GetLocalPlayer(); if ( pl == NULL ) return false; org = pl->EyePosition(); ang = pl->EyeAngles(); fov = pl->GetFOV(); return true; }
/* =========== ControllerMove =========== */ void CInput::ControllerMove( float frametime, CUserCmd *cmd ) { if ( IsPC() ) { if ( !m_fCameraInterceptingMouse && m_fMouseActive ) { MouseMove( cmd); } } JoyStickMove( frametime, cmd); #ifdef C17_HAPTICS cliHaptics->HapticsMove(frametime, cmd); // Haptics addition #endif // NVNT if we have a haptic device.. if(haptics && haptics->HasDevice()) { if(engine->IsPaused() || engine->IsLevelMainMenuBackground() || vgui::surface()->IsCursorVisible() || !engine->IsInGame()) { // NVNT send a menu process to the haptics system. haptics->MenuProcess(); return; } #ifdef CSTRIKE_DLL // NVNT cstrike fov grabing. C_BasePlayer *player = C_BasePlayer::GetLocalPlayer(); if(player){ haptics->UpdatePlayerFOV(player->GetFOV()); } #endif // NVNT calculate move with the navigation on the haptics system. haptics->CalculateMove(cmd->forwardmove, cmd->sidemove, frametime); // NVNT send a game process to the haptics system. haptics->GameProcess(); #if defined( WIN32 ) && !defined( _X360 ) // NVNT update our avatar effect. UpdateAvatarEffect(); #endif } }
void C_HLTVCamera::CalcInEyeCamView( Vector& eyeOrigin, QAngle& eyeAngles, float& fov ) { C_BasePlayer *pPlayer = UTIL_PlayerByIndex( m_iTraget1 ); if ( !pPlayer ) return; if ( !pPlayer->IsAlive() ) { // if dead, show from 3rd person CalcChaseCamView( eyeOrigin, eyeAngles, fov ); return; } m_aCamAngle = pPlayer->EyeAngles(); m_vCamOrigin = pPlayer->GetAbsOrigin(); m_flFOV = pPlayer->GetFOV(); if ( pPlayer->GetFlags() & FL_DUCKING ) { m_vCamOrigin += VEC_DUCK_VIEW; } else { m_vCamOrigin += VEC_VIEW; } eyeOrigin = m_vCamOrigin; eyeAngles = m_aCamAngle; fov = m_flFOV; pPlayer->CalcViewModelView( eyeOrigin, eyeAngles); C_BaseViewModel *pViewModel = pPlayer->GetViewModel( 0 ); if ( pViewModel ) { Assert( pViewModel->GetOwner() == pPlayer ); pViewModel->UpdateVisibility(); } }
// 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(); }
//----------------------------------------------------------------------------- // Purpose: Draw the weapon's crosshair //----------------------------------------------------------------------------- void C_BaseCombatWeapon::DrawCrosshair() { C_BasePlayer *player = C_BasePlayer::GetLocalPlayer(); if ( !player ) return; Color clr = gHUD.m_clrNormal; /* // TEST: if the thing under your crosshair is on a different team, light the crosshair with a different color. Vector vShootPos, vShootAngles; GetShootPosition( vShootPos, vShootAngles ); Vector vForward; AngleVectors( vShootAngles, &vForward ); // Change the color depending on if we're looking at a friend or an enemy. CPartitionFilterListMask filter( PARTITION_ALL_CLIENT_EDICTS ); trace_t tr; traceline->TraceLine( vShootPos, vShootPos + vForward * 10000, COLLISION_GROUP_NONE, MASK_SHOT, &tr, true, ~0, &filter ); if ( tr.index != 0 && tr.index != INVALID_CLIENTENTITY_HANDLE ) { C_BaseEntity *pEnt = ClientEntityList().GetBaseEntityFromHandle( tr.index ); if ( pEnt ) { if ( pEnt->GetTeamNumber() != player->GetTeamNumber() ) { g = b = 0; } } } */ CHudCrosshair *crosshair = GET_HUDELEMENT( CHudCrosshair ); if ( !crosshair ) return; // Find out if this weapon's auto-aimed onto a target bool bOnTarget = ( m_iState == WEAPON_IS_ONTARGET ); if ( player->GetFOV() >= 90 ) { // normal crosshairs if ( bOnTarget && GetWpnData().iconAutoaim ) { clr[3] = 255; crosshair->SetCrosshair( GetWpnData().iconAutoaim, clr ); } else if ( GetWpnData().iconCrosshair ) { clr[3] = 255; crosshair->SetCrosshair( GetWpnData().iconCrosshair, clr ); } else { crosshair->ResetCrosshair(); } } else { Color white( 255, 255, 255, 255 ); // zoomed crosshairs if (bOnTarget && GetWpnData().iconZoomedAutoaim) crosshair->SetCrosshair(GetWpnData().iconZoomedAutoaim, white); else if ( GetWpnData().iconZoomedCrosshair ) crosshair->SetCrosshair( GetWpnData().iconZoomedCrosshair, white ); else crosshair->ResetCrosshair(); } }