void C_HLTVCamera::SetPrimaryTarget( int nEntity ) { if ( m_iTraget1 == nEntity ) return; m_iTraget1 = nEntity; if ( GetMode() == OBS_MODE_ROAMING ) { Vector vOrigin; QAngle aAngles; float flFov; CalcChaseCamView( vOrigin, aAngles, flFov ); } else if ( GetMode() == OBS_MODE_CHASE ) { C_BaseEntity* target = ClientEntityList().GetEnt( m_iTraget1 ); if ( target ) { QAngle eyeAngle = target->EyeAngles(); prediction->SetViewAngles( eyeAngle ); } } m_flLastDistance = m_flDistance; m_flLastAngleUpdateTime = -1; }
void CBasePlayer::CalcObserverView( Vector& eyeOrigin, QAngle& eyeAngles, float& fov ) { #if defined( CLIENT_DLL ) switch ( GetObserverMode() ) { case OBS_MODE_DEATHCAM : CalcDeathCamView( eyeOrigin, eyeAngles, fov ); break; case OBS_MODE_ROAMING : // just copy current position without view offset case OBS_MODE_FIXED : CalcRoamingView( eyeOrigin, eyeAngles, fov ); break; case OBS_MODE_IN_EYE : CalcInEyeCamView( eyeOrigin, eyeAngles, fov ); break; case OBS_MODE_CHASE : CalcChaseCamView( eyeOrigin, eyeAngles, fov ); break; case OBS_MODE_FREEZECAM : CalcFreezeCamView( eyeOrigin, eyeAngles, fov ); break; } #else // on server just copy target postions, final view positions will be calculated on client VectorCopy( EyePosition(), eyeOrigin ); VectorCopy( EyeAngles(), eyeAngles ); #endif }
void C_CFPlayer::CalcInEyeCamView(Vector& eyeOrigin, QAngle& eyeAngles, float& fov) { C_CFPlayer *pTarget = ToCFPlayer(GetObserverTarget()); if ( !pTarget ) { // just copy a save in-map position VectorCopy( EyePosition(), eyeOrigin ); VectorCopy( EyeAngles(), eyeAngles ); return; }; if ( pTarget->ShouldForceThirdPerson() ) { CalcChaseCamView( eyeOrigin, eyeAngles, fov ); return; } fov = GetFOV(); // TODO use tragets FOV m_flObserverChaseDistance = 0.0; eyeAngles = pTarget->EyeAngles(); eyeOrigin = pTarget->EyePosition(); // Apply punch angle VectorAdd( eyeAngles, GetPunchAngle(), eyeAngles ); engine->SetViewAngles( eyeAngles ); }
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(); } }
void C_Camera::CalcView(Vector& eyeOrigin, QAngle& eyeAngles, float& fov) { if (GetCamMode() == CAM_MODE_TVCAM) { CalcTVCamView(eyeOrigin, eyeAngles, fov); ResetAutoTransparentProps(); } else if (GetCamMode() == CAM_MODE_FREE_CHASE || GetCamMode() == CAM_MODE_LOCKED_CHASE) { CalcChaseCamView(eyeOrigin, eyeAngles, fov); CheckAutoTransparentProps(eyeOrigin, eyeAngles); } else { CalcRoamingView(eyeOrigin, eyeAngles, fov); CheckAutoTransparentProps(eyeOrigin, eyeAngles); } // Save the last position and angle so when switching to roaming view it starts at the current position m_vCamOrigin = eyeOrigin; m_aCamAngle = eyeAngles; }
void C_HLTVCamera::CalcView(Vector& origin, QAngle& angles, float& fov) { if ( m_bEntityPacketReceived ) { // try to fixup movment pareents FixupMovmentParents(); m_bEntityPacketReceived = false; } if ( m_iCameraMan > 0 ) { C_BasePlayer *pCameraMan = UTIL_PlayerByIndex( m_iCameraMan ); if ( pCameraMan ) { float zNear,zFar; pCameraMan->CalcView( origin, angles, zNear, zFar, fov ); pCameraMan->CalcViewModelView( origin, angles ); return; } } switch ( m_nCameraMode ) { case OBS_MODE_ROAMING : CalcRoamingView( origin, angles, fov ); break; case OBS_MODE_FIXED : CalcFixedView( origin, angles, fov ); break; case OBS_MODE_IN_EYE : CalcInEyeCamView( origin, angles, fov ); break; case OBS_MODE_CHASE : CalcChaseCamView( origin, angles, fov ); break; } }