void CamTest::Control(float movevel, float mousevelocity, bool mouseIn) { if(mouseIn) { int midx = 400; //Half of screen sizes int midy = 300; int tmpx, tmpy; tmpx = this->mousept->cursorx; tmpy = this->mousept->GetCursorPositionY(); if(midx-tmpx > 2 || midx-tmpx < -1) { camYaw += mousevelocity * (midx-tmpx); } if(midy-tmpy > 2 || midy-tmpy < -1) { camPitch += mousevelocity * (midy-tmpy); } LockCamera(); this->mousept->SetCursorPosition(midx, midy); //Reset to middle // std::cout << " X , Y " << this->mousept->cursorx << " , " << this->mousept->cursory << std::endl; if(keyboard->isKeyPressed("W") == true) { if(camPitch != 90 && camPitch != -90) { MoveCamera(movevel, 0.0); } MoveCameraUp(movevel, 0.0); } else { if(keyboard->isKeyPressed("S") == true) { if(camPitch != 90 && camPitch != -90) { MoveCamera(movevel,180.0); } MoveCameraUp(movevel,180.0); } } if(keyboard->isKeyPressed("A") == true) { MoveCamera(movevel,90); } else { if(keyboard->isKeyPressed("D") == true) { MoveCamera(movevel,270); } } } glRotatef(-camPitch,1.0,0.0,0.0); //rotate the camera (more precisly move everything in the opposit direction) glRotatef(-camYaw,0.0,1.0,0.0); }
void CWeaponIFMSteadyCam::ItemPostFrame() { CBasePlayer *pPlayer = GetPlayerOwner(); if ( !pPlayer ) return; float flSensitivity = ifm_steadycam_sensitivity.GetFloat(); Vector2D vecOldActualViewOffset = m_vecActualViewOffset.AsVector2D(); if ( pPlayer->m_nButtons & IN_ATTACK ) { const CUserCmd *pUserCmd = pPlayer->GetCurrentUserCommand(); m_vecActualViewOffset.x += pUserCmd->mousedx * flSensitivity; m_vecActualViewOffset.y += pUserCmd->mousedy * flSensitivity; } else { if ( !m_bIsLocked && !m_bInDirectMode ) { float flDamp = ifm_steadycam_rotatedamp.GetFloat(); m_vecActualViewOffset.x *= flDamp; m_vecActualViewOffset.y *= flDamp; } } // Add noise if ( !m_bIsLocked ) { float flNoise = ifm_steadycam_noise.GetFloat(); if ( flNoise > 0.0f ) { CUniformRandomStream stream; stream.SetSeed( (int)(gpGlobals->curtime * 100) ); CGaussianRandomStream gauss( &stream ); float dx = gauss.RandomFloat( 0.0f, flNoise ); float dy = gauss.RandomFloat( 0.0f, flNoise ); m_vecActualViewOffset.x += dx; m_vecActualViewOffset.y += dy; } } ComputeViewOffset(); if ( pPlayer->m_nButtons & IN_ZOOM ) { const CUserCmd *pUserCmd = pPlayer->GetCurrentUserCommand(); m_flFOVOffsetY += pUserCmd->mousedy * flSensitivity; } else { float flDamp = ifm_steadycam_zoomdamp.GetFloat(); m_flFOVOffsetY *= flDamp; } m_flFOV += m_flFOVOffsetY * ifm_steadycam_zoomspeed.GetFloat() / 1000.0f; m_flFOV = clamp( m_flFOV, 0.5f, 160.0f ); if ( pPlayer->m_nButtons & IN_WALK ) { const CUserCmd *pUserCmd = pPlayer->GetCurrentUserCommand(); m_flArmLength -= ifm_steadycam_armspeed.GetFloat() * pUserCmd->mousedy; } if ( pPlayer->GetImpulse() == 87 ) { ToggleDirectMode(); } if ( pPlayer->GetImpulse() == 89 ) { m_bInSpringMode = !m_bInSpringMode; } if ( pPlayer->m_afButtonPressed & IN_USE ) { LockCamera(); } if ( pPlayer->m_afButtonPressed & IN_ATTACK2 ) { m_bFullScreen = !m_bFullScreen; } if ( pPlayer->GetImpulse() == 88 ) { // Make the view angles exactly match the player m_vecViewOffset.Init(); m_vecActualViewOffset.Init(); m_vecOffset.Init(); m_vec2DVelocity.Init(); m_hLockTarget.Set( NULL ); m_flArmLength = 0.0f; if ( m_bIsLocked ) { LockCamera(); } m_angRelativeAngles = pPlayer->EyeAngles(); m_flFOV = pPlayer->GetFOV(); } UpdateRelativeOrientation(); TransmitRenderInfo(); }