📄 input.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 + -