*
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user