예제 #1
0
	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);
	}
예제 #2
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();
}