⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 input.cpp

📁 c++程序
💻 CPP
字号:
// Input.cpp: Implementierung der Klasse CInput.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Input.h"
#include "mmsystem.h"

//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////

CInput::CInput()
{
	m_Motion = 0;
	m_InvertMouse = FALSE;
	m_MouseSpeed = 5;
}

CInput::~CInput()
{

}

void CInput::HandleKeyboardInput()
{
	// Handle keyboard input

	// Is motion class pointer valid ?
	if (!m_Motion)
		return;
	
	// Walking & strafing
	if (m_Keys[VK_UP] ||
		m_Keys[char('A')] || 
		m_Keys[VK_DOWN] || 
		m_Keys[char('Y')] ||
		m_Keys[VK_LEFT] || 
		m_Keys[char('Q')] ||
		m_Keys[VK_RIGHT] || 
		m_Keys[char('W')])
		// Move camera
		m_Motion->SetDefaultMotion(m_Keys[VK_UP] || 
								   m_Keys[char('A')],
								   m_Keys[VK_DOWN] || 
								   m_Keys[char('Y')], 
								   m_Keys[VK_LEFT] || 
								   m_Keys[char('Q')], 
								   m_Keys[VK_RIGHT] || 
								   m_Keys[char('W')],
								   FALSE, FALSE,
								   timeGetTime() - m_dwLastTick);

	// Keep current tick
	m_dwLastTick = timeGetTime();

	// Looking up & down
	if (m_Keys[VK_PRIOR])
		m_Motion->RotateVertical(1.0f);
	if (m_Keys[VK_NEXT])
		m_Motion->RotateVertical(-1.0f);
	if (m_Keys[VK_END])
		m_Motion->CenterVertical();
}

void CInput::HandleMouseInput()
{
	// Handle mouse input

	// Is motion class pointer valid ?
	if (!m_Motion)
		return;
	
	// Camera direction
	// Find window
	HWND hWnd = GetActiveWindow();
	// Find client coordinates of the crosshair
	RECT rcScreen;
	POINT lCrosshair;
	GetClientRect(hWnd, &rcScreen);
	lCrosshair.x = rcScreen.right / 2;
	lCrosshair.y = rcScreen.bottom / 2;
	// Covert to screen coordinates
	ClientToScreen(hWnd, &lCrosshair);
	// Set camera rotation
	m_Motion->RotateHorizontal((lCrosshair.x - m_MousePos.x) / (float) m_MouseSpeed);
	if (m_InvertMouse)
		m_Motion->RotateVertical((lCrosshair.y - m_MousePos.y) / (float) m_MouseSpeed);
	else 
		m_Motion->RotateVertical(-(lCrosshair.y - m_MousePos.y) / (float) m_MouseSpeed);
	// Center mouse
	SetCursorPos(lCrosshair.x, lCrosshair.y);

	// Mouse buttons
	if (m_MouseButton[1] == TRUE)
	{
		// Jump
		m_Motion->Jump();
	}
	// Reset button states
	m_MouseButton[0] = FALSE;
	m_MouseButton[1] = FALSE;
	m_MouseButton[2] = FALSE;
}

void CInput::SetMotionClassPointer(CMotion *cMotion)
{
	m_Motion = cMotion;
}

bool CInput::GetInvertMouse()
{
	return m_InvertMouse;
}

void CInput::SetInvertMouse(bool bInvert)
{
	m_InvertMouse = bInvert;
}

void CInput::SetMouseSpeed(unsigned int iMouseSpeed)
{
	m_MouseSpeed = iMouseSpeed;
}

unsigned int CInput::GetMouseSpeed()
{
	return m_MouseSpeed;
}

void CInput::SetKeyState(unsigned int iKey, bool bState)
{
	m_Keys[iKey] = bState;
}

bool CInput::GetKeyState(unsigned int iKey)
{
	return m_Keys[iKey];
}

void CInput::SetMouseButtonState(unsigned int iButton, bool bState)
{
	m_MouseButton[iButton] = bState;
}

bool CInput::GetMouseButtonState(unsigned int iButton)
{
	return m_MouseButton[iButton];
}

void CInput::SetMousePos(unsigned int iX, unsigned int iY)
{
	m_MousePos.x = iX;
	m_MousePos.y = iY;
}

void CInput::GetMousePos(unsigned int &iX, unsigned int &iY)
{
	iX = m_MousePos.x;
	iY = m_MousePos.y;
}

void CInput::SetLastTick(DWORD dwLastTick)
{
	m_dwLastTick = dwLastTick;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -