This commit is contained in:
2025-05-13 02:46:21 +03:00
parent 143e16692e
commit 86914b7fcc
610 changed files with 92343 additions and 2 deletions
+101
View File
@@ -0,0 +1,101 @@
#include "InputSystem.h"
#include "log/NLog.h"
namespace LifeCore {
InputSystem::InputSystem() {
auto hInst = GetModuleHandle(NULL);
hwnd = NULL;
WNDCLASSEX wndClass = { NULL };
wndClass.cbSize = sizeof(WNDCLASSEX);
wndClass.cbClsExtra = NULL;
wndClass.cbWndExtra = NULL;
wndClass.hbrBackground = (HBRUSH)GetStockObject(1);
wndClass.hCursor = (HCURSOR)LoadCursor(NULL, IDC_ARROW);
wndClass.hIcon = LoadIcon(hInst, IDI_APPLICATION);
wndClass.hIconSm = LoadIcon(hInst, IDI_APPLICATION);
wndClass.hInstance = hInst;
wndClass.lpfnWndProc = WndProc;
wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = _text("LifeEngineInputWindow");
if(!RegisterClassEx(&wndClass)) {
MessageBox((HWND)hwnd, _text("Can not create window class! We all gonna die!!"), _text("OH SHIT!"), MB_OK);
}
RECT NewWindowSize;
NewWindowSize.top = 30;
NewWindowSize.left = 300;
NewWindowSize.bottom = NewWindowSize.top + 100;
NewWindowSize.right = NewWindowSize.left + 100;
AdjustWindowRect(&NewWindowSize, WS_OVERLAPPEDWINDOW, false);
if(!(hwnd = (long)CreateWindowEx(NULL, _text("LifeEngineInputWindow"), _text("LifeEngine Input window"), WS_THICKFRAME,
NewWindowSize.left, NewWindowSize.top, NewWindowSize.right - NewWindowSize.left, NewWindowSize.bottom - NewWindowSize.top, NULL, NULL, hInst, NULL))) {
MessageBox((HWND)hwnd, _text("Can not create window! We all gonna die!!"), _text("HOLY SHIT!"), MB_OK);
}
SetWindowLongPtr((HWND)hwnd, GWLP_USERDATA, (long)(this));
ShowWindow((HWND)hwnd, SW_HIDE);
}
void InputSystem::Init() {
RAWINPUTDEVICE dev;
dev.usUsagePage = 1;
dev.usUsage = 2;
dev.dwFlags = 0;
dev.hwndTarget = (HWND)hwnd;
if(!RegisterRawInputDevices(&dev, 1, sizeof(dev))) {
LogInfo() << "Raw devices registration failed!";
} else {
LogInfo() << "Raw devices registered!";
}
}
void InputSystem::Update() {
MSG msg = { 0 };
while(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
LRESULT __stdcall InputSystem::WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) {
switch(message) {
case WM_INPUT:
{
UINT dwSize;
GetRawInputData((HRAWINPUT)lparam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
char* data = new char[dwSize];
if(GetRawInputData((HRAWINPUT)lparam, RID_INPUT, data, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize) {
LogInfo() << "Wrong raw input size!";
}
RAWINPUT* inp = (RAWINPUT*)data;
if(inp->header.dwType == RIM_TYPEMOUSE) {
LogInfo() << "Read mouse input2!";
LogInfo() << "Buttons: " << inp->data.mouse.ulButtons;
}
long val = GetWindowLongPtr(hwnd, GWLP_USERDATA);
if(val) {
InputSystem* input = reinterpret_cast<InputSystem*>(val);
LogInfo() << "OnInput";
//wnd->OnInput();
}
delete[] data;
return 0;
}
break;
}
return DefWindowProc(hwnd, message, wparam, lparam);
}
}