fix: 修复InputManager中文注释警告和完善Update逻辑
- InputManager.h: 移除中文注释修复C4819警告 - InputManager.h: 添加缺失的vector和unordered_map头文件 - InputManager.cpp: Update()现正确清除m_keyDownThisFrame状态 - InputManager.cpp: ProcessKeyDown/Up添加修饰键参数 - WindowsInputModule: 传递alt/ctrl/shift修饰键状态
This commit is contained in:
@@ -62,8 +62,16 @@ void InputManager::Update(float deltaTime) {
|
||||
if (!m_initialized) return;
|
||||
|
||||
m_keyDownLastFrame = m_keyDownThisFrame;
|
||||
m_keyDownThisFrame.clear();
|
||||
m_keyDownThisFrame.resize(256, false);
|
||||
|
||||
m_mouseButtonDownLastFrame = m_mouseButtonDownThisFrame;
|
||||
m_mouseButtonDownThisFrame.clear();
|
||||
m_mouseButtonDownThisFrame.resize(5, false);
|
||||
|
||||
m_buttonDownLastFrame = m_buttonDownThisFrame;
|
||||
m_buttonDownThisFrame.clear();
|
||||
m_buttonDownThisFrame.resize(32, false);
|
||||
|
||||
m_mouseDelta = Math::Vector2::Zero();
|
||||
m_mouseScrollDelta = 0.0f;
|
||||
@@ -203,7 +211,7 @@ void InputManager::ClearAxes() {
|
||||
m_buttons.clear();
|
||||
}
|
||||
|
||||
void InputManager::ProcessKeyDown(KeyCode key, bool repeat) {
|
||||
void InputManager::ProcessKeyDown(KeyCode key, bool repeat, bool alt, bool ctrl, bool shift, bool meta) {
|
||||
if (!m_initialized) return;
|
||||
|
||||
size_t index = GetKeyIndex(key);
|
||||
@@ -215,15 +223,15 @@ void InputManager::ProcessKeyDown(KeyCode key, bool repeat) {
|
||||
KeyEvent event;
|
||||
event.keyCode = key;
|
||||
event.type = repeat ? KeyEvent::Repeat : KeyEvent::Down;
|
||||
event.alt = false;
|
||||
event.ctrl = false;
|
||||
event.shift = false;
|
||||
event.meta = false;
|
||||
event.alt = alt;
|
||||
event.ctrl = ctrl;
|
||||
event.shift = shift;
|
||||
event.meta = meta;
|
||||
|
||||
m_onKeyEvent.Invoke(event);
|
||||
}
|
||||
|
||||
void InputManager::ProcessKeyUp(KeyCode key) {
|
||||
void InputManager::ProcessKeyUp(KeyCode key, bool alt, bool ctrl, bool shift, bool meta) {
|
||||
if (!m_initialized) return;
|
||||
|
||||
size_t index = GetKeyIndex(key);
|
||||
@@ -234,10 +242,10 @@ void InputManager::ProcessKeyUp(KeyCode key) {
|
||||
KeyEvent event;
|
||||
event.keyCode = key;
|
||||
event.type = KeyEvent::Up;
|
||||
event.alt = false;
|
||||
event.ctrl = false;
|
||||
event.shift = false;
|
||||
event.meta = false;
|
||||
event.alt = alt;
|
||||
event.ctrl = ctrl;
|
||||
event.shift = shift;
|
||||
event.meta = meta;
|
||||
|
||||
m_onKeyEvent.Invoke(event);
|
||||
}
|
||||
|
||||
@@ -97,16 +97,26 @@ void WindowsInputModule::ProcessKeyDown(WPARAM wParam, LPARAM lParam) {
|
||||
bool repeat = (lParam & (1 << 30)) != 0;
|
||||
KeyCode keyCode = VKCodeToKeyCode(static_cast<int>(wParam));
|
||||
|
||||
bool alt = (GetKeyState(VK_MENU) & 0x8000) != 0;
|
||||
bool ctrl = (GetKeyState(VK_CONTROL) & 0x8000) != 0;
|
||||
bool shift = (GetKeyState(VK_SHIFT) & 0x8000) != 0;
|
||||
bool meta = false;
|
||||
|
||||
if (keyCode != KeyCode::None) {
|
||||
InputManager::Get().ProcessKeyDown(keyCode, repeat);
|
||||
InputManager::Get().ProcessKeyDown(keyCode, repeat, alt, ctrl, shift, meta);
|
||||
}
|
||||
}
|
||||
|
||||
void WindowsInputModule::ProcessKeyUp(WPARAM wParam) {
|
||||
KeyCode keyCode = VKCodeToKeyCode(static_cast<int>(wParam));
|
||||
|
||||
bool alt = (GetKeyState(VK_MENU) & 0x8000) != 0;
|
||||
bool ctrl = (GetKeyState(VK_CONTROL) & 0x8000) != 0;
|
||||
bool shift = (GetKeyState(VK_SHIFT) & 0x8000) != 0;
|
||||
bool meta = false;
|
||||
|
||||
if (keyCode != KeyCode::None) {
|
||||
InputManager::Get().ProcessKeyUp(keyCode);
|
||||
InputManager::Get().ProcessKeyUp(keyCode, alt, ctrl, shift, meta);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user