-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathdllmain.cpp
128 lines (116 loc) · 3.96 KB
/
dllmain.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <MaiSense/Sensor.hpp>
#include <MaiSense/InputManager.hpp>
#include <MaiSense/TouchController.hpp>
#include <MaiSense/KeyboardController.hpp>
#include <MaiSense/MouseController.hpp>
#include <MaiSense/SensorChecker.hpp>
#include <MaiSense/SensorProcessor.hpp>
#include <string>
#pragma warning (disable : 4996)
using namespace MaiSense;
TouchController touchController;
KeyboardController keyboardController;
MouseController mouseController;
SensorChecker sensorChecker;
SensorProcessor processor;
BOOL APIENTRY DllMain(HMODULE hMod, DWORD cause, LPVOID lpReserved)
{
if (!InputManager::Ready())
return TRUE;
if (cause == DLL_PROCESS_ATTACH)
{
AllocConsole();
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stdout);
touchController.SetCallback([&](TouchEvent ev)
{
processor.Handle(ev);
if (sensorChecker.GetScreenWidth() == 0 || sensorChecker.GetScreenHeight() == 0)
{
RECT clientRect;
GetClientRect(InputManager::GetGameWindow(), &clientRect);
sensorChecker.SetScreenSize
(
clientRect.left + clientRect.right,
clientRect.top + clientRect.bottom
);
}
if (processor.GetChecker() == NULL)
processor.SetChecker(&sensorChecker);
if (processor.GetSensor() == NULL)
processor.SetSensor(InputManager::GetSensor());
});
keyboardController.SetCallback([&](KeyEvent ev)
{
auto sensor = InputManager::GetSensor();
switch (ev.KeyCode)
{
case 0x30: // 0
sensor->Queue(Sensor::C, ev.Active);
break;
case 0x31: // 1
sensor->Queue(Sensor::A1, ev.Active);
break;
case 0x32: // 2
sensor->Queue(Sensor::A2, ev.Active);
break;
case 0x33: // 3
sensor->Queue(Sensor::A3, ev.Active);
break;
case 0x34: // 4
sensor->Queue(Sensor::A4, ev.Active);
break;
case 0x35: // 5
sensor->Queue(Sensor::A5, ev.Active);
break;
case 0x36: // 6
sensor->Queue(Sensor::A6, ev.Active);
break;
case 0x37: // 7
sensor->Queue(Sensor::A7, ev.Active);
break;
case 0x38: // 8
sensor->Queue(Sensor::A8, ev.Active);
break;
case VK_NUMPAD1: // NUMPAD 1
sensor->Queue(Sensor::B1, ev.Active);
break;
case VK_NUMPAD2: // NUMPAD 2
sensor->Queue(Sensor::B2, ev.Active);
break;
case VK_NUMPAD3: // NUMPAD 3
sensor->Queue(Sensor::B3, ev.Active);
break;
case VK_NUMPAD4: // NUMPAD 4
sensor->Queue(Sensor::B4, ev.Active);
break;
case VK_NUMPAD5: // NUMPAD 5
sensor->Queue(Sensor::B5, ev.Active);
break;
case VK_NUMPAD6: // NUMPAD 6
sensor->Queue(Sensor::B6, ev.Active);
break;
case VK_NUMPAD7: // NUMPAD 7
sensor->Queue(Sensor::B7, ev.Active);
break;
case VK_NUMPAD8: // NUMPAD 8
sensor->Queue(Sensor::B8, ev.Active);
break;
}
});
mouseController.SetCallback([&](MouseEvent ev)
{
if (ev.MButton)
mouseController.EmulateTouch();
});
InputManager::Hook();
InputManager::Install(&touchController);
InputManager::Install(&keyboardController);
InputManager::Install(&mouseController);
}
else if (cause == DLL_PROCESS_DETACH)
{
InputManager::Unhook();
}
return TRUE;
}