//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CPlayer_Control::ControlActivate( void ) { m_bActive = true; AddEffects( EF_NODRAW ); m_nPClipTraceDir = PC_TRACE_LAST; m_flCurrMinClipDist = PCONTROL_CLIP_DIST; SetNextThink( gpGlobals->curtime ); CHL2_Player* pPlayer = (CHL2_Player*)UTIL_GetLocalPlayer(); Assert( pPlayer ); // Save Data m_nSaveFOV = pPlayer->GetFOV(); m_vSaveOrigin = pPlayer->GetLocalOrigin(); m_vSaveAngles = pPlayer->pl.v_angle.Get(); //TGB: 0000069 spectator first person fix (not really necessary but tidier) m_nSaveMoveType = pPlayer->GetMoveType(); m_nSaveMoveCollide = pPlayer->GetMoveCollide(); m_vSaveViewOffset = pPlayer->GetViewOffset(); m_pSaveWeapon = pPlayer->GetActiveWeapon(); pPlayer->AddSolidFlags( FSOLID_NOT_SOLID ); pPlayer->SetLocalOrigin( GetLocalOrigin() ); pPlayer->pl.v_angle.GetForModify() = GetLocalAngles(); //TGB: 0000069 spectator first person fix (see above) pPlayer->SetViewOffset( vec3_origin ); DispatchUpdateTransmitState(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CPlayer_Control::ControlDeactivate( void ) { m_bActive = false; RemoveEffects( EF_NODRAW ); SetThink(NULL); SetTouch(NULL); CHL2_Player* pPlayer = (CHL2_Player*)UTIL_GetLocalPlayer(); Assert( pPlayer ); // Restore Data pPlayer->SetFOV( this, m_nSaveFOV ); pPlayer->RemoveSolidFlags( FSOLID_NOT_SOLID ); pPlayer->SetLocalOrigin( m_vSaveOrigin ); pPlayer->SetLocalAngles( m_vSaveAngles ); // Note: Set GetLocalAngles(), not pl->v_angle pPlayer->SnapEyeAngles( m_vSaveAngles ); pPlayer->StopFollowingEntity(); pPlayer->SetMoveType( m_nSaveMoveType, m_nSaveMoveCollide ); pPlayer->SetViewOffset( m_vSaveViewOffset ); pPlayer->SetControlClass( CLASS_NONE ); DispatchUpdateTransmitState(); }