OROCHI
 
Loading...
Searching...
No Matches
GxInputKeyboard.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CORE_NAMESPACE_BEGIN()
13
14#if defined(_WINDOWS) || GX_DEVELOP
15//===========================================================================
17//===========================================================================
18class GxKeyboard : public GxInputDevice
19{
20 //-------------------------------------------------------------
22 //-------------------------------------------------------------
24public:
25 GX_RTTI_CLASS(GxKeyboard, GxInputDevice)
26 // GxClassBase継承クラス用禁止宣言
27 GX_PROHIBIT_CLASS_BASE(GxKeyboard)
28
29
30 enum class KEY
31 {
32 NULL_ = 0,
33 _0 = '0',
34 _1 = '1',
35 _2 = '2',
36 _3 = '3',
37 _4 = '4',
38 _5 = '5',
39 _6 = '6',
40 _7 = '7',
41 _8 = '8',
42 _9 = '9',
43 A = 'A',
44// ABNT_C1 = VK_ABNT_C1,
45// ABNT_C2 = VK_ABNT_C2,
46 ADD = 0x6B,
47// APOSTROPHE = VK_APOSTROPHE,
48 APPS = 0x5D,
49 AT = 0xC0,
50// AX = VK_AX,
51 B = 'B',
52 BACK = 0x08,
53 BACKSLASH = 0xDC,
54 C = 'C',
55// CALCULATOR = VK_CALCULATOR,
56 CAPITAL = 0x14,
57 COLON = 0xBA,
58 COMMA = 0xBC,
59 CONVERT = 0x1C,
60 D = 'D',
61 DECIMAL = 0x6E,
62 DELETE_ = 0x2E,
63 DIVIDE = 0x6F,
64 DOWN = 0x28,
65 E = 'E',
66 END = 0x23,
67// EQUALS = VK_EQUALS,
68 ESCAPE = 0x1B,
69 F = 'F',
70 F1 = 0x70,
71 F2 = 0x71,
72 F3 = 0x72,
73 F4 = 0x73,
74 F5 = 0x74,
75 F6 = 0x75,
76 F7 = 0x76,
77 F8 = 0x77,
78 F9 = 0x78,
79 F10 = 0x79,
80 F11 = 0x7A,
81 F12 = 0x7B,
82 F13 = 0x7C,
83 F14 = 0x7D,
84 F15 = 0x7E,
85 G = 'G',
86// GRAVE = VK_GRAVE,
87 H = 'H',
88 HOME = 0x24,
89 I = 'I',
90 INSERT = 0x2D,
91 J = 'J',
92 K = 'K',
93 KANA = 0x15,
94 KANJI = 0x19,
95 GRAVE = KANJI,
96 L = 'L',
97 LBRACKET = 0xDB,
98 LCONTROL = 0xA2,
99 LEFT = 0x25,
100 LMENU = 0xA4,
101 LSHIFT = 0xA0,
102 LWIN = 0x5B,
103 M = 'M',
104// MAIL = VK_MAIL,
105// MEDIASELECT = VK_MEDIASELECT,
106// MEDIASTOP = VK_MEDIASTOP,
107 MINUS = 0xBD,
108 MULTIPLY = 0x6A,
109// MUTE = VK_MUTE,
110// MYCOMPUTER = VK_MYCOMPUTER,
111 N = 'N',
112 NEXT = 0x22,
113// NEXTTRACK = VK_NEXTTRACK,
114 NOCONVERT = 0x1D,
115 NUMLOCK = 0x90,
116 NUMPAD0 = 0x60,
117 NUMPAD1 = 0x61,
118 NUMPAD2 = 0x62,
119 NUMPAD3 = 0x63,
120 NUMPAD4 = 0x64,
121 NUMPAD5 = 0x65,
122 NUMPAD6 = 0x66,
123 NUMPAD7 = 0x67,
124 NUMPAD8 = 0x68,
125 NUMPAD9 = 0x69,
126// NUMPADCOMMA = 0x6C,
127 NUMPADENTER = 0x6C,
128// NUMPADEQUALS = VK_NUMPADEQUALS,
129 O = 'O',
130 OEM_102 = 0xE2,
131 P = 'P',
132 PAUSE = 0x13,
133 PERIOD = 0xBE,
134// PLAYPAUSE = VK_PLAYPAUSE,
135// POWER = VK_POWER,
136 PREVTRACK = 0xDE,
137 PRIOR = 0x21,
138 Q = 'Q',
139 R = 'R',
140 RBRACKET = 0xDD,
141 RCONTROL = 0xA3,
142 RETURN = 0x0D,
143 RIGHT = 0x27,
144 RMENU = 0xA5,
145 RSHIFT = 0xA1,
146 RWIN = 0x5C,
147 S = 'S',
148 SCROLL = 0x91,
149 SEMICOLON = 0xBB,
150 SLASH = 0xBF,
151 SLEEP = 0x5F,
152 SNAPSHOT = 0x2C,
153 SPACE = 0x20,
154// STOP = VK_STOP,
155 SUBTRACT = 0x6D,
156// SYSRQ = VK_SYSRQ,
157 T = 'T',
158 TAB = 0x09,
159 U = 'U',
160// UNDERLINE = VK_UNDERLINE,
161// UNLABELED = VK_UNLABELED,
162 UP = 0x26,
163 V = 'V',
164// VOLUMEDOWN = VK_VOLUMEDOWN,
165// VOLUMEUP = VK_VOLUMEUP,
166 W = 'W',
167// WAKE = VK_WAKE,
168// WEBBACK = VK_WEBBACK,
169// WEBFAVORITES = VK_WEBFAVORITES,
170// WEBFORWARD = VK_WEBFORWARD,
171// WEBHOME = VK_WEBHOME,
172// WEBREFRESH = VK_WEBREFRESH,
173// WEBSEARCH = VK_WEBSEARCH,
174// WEBSTOP = VK_WEBSTOP,
175 X = 'X',
176 Y = 'Y',
177 YEN = 0xDF,
178 Z = 'Z',
179 LBUTTON = 0x01,
180 RBUTTON = 0x02,
181 MBUTTON = 0x04,
182 MAX = 122,
183 // 左右両対応
184 WIN,
185 CONTROL = 0x11,
186 MENU = 0x12,
187 SHIFT = 0x10,
188 };
189#if GX_DEVELOP
191 GX_ENUM_TABLE_MAX(KEY)
192#endif //GX_DEVELOP
193 static const u32 KEY_MAX = 256;
194
196 struct GxInputData
197 {
198 u8 _on[KEY_MAX];
199 };
201 struct GxSaveData
202 {
203 s32 _repeatCount[KEY_MAX];
204
205 GxInputData _inputData;
206 u8 _old[KEY_MAX];
207 u8 _oldTemporary[KEY_MAX];
208 u8 _trigger[KEY_MAX];
209 u8 _release[KEY_MAX];
210 u8 _repeat[KEY_MAX];
211 };
213 enum class KEYBOARD_TYPE
214 {
215 UNKNOWN = 0,
216 IBM_83,
217 OLIVETTI_102,
218 IBM_84,
219 IBM_101_102,
220 NOKIA_1050,
221 NOKIA_9140,
222 JAPANESE,
223 DI_NEC98,
224 DI_NEC98LAPTOP,
225 DI_NEC98106,
226 DI_JAPAN106,
227 DI_JAPANAX,
228 DI_J3100,
229 };
230
232 //-------------------------------------------------------------
234 //-------------------------------------------------------------
236
238 GxKeyboard(void);
240 ~GxKeyboard(void) override;
242 void clear(void) override;
244 b32 initialize(void) override;
245
247 //-----------------------------------------------------------
249 //-----------------------------------------------------------
251
253 void getInputDataDevice(void) override;
255 void update(void) override;
256#if GX_DEVELOP
258 constexpr void triggerKey(KEY key) { _trigger[static_cast<s32>(key)] = 0x80; }
260 GX_FORCE_INLINE void developRender(void) override {}
261#endif //GX_DEVELOP
263 void saveInput(void) override;
265 void loadInput(void) override;
266
268 //-----------------------------------------------------------
270 //-----------------------------------------------------------
272
274 GX_FORCE_INLINE const GxInputData& getInputData(void) const { return _inputData; }
276 GX_FORCE_INLINE void setInputData(const GxInputData& inputData){ GX_MEMCPY(&_inputData, &inputData, sizeof(GxInputData)); }
278 b32 isOn(KEY key) const;
280 b32 isOld(KEY key) const;
282 b32 isTrigger(KEY key) const;
284 b32 isRelease(KEY key) const;
286 b32 isRepeat(KEY key) const;
288 b32 isEnable(void) const override;
290 GX_FORCE_INLINE b32 isJpKey(void) const { return (_keyboardType >= KEYBOARD_TYPE::JAPANESE); }
292 constexpr KEYBOARD_TYPE getKeyboardType(void) const { return _keyboardType; }
293
294#if defined(_WINDOWS)
296 b32 createDirectInputDevice(void);
298 constexpr KEYBOARD_TYPE getDirectInputKeyboardType(void) const { return _directInputKeyboardType; }
299#endif //_WINDOWS
300
301protected:
303 GX_FORCE_INLINE b32 isOk(void) override { return isTrigger(KEY::RETURN); }
305 GX_FORCE_INLINE b32 isCancel(void) override { return isTrigger(KEY::BACK); }
306
307#if defined(_WINDOWS)
309 void releaseDirectInputDevice(void);
310#endif //_WINDOWS
311
313 //-------------------------------------------------------------
315 //-------------------------------------------------------------
317private:
318#if defined(_WINDOWS)
319 static const u8 GX_DIK_TO_KEY[KEY_MAX];
320 IDirectInputDevice8* _pDirectInputDevice;
321#endif //_WINDOWS
322#if defined(_WINDOWS) || defined(_XBOX_XS)
323 KEYBOARD_TYPE _directInputKeyboardType;
324#endif //_WINDOWS || _XBOX_XS
325
326 s32 _repeatCount[KEY_MAX];
327
328 GxInputData _inputData;
329 u8 _old[KEY_MAX];
330 u8 _oldTemporary[KEY_MAX];
331 u8 _trigger[KEY_MAX];
332 u8 _release[KEY_MAX];
333 u8 _repeat[KEY_MAX];
334 GxSaveData _saveData;
335 KEYBOARD_TYPE _keyboardType;
336
338};
339
340#endif //_WINDOWS || GX_DEVELOP
341
342GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
@ MAX
定義数
@ X
X.
@ Z
Z.
@ Y
Y.
@ _2
ビュー2
@ _7
ビュー7
@ _1
ビュー1
@ _0
ビュー0
@ _4
ビュー4
@ _6
ビュー6
@ _3
ビュー3
@ _5
ビュー5
@ BACK
裏をカリングする(右手系)
@ SUBTRACT
減算(src-dst)
@ ADD
加算(src+dst)
@ UNKNOWN
未定義
@ DOWN
リソースIDの下位32bitを元にした降順
@ UP
リソースIDの下位32bitを元にした昇順
入力デバイスクラス
Definition GxSysInput.h:78
virtual b32 isCancel(void)=0
キャンセルボタンの判定
virtual void update(void)=0
更新
virtual b32 initialize(void)=0
初期化
virtual b32 isEnable(void) const =0
有効判定
virtual void getInputDataDevice(void)=0
デバイスから入力を取得
virtual void clear(void)=0
クリア
virtual void loadInput(void)=0
入力状態を復元
virtual b32 isOk(void)=0
決定ボタンの判定
セーブデータクラス
Definition GxSaveData.h:18
32bitブーリアン
Definition GxDefine.h:173