World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Mouse.h
См. документацию.
1 #pragma once
2 
3 #include "Engine/Point.h"
4 
5 #include "Platform/Api.h"
6 
7 #ifndef VK_LBUTTON // should replace win32 defines with custom enums
8 /*
9  * Virtual Keys, Standard Set
10  */
11 #define VK_LBUTTON 0x01
12 #define VK_RBUTTON 0x02
13 #define VK_CANCEL 0x03
14 #define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */
15 
16 #if (_WIN32_WINNT >= 0x0500)
17 #define VK_XBUTTON1 0x05 /* NOT contiguous with L & RBUTTON */
18 #define VK_XBUTTON2 0x06 /* NOT contiguous with L & RBUTTON */
19 #endif /* _WIN32_WINNT >= 0x0500 */
20 
21 /*
22  * 0x07 : unassigned
23  */
24 
25 #define VK_BACK 0x08
26 #define VK_TAB 0x09
27 
28 /*
29  * 0x0A - 0x0B : reserved
30  */
31 
32 #define VK_CLEAR 0x0C
33 #define VK_RETURN 0x0D
34 
35 #define VK_SHIFT 0x10
36 #define VK_CONTROL 0x11
37 #define VK_MENU 0x12
38 #define VK_PAUSE 0x13
39 #define VK_CAPITAL 0x14
40 
41 #define VK_KANA 0x15
42 #define VK_HANGEUL 0x15 /* old name - should be here for compatibility */
43 #define VK_HANGUL 0x15
44 #define VK_JUNJA 0x17
45 #define VK_FINAL 0x18
46 #define VK_HANJA 0x19
47 #define VK_KANJI 0x19
48 
49 #define VK_ESCAPE 0x1B
50 
51 #define VK_CONVERT 0x1C
52 #define VK_NONCONVERT 0x1D
53 #define VK_ACCEPT 0x1E
54 #define VK_MODECHANGE 0x1F
55 
56 #define VK_SPACE 0x20
57 #define VK_PRIOR 0x21
58 #define VK_NEXT 0x22
59 #define VK_END 0x23
60 #define VK_HOME 0x24
61 #define VK_LEFT 0x25
62 #define VK_UP 0x26
63 #define VK_RIGHT 0x27
64 #define VK_DOWN 0x28
65 #define VK_SELECT 0x29
66 #define VK_PRINT 0x2A
67 #define VK_EXECUTE 0x2B
68 #define VK_SNAPSHOT 0x2C
69 #define VK_INSERT 0x2D
70 #define VK_DELETE 0x2E
71 #define VK_HELP 0x2F
72 
73 /*
74  * VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
75  * 0x40 : unassigned
76  * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
77  */
78 
79 #define VK_LWIN 0x5B
80 #define VK_RWIN 0x5C
81 #define VK_APPS 0x5D
82 
83 /*
84  * 0x5E : reserved
85  */
86 
87 #define VK_SLEEP 0x5F
88 
89 #define VK_NUMPAD0 0x60
90 #define VK_NUMPAD1 0x61
91 #define VK_NUMPAD2 0x62
92 #define VK_NUMPAD3 0x63
93 #define VK_NUMPAD4 0x64
94 #define VK_NUMPAD5 0x65
95 #define VK_NUMPAD6 0x66
96 #define VK_NUMPAD7 0x67
97 #define VK_NUMPAD8 0x68
98 #define VK_NUMPAD9 0x69
99 #define VK_MULTIPLY 0x6A
100 #define VK_ADD 0x6B
101 #define VK_SEPARATOR 0x6C
102 #define VK_SUBTRACT 0x6D
103 #define VK_DECIMAL 0x6E
104 #define VK_DIVIDE 0x6F
105 #define VK_F1 0x70
106 #define VK_F2 0x71
107 #define VK_F3 0x72
108 #define VK_F4 0x73
109 #define VK_F5 0x74
110 #define VK_F6 0x75
111 #define VK_F7 0x76
112 #define VK_F8 0x77
113 #define VK_F9 0x78
114 #define VK_F10 0x79
115 #define VK_F11 0x7A
116 #define VK_F12 0x7B
117 #define VK_F13 0x7C
118 #define VK_F14 0x7D
119 #define VK_F15 0x7E
120 #define VK_F16 0x7F
121 #define VK_F17 0x80
122 #define VK_F18 0x81
123 #define VK_F19 0x82
124 #define VK_F20 0x83
125 #define VK_F21 0x84
126 #define VK_F22 0x85
127 #define VK_F23 0x86
128 #define VK_F24 0x87
129 
130 /*
131  * 0x88 - 0x8F : unassigned
132  */
133 
134 #define VK_NUMLOCK 0x90
135 #define VK_SCROLL 0x91
136 
137 /*
138  * NEC PC-9800 kbd definitions
139  */
140 #define VK_OEM_NEC_EQUAL 0x92 // '=' key on numpad
141 
142 /*
143  * Fujitsu/OASYS kbd definitions
144  */
145 #define VK_OEM_FJ_JISHO 0x92 // 'Dictionary' key
146 #define VK_OEM_FJ_MASSHOU 0x93 // 'Unregister word' key
147 #define VK_OEM_FJ_TOUROKU 0x94 // 'Register word' key
148 #define VK_OEM_FJ_LOYA 0x95 // 'Left OYAYUBI' key
149 #define VK_OEM_FJ_ROYA 0x96 // 'Right OYAYUBI' key
150 
151 /*
152  * 0x97 - 0x9F : unassigned
153  */
154 
155 /*
156  * VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.
157  * Used only as parameters to GetAsyncKeyState() and GetKeyState().
158  * No other API or message will distinguish left and right keys in this way.
159  */
160 #define VK_LSHIFT 0xA0
161 #define VK_RSHIFT 0xA1
162 #define VK_LCONTROL 0xA2
163 #define VK_RCONTROL 0xA3
164 #define VK_LMENU 0xA4
165 #define VK_RMENU 0xA5
166 
167 #if (_WIN32_WINNT >= 0x0500)
168 #define VK_BROWSER_BACK 0xA6
169 #define VK_BROWSER_FORWARD 0xA7
170 #define VK_BROWSER_REFRESH 0xA8
171 #define VK_BROWSER_STOP 0xA9
172 #define VK_BROWSER_SEARCH 0xAA
173 #define VK_BROWSER_FAVORITES 0xAB
174 #define VK_BROWSER_HOME 0xAC
175 
176 #define VK_VOLUME_MUTE 0xAD
177 #define VK_VOLUME_DOWN 0xAE
178 #define VK_VOLUME_UP 0xAF
179 #define VK_MEDIA_NEXT_TRACK 0xB0
180 #define VK_MEDIA_PREV_TRACK 0xB1
181 #define VK_MEDIA_STOP 0xB2
182 #define VK_MEDIA_PLAY_PAUSE 0xB3
183 #define VK_LAUNCH_MAIL 0xB4
184 #define VK_LAUNCH_MEDIA_SELECT 0xB5
185 #define VK_LAUNCH_APP1 0xB6
186 #define VK_LAUNCH_APP2 0xB7
187 
188 #endif /* _WIN32_WINNT >= 0x0500 */
189 
190 /*
191  * 0xB8 - 0xB9 : reserved
192  */
193 
194 #define VK_OEM_1 0xBA // ';:' for US
195 #define VK_OEM_PLUS 0xBB // '+' any country
196 #define VK_OEM_COMMA 0xBC // ',' any country
197 #define VK_OEM_MINUS 0xBD // '-' any country
198 #define VK_OEM_PERIOD 0xBE // '.' any country
199 #define VK_OEM_2 0xBF // '/?' for US
200 #define VK_OEM_3 0xC0 // '`~' for US
201 
202 /*
203  * 0xC1 - 0xD7 : reserved
204  */
205 
206 /*
207  * 0xD8 - 0xDA : unassigned
208  */
209 
210 #define VK_OEM_4 0xDB // '[{' for US
211 #define VK_OEM_5 0xDC // '\|' for US
212 #define VK_OEM_6 0xDD // ']}' for US
213 #define VK_OEM_7 0xDE // ''"' for US
214 #define VK_OEM_8 0xDF
215 
216 /*
217  * 0xE0 : reserved
218  */
219 
220 /*
221  * Various extended or enhanced keyboards
222  */
223 #define VK_OEM_AX 0xE1 // 'AX' key on Japanese AX kbd
224 #define VK_OEM_102 0xE2 // "<>" or "\|" on RT 102-key kbd.
225 #define VK_ICO_HELP 0xE3 // Help key on ICO
226 #define VK_ICO_00 0xE4 // 00 key on ICO
227 
228 #if (WINVER >= 0x0400)
229 #define VK_PROCESSKEY 0xE5
230 #endif /* WINVER >= 0x0400 */
231 
232 #define VK_ICO_CLEAR 0xE6
233 
234 #if (_WIN32_WINNT >= 0x0500)
235 #define VK_PACKET 0xE7
236 #endif /* _WIN32_WINNT >= 0x0500 */
237 
238 /*
239  * 0xE8 : unassigned
240  */
241 
242 /*
243  * Nokia/Ericsson definitions
244  */
245 #define VK_OEM_RESET 0xE9
246 #define VK_OEM_JUMP 0xEA
247 #define VK_OEM_PA1 0xEB
248 #define VK_OEM_PA2 0xEC
249 #define VK_OEM_PA3 0xED
250 #define VK_OEM_WSCTRL 0xEE
251 #define VK_OEM_CUSEL 0xEF
252 #define VK_OEM_ATTN 0xF0
253 #define VK_OEM_FINISH 0xF1
254 #define VK_OEM_COPY 0xF2
255 #define VK_OEM_AUTO 0xF3
256 #define VK_OEM_ENLW 0xF4
257 #define VK_OEM_BACKTAB 0xF5
258 
259 #define VK_ATTN 0xF6
260 #define VK_CRSEL 0xF7
261 #define VK_EXSEL 0xF8
262 #define VK_EREOF 0xF9
263 #define VK_PLAY 0xFA
264 #define VK_ZOOM 0xFB
265 #define VK_NONAME 0xFC
266 #define VK_PA1 0xFD
267 #define VK_OEM_CLEAR 0xFE
268 
269 /*
270  * 0xFF : reserved
271  */
272 #endif
273 
274 bool UI_OnVkKeyDown(unsigned int vkKey);
275 
276 class Image;
277 class OSWindow;
278 
279 class Mouse {
280  public:
281  inline Mouse() : cursor_img(nullptr), window(nullptr) {
282  pCursorBitmap_sysmem = nullptr;
283  field_34 = 0;
284  pCursorBitmap2_sysmem = nullptr;
285  pPickedItem = nullptr;
286  ptr_90 = nullptr;
287  pWard = nullptr;
288  uMouseClickX = 0;
289  uMouseClickY = 0;
290  }
291 
292  void GetClickPos(unsigned int *pX, unsigned int *pY);
293  void RemoveHoldingItem();
294  void SetCursorBitmapFromItemID(unsigned int uItemID);
295  void SetCurrentCursorBitmap();
296  void SetCursorImage(const String &name);
297  void _469AE4();
298  void ClearCursor();
299  void AllocCursorSystemMem();
300  void *DoAllocCursorMem();
302  void Initialize(OSWindow *window);
303  void SetActive(bool active);
304  void Deactivate();
305  void DrawCursor();
306  void Activate();
307  void ClearPickedItem();
308  void DrawCursorToTarget();
309  void ReadCursorWithItem();
310  void ChangeActivation(int a1);
311  void SetMouseClick(int x, int y);
312 
313  void UI_OnMouseLeftClick();
314 
315  unsigned int uPointingObjectID;
316  unsigned int bActive = 0;
317  int field_8;
318  int field_C;
319  unsigned int bInitialized = 0;
320  unsigned int bRedraw = 0;
321  int field_18 = 0;
322  int field_1C = 0;
323  int field_20 = 0;
325  OSWindow *window; // HWND hWnd;
327  int field_34;
332  int field_50 = 0;
333  int field_54 = 0;
335  int field_5C[13];
336  void *ptr_90;
337  int field_94;
338  int field_98 = 0;
339  int field_9C = 0;
340  int field_A0 = 0;
341  int field_A4 = 0;
342  int field_A8 = 0;
343  int field_AC = 0;
344  int field_B0;
345  int field_B4;
346  int field_B8;
347  int field_BC;
348  int field_C0;
352  int field_D4;
353  int field_D8;
354  int field_DC;
355  int field_E0;
360  char field_F4;
361  String cursor_name; // char pCurrentCursorName[11];
362  int field_100 = 0;
363  int field_104 = 0;
364  unsigned int uMouseClickX;
365  unsigned int uMouseClickY;
366  void /*ThreadWard*/ *pWard;
367 };
uint16_t
unsigned __int16 uint16_t
Definition: SDL_config.h:37
Mouse::pCursorBitmapRect_y
int pCursorBitmapRect_y
Definition: Mouse.h:357
Mouse::field_54
int field_54
Definition: Mouse.h:333
Mouse::SetMouseClick
void SetMouseClick(int x, int y)
Definition: Mouse.cpp:251
Mouse::GetCursorPos
Point GetCursorPos()
Definition: Mouse.cpp:108
Mouse
Definition: Mouse.h:279
Mouse::field_C
int field_C
Definition: Mouse.h:318
Mouse::AllocCursorSystemMem
void AllocCursorSystemMem()
Definition: Mouse.cpp:98
Mouse::field_18
int field_18
Definition: Mouse.h:321
Mouse::uMouseClickY
unsigned int uMouseClickY
Definition: Mouse.h:365
Mouse::pCursorBitmapRect_z
int pCursorBitmapRect_z
Definition: Mouse.h:359
Mouse::Deactivate
void Deactivate()
Definition: Mouse.cpp:137
Mouse::Mouse
Mouse()
Definition: Mouse.h:281
Mouse::uCursorBitmapHeight
int uCursorBitmapHeight
Definition: Mouse.h:351
Mouse::bActive
unsigned int bActive
Definition: Mouse.h:316
Mouse::field_A0
int field_A0
Definition: Mouse.h:340
Point.h
Mouse::field_DC
int field_DC
Definition: Mouse.h:354
UI_OnVkKeyDown
bool UI_OnVkKeyDown(unsigned int vkKey)
Definition: Mouse.cpp:336
Mouse::window
OSWindow * window
Definition: Mouse.h:325
Mouse::cursor_name
String cursor_name
Definition: Mouse.h:361
Mouse::cursor_img
Image * cursor_img
Definition: Mouse.h:324
Mouse::field_B8
int field_B8
Definition: Mouse.h:346
Mouse::DrawCursorToTarget
void DrawCursorToTarget()
Definition: Mouse.cpp:197
Mouse::field_20
int field_20
Definition: Mouse.h:323
Mouse::field_BC
int field_BC
Definition: Mouse.h:347
Mouse::bRedraw
unsigned int bRedraw
Definition: Mouse.h:320
Mouse::_469AE4
void _469AE4()
Definition: Mouse.cpp:62
Mouse::Activate
void Activate()
Definition: Mouse.cpp:193
Mouse::ptr_90
void * ptr_90
Definition: Mouse.h:336
Mouse::uCursorWithItemY
int uCursorWithItemY
Definition: Mouse.h:331
Mouse::pCursorBitmapPos
Point pCursorBitmapPos
Definition: Mouse.h:349
Mouse::field_94
int field_94
Definition: Mouse.h:337
Mouse::uMouseClickX
unsigned int uMouseClickX
Definition: Mouse.h:364
Mouse::field_50
int field_50
Definition: Mouse.h:332
OSWindow
Definition: OSWindow.h:12
Mouse::field_B0
int field_B0
Definition: Mouse.h:344
Mouse::field_34
int field_34
Definition: Mouse.h:327
y
EGLSurface EGLint EGLint y
Definition: SDL_egl.h:1596
Mouse::pWard
void * pWard
Definition: Mouse.h:366
Mouse::field_E0
int field_E0
Definition: Mouse.h:355
Mouse::ClearPickedItem
void ClearPickedItem()
Definition: Mouse.cpp:195
Mouse::Initialize
void Initialize(OSWindow *window)
Definition: Mouse.cpp:112
Image
Definition: Image.h:19
x
EGLSurface EGLint x
Definition: SDL_egl.h:1596
Mouse::pPickedItem
Image * pPickedItem
Definition: Mouse.h:329
Mouse::pCursorBitmap2_sysmem
uint8_t * pCursorBitmap2_sysmem
Definition: Mouse.h:328
Mouse::field_A4
int field_A4
Definition: Mouse.h:341
Mouse::pCursorBitmapRect_x
int pCursorBitmapRect_x
Definition: Mouse.h:356
Mouse::ClearCursor
void ClearCursor()
Definition: Mouse.cpp:88
Mouse::field_F4
char field_F4
Definition: Mouse.h:360
Mouse::uPointingObjectID
unsigned int uPointingObjectID
Definition: Mouse.h:315
Mouse::field_D8
int field_D8
Definition: Mouse.h:353
Mouse::field_104
int field_104
Definition: Mouse.h:363
window
EGLSurface EGLNativeWindowType * window
Definition: SDL_egl.h:1580
Mouse::ChangeActivation
void ChangeActivation(int a1)
Definition: Mouse.cpp:249
Mouse::GetClickPos
void GetClickPos(unsigned int *pX, unsigned int *pY)
Definition: Mouse.cpp:20
Mouse::DrawCursor
void DrawCursor()
Definition: Mouse.cpp:143
Mouse::field_98
int field_98
Definition: Mouse.h:338
Mouse::field_5C
int field_5C[13]
Definition: Mouse.h:335
Mouse::pCursorBitmapRect_w
int pCursorBitmapRect_w
Definition: Mouse.h:358
Mouse::field_B4
int field_B4
Definition: Mouse.h:345
Mouse::SetActive
void SetActive(bool active)
Definition: Mouse.cpp:135
Mouse::SetCurrentCursorBitmap
void SetCurrentCursorBitmap()
Definition: Mouse.cpp:36
uint8_t
unsigned __int8 uint8_t
Definition: SDL_config.h:35
Mouse::field_C0
int field_C0
Definition: Mouse.h:348
name
EGLImageKHR EGLint * name
Definition: SDL_egl.h:1497
Mouse::uCursorBitmapPitch
int uCursorBitmapPitch
Definition: Mouse.h:334
Mouse::uCursorBitmapWidth
int uCursorBitmapWidth
Definition: Mouse.h:350
Mouse::field_9C
int field_9C
Definition: Mouse.h:339
Mouse::field_AC
int field_AC
Definition: Mouse.h:343
Mouse::field_1C
int field_1C
Definition: Mouse.h:322
Mouse::DoAllocCursorMem
void * DoAllocCursorMem()
Definition: Mouse.cpp:106
Mouse::SetCursorBitmapFromItemID
void SetCursorBitmapFromItemID(unsigned int uItemID)
Definition: Mouse.cpp:32
Mouse::field_8
int field_8
Definition: Mouse.h:317
Mouse::field_100
int field_100
Definition: Mouse.h:362
Mouse::SetCursorImage
void SetCursorImage(const String &name)
Definition: Mouse.cpp:38
Point
Definition: Point.h:3
Mouse::field_D4
int field_D4
Definition: Mouse.h:352
Mouse::field_A8
int field_A8
Definition: Mouse.h:342
Mouse::bInitialized
unsigned int bInitialized
Definition: Mouse.h:319
String
std::string String
Definition: Strings.h:10
Mouse::UI_OnMouseLeftClick
void UI_OnMouseLeftClick()
Definition: Mouse.cpp:258
Mouse::RemoveHoldingItem
void RemoveHoldingItem()
Definition: Mouse.cpp:25
Mouse::ReadCursorWithItem
void ReadCursorWithItem()
Definition: Mouse.cpp:206
Api.h
Mouse::uCursorWithItemX
int uCursorWithItemX
Definition: Mouse.h:330
Mouse::pCursorBitmap_sysmem
uint16_t * pCursorBitmap_sysmem
Definition: Mouse.h:326