LCEMP/Minecraft.Client/KeyboardMouseInput.h
coah 7da64d57a8 add keyboard/mouse controls for menus and gameplay
wired up keyboard and mouse input for menu navigation, inventory cursor, crafting, and general UI interaction. added WASD movement, mouse look, left ctrl sprint, left shift sneak, and all the keybinds for gameplay. also fixed the sound engine crashing when it cant find a sound asset, and set up the x64 build with proper post-build steps for dlls and redist
2026-03-01 20:02:02 -06:00

108 lines
2.7 KiB
C++

#pragma once
#include <windows.h>
class KeyboardMouseInput
{
public:
static const int MAX_KEYS = 256;
static const int MOUSE_LEFT = 0;
static const int MOUSE_RIGHT = 1;
static const int MOUSE_MIDDLE = 2;
static const int MAX_MOUSE_BUTTONS = 3;
static const int KEY_FORWARD = 'W';
static const int KEY_BACKWARD = 'S';
static const int KEY_LEFT = 'A';
static const int KEY_RIGHT = 'D';
static const int KEY_JUMP = VK_SPACE;
static const int KEY_SNEAK = VK_LSHIFT;
static const int KEY_SPRINT = VK_LCONTROL;
static const int KEY_INVENTORY = 'E';
static const int KEY_DROP = 'Q';
static const int KEY_CRAFTING = VK_TAB;
static const int KEY_CRAFTING_ALT = 'R';
static const int KEY_PAUSE = VK_ESCAPE;
static const int KEY_THIRD_PERSON = VK_F5;
static const int KEY_DEBUG_INFO = VK_F3;
void Init();
void Tick();
void ClearAllState();
void OnKeyDown(int vkCode);
void OnKeyUp(int vkCode);
void OnMouseButtonDown(int button);
void OnMouseButtonUp(int button);
void OnMouseMove(int x, int y);
void OnMouseWheel(int delta);
void OnRawMouseDelta(int dx, int dy);
bool IsKeyDown(int vkCode) const;
bool IsKeyPressed(int vkCode) const;
bool IsKeyReleased(int vkCode) const;
bool IsMouseButtonDown(int button) const;
bool IsMouseButtonPressed(int button) const;
bool IsMouseButtonReleased(int button) const;
int GetMouseX() const { return m_mouseX; }
int GetMouseY() const { return m_mouseY; }
int GetMouseDeltaX() const { return m_mouseDeltaX; }
int GetMouseDeltaY() const { return m_mouseDeltaY; }
int GetMouseWheel() const { return m_mouseWheel; }
void SetMouseGrabbed(bool grabbed);
bool IsMouseGrabbed() const { return m_mouseGrabbed; }
void SetWindowFocused(bool focused);
bool IsWindowFocused() const { return m_windowFocused; }
bool HasAnyInput() const { return m_hasInput; }
float GetMoveX() const;
float GetMoveY() const;
float GetLookX(float sensitivity) const;
float GetLookY(float sensitivity) const;
private:
bool m_keyDown[MAX_KEYS];
bool m_keyDownPrev[MAX_KEYS];
bool m_keyPressedAccum[MAX_KEYS];
bool m_keyReleasedAccum[MAX_KEYS];
bool m_keyPressed[MAX_KEYS];
bool m_keyReleased[MAX_KEYS];
bool m_mouseButtonDown[MAX_MOUSE_BUTTONS];
bool m_mouseButtonDownPrev[MAX_MOUSE_BUTTONS];
bool m_mouseBtnPressedAccum[MAX_MOUSE_BUTTONS];
bool m_mouseBtnReleasedAccum[MAX_MOUSE_BUTTONS];
bool m_mouseBtnPressed[MAX_MOUSE_BUTTONS];
bool m_mouseBtnReleased[MAX_MOUSE_BUTTONS];
int m_mouseX;
int m_mouseY;
int m_mouseDeltaX;
int m_mouseDeltaY;
int m_mouseDeltaAccumX;
int m_mouseDeltaAccumY;
int m_mouseWheel;
int m_mouseWheelAccum;
bool m_mouseGrabbed;
bool m_windowFocused;
bool m_hasInput;
};
extern KeyboardMouseInput g_KBMInput;