OROCHI
 
Loading...
Searching...
No Matches
GxSysInput.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CORE_NAMESPACE_BEGIN()
13
14class GxUnitLocate;
15
16//===========================================================================
18//===========================================================================
20{
21 //-----------------------------------------------------------
23 //-----------------------------------------------------------
25public:
26 // RTTI定義
28 // GxClassBase継承クラス用禁止宣言
30
31
32 //-------------------------------------------------------------
34 //-------------------------------------------------------------
36
39 : _networkPadCount(0)
40 , _enableDInputKeyboard(false)
41 , _enableForegroundKeyboard(true)
42 , _enableForegroundPad(true)
43 , _enableForegroundMouse(true)
44 , _useDualshock(false)
45 , _supportedStyleSetMask(0)
46 {}
47
49 //-------------------------------------------------------------
51 //-------------------------------------------------------------
53
55 void loadJson(const GxJson::GxJsonNode& jsonNode);
56
58 //-------------------------------------------------------------
60 //-------------------------------------------------------------
62
70
72};
73
74//===========================================================================
76//===========================================================================
78{
79 //-------------------------------------------------------------
81 //-------------------------------------------------------------
83public:
85 static const s32 INVALID_HANDLE = -1;
87 static const s32 INVALID_USER_ID = -1;
88
89 GX_RTTI_ABSTRACT_CLASS(GxInputDevice, GxClassBase)
90 // GxClassBase継承クラス用禁止宣言
92
93
94 enum class KIND
95 {
96 NONE = 0,
97 UNKNOWN,
98#if defined(_WINDOWS) || defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
99 PAD_XBOX,
100#endif //_WINDOWS || _PS4 || _PS5 || _XBOX_XS
101
102#if defined(_WINDOWS) || GX_DEVELOP
103 KEYBOARD,
104 MOUSE,
105#endif //_WINDOWS || GX_DEVELOP
106
107#if defined(_WINDOWS)
108 PAD_PC,
109 KEYBOARD_DINPUT,
110#if GX_DEVELOP
111 PAD_VIRTUAL,
112#endif //GX_DEVELOP
113#elif defined(_NX64)
114 PAD_NX,
115#endif // _NX64
116#if defined(_WINDOWS) || defined(_PS4) || defined(_PS5)
117 PAD_PS4,
118#endif //_WINDOWS || _PS4 || _PS5
119#if defined(_WINDOWS)
120 IME_TEXT,
121#endif //_WINDOWS
123 };
124
126 //-------------------------------------------------------------
128 //-------------------------------------------------------------
130
132 GxInputDevice(void);
134 ~GxInputDevice(void) override {}
136 virtual b32 initialize(void) = 0;
137
139 //---------------------------------------------------------------------------
141 //---------------------------------------------------------------------------
143
145 virtual void getInputDataDevice(void) = 0;
147 virtual void update(void) = 0;
149 virtual void clear(void) = 0;
150#if GX_DEVELOP
152 virtual void developRender(void) = 0;
153#endif //GX_DEVELOP
155 virtual void saveInput(void) = 0;
157 virtual void loadInput(void) = 0;
158
160 //-----------------------------------------------------------
162 //-----------------------------------------------------------
164
166 constexpr s32 getRepeatStart(void) const { return _repeatStart; }
168 constexpr void setRepeatStart(s32 time){ _repeatStart = time; }
170 constexpr s32 getRepeatInterval(void) const { return _repeatInterval; }
172 constexpr void setRepeatInterval(s32 intervalTime){ _repeatInterval = intervalTime; }
174 constexpr u32 getNumber(void) const { return _number; }
176 constexpr void setNumber(u32 number){ _number = number; }
178 constexpr void setKind(KIND kind){ _kind = kind; }
180 constexpr KIND getKind(void) const { return _kind; }
182 virtual b32 isEnable(void) const = 0;
184 virtual b32 isOk(void) = 0;
186 virtual b32 isCancel(void) = 0;
188 GX_FORCE_INLINE virtual s32 getUserId(void) const { return INVALID_USER_ID; }
190 virtual void setUserId(s32 /*id*/) {}
191
193 //-------------------------------------------------------------
195 //-------------------------------------------------------------
197private:
198 s32 _repeatStart;
199 s32 _repeatInterval;
200 u32 _number;
201 KIND _kind;
202
204};
205
206class GxPad;
207#if defined(_WINDOWS) || GX_DEVELOP
208class GxKeyboard;
209class GxMouse;
210class GxImeText;
211#endif //_WINDOWS || GX_DEVELOP
212
213//===========================================================================
215//===========================================================================
216class GxSysInput : public GxSysBase, public SingletonBase<GxSysInput>
217{
218 //-------------------------------------------------------------
220 //-------------------------------------------------------------
222public:
223 GX_RTTI_ABSTRACT_CLASS(GxSysInput, GxSysBase)
224 // GxClassBase継承クラス用禁止宣言
226
227
228 enum class DEVICE
229 {
230 DEFAULT = -1,
231 PAD_0 = 0,
232 PAD_1,
233 PAD_2,
234 PAD_3,
235#if defined(_NX64) || defined(_WINDOWS)
236 PAD_4,
237 PAD_5,
238 PAD_6,
239 PAD_7,
240#endif //_NX64 || _WINDOWS
241#if defined(_NX64)
242 PAD_8,
243#elif defined(_WINDOWS)
244#if GX_DEVELOP
245 PAD_VIRTUAL,
246#endif //GX_DEVELOP
247#endif //_WINDOWS
248 PAD_MAX,
249
250#if defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
251 USER_ASSIGNED_CONTROLLER_MAX = PAD_MAX,
252#endif //_PS4 || _PS5 || _XBOX_XS
253
254#if defined(_WINDOWS)
255 KEYBOARD = PAD_MAX,
256 MOUSE,
257 IME_TEXT,
259#elif defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
260#if GX_DEVELOP
261 KEYBOARD = USER_ASSIGNED_CONTROLLER_MAX,
262 MOUSE,
264#else //GX_DEVELOP
265 OFFLINE_MAX = USER_ASSIGNED_CONTROLLER_MAX,
266#endif // !GX_DEVELOP
267#else //_PS4 || _PS5 || _XBOX_XS
268#if GX_DEVELOP
269 KEYBOARD = PAD_MAX,
270 MOUSE,
272#else //GX_DEVELOP
274#endif // !GX_DEVELOP
275#endif // !(_PS4 || _PS5)
276
278
279#if defined(_PS4) || defined(_PS5)
280 USER_ASSIGNED_CONTROLLER_START = PAD_0,
281 USER_ASSIGNED_CONTROLLER_END = USER_ASSIGNED_CONTROLLER_START + USER_ASSIGNED_CONTROLLER_MAX - 1,
282#endif //_PS4 || _PS5
283 };
284#if GX_DEVELOP
286 GX_ENUM_TABLE_COUNT(DEVICE, static_cast<s32>(DEVICE::PAD_MAX) + 1)
287#endif //GX_DEVELOP
288
290 enum class PLAY_PAD
291 {
292 ONCE,
293 LOOP,
294 LOOP_LOCAL,
295 MAX,
296 };
297#if GX_DEVELOP
299 GX_ENUM_TABLE_MAX(PLAY_PAD)
300#endif //GX_DEVELOP
301
303 //-------------------------------------------------------------
305 //-------------------------------------------------------------
307
309 GxSysInput(void);
311 ~GxSysInput(void) override {}
313 b32 initialize(const GxClassBase* pInitializeInformation) override;
315 GX_FORCE_INLINE virtual b32 isInitialized(void) { return _isInitialized; };
317 void terminate(void) override;
318
320 //-------------------------------------------------------------
322 //-------------------------------------------------------------
324
326 void update(void) override;
327#if GX_DEVELOP
329 void developRender(void);
330#endif //GX_DEVELOP
332 void saveInputAll(void);
334 void loadInputAll(void);
335#if GX_DEVELOP
337 void recordPad(void);
338#endif //GX_DEVELOP
340 void playPad(void);
342 void stopPadRecorder(void);
344 constexpr void setPlayPadMode(PLAY_PAD mode){ _playPadMode = mode; }
346 constexpr PLAY_PAD getPlayPadMode(void) const { return _playPadMode; }
347protected:
351 void updatePlayPad(void);
352
354 //-------------------------------------------------------------
356 //-------------------------------------------------------------
358public:
360 constexpr u32 getDeviceMax(void){ return static_cast<s32>(DEVICE::OFFLINE_MAX) + _networkPadCount; }
362 constexpr GxInputDevice* getDevice(u32 number) const { return static_cast<GxInputDevice*>(_deviceArray[number]); }
364 GxPad* getPad(DEVICE number = DEVICE::DEFAULT) const;
365#if defined(_WINDOWS) || GX_DEVELOP
367 GX_FORCE_INLINE GxKeyboard* getKeyboard(void) const { return gx_cast<GxKeyboard*>(static_cast<GxInputDevice*>(_deviceArray[static_cast<s32>(DEVICE::KEYBOARD)])); }
369 GX_FORCE_INLINE GxMouse* getMouse(void) const { return gx_cast<GxMouse*>(static_cast<GxInputDevice*>(_deviceArray[static_cast<s32>(DEVICE::MOUSE)])); }
370#if defined(_WINDOWS)
372 constexpr IDirectInput8* getDirectInput(void) const { return _pDirectInput; }
374 constexpr u32 getRetrySequence(void) const { return _retrySequence; }
376 void updateConnectState(void);
378 GX_FORCE_INLINE b32 isEnableForegroundKeyboard(void) const { return _enableForegroundKeyboard; }
380 GX_FORCE_INLINE b32 isEnableForegroundPad(void) const { return _enableForegroundPad; }
382 GX_FORCE_INLINE b32 isEnableForegroundMouse(void) const { return _enableForegroundMouse; }
384 GX_FORCE_INLINE GxImeText* getImeText(void) const { return gx_cast<GxImeText*>(static_cast<GxInputDevice*>(_deviceArray[static_cast<s32>(DEVICE::IME_TEXT)])); }
385#elif _XBOX_XS
387 GX_FORCE_INLINE ComPtr<IGameInput> getGameInput(void) const { return _pGameInput; }
388#endif // _XBOX_XS
389#endif //_WINDOWS || GX_DEVELOP
390
391#if defined(_PS4) || defined(_PS5)
393 s32 getInputPs4UserId( u32 number );
394
396 void setUserId( u32 number, s32 userId );
397
399 void updateUserId(void);
400#endif // _PS4 || _PS5
401
402#if defined(_NX64)
404 void setSupportedStyleSet(u32 padStyleMask);
405#endif //_NX64
406
408 b32 isOk(void) const;
410 b32 isCancel(void) const;
411
413 //-------------------------------------------------------------
415 //-------------------------------------------------------------
417private:
418 GxArray _deviceArray;
419 u32 _networkPadCount;
420 b32 _isInitialized;
421 PLAY_PAD _playPadMode;
422 b32 _isPadPlay;
423#if defined(_WINDOWS)
424 u32 _retrySequence;
425 IDirectInput8* _pDirectInput;
426 b32 _enableForegroundKeyboard;
427 b32 _enableForegroundPad;
428 b32 _enableForegroundMouse;
429#elif defined(_XBOX_XS)
430 ComPtr<IGameInput> _pGameInput;
431#elif defined(_NX64)
432 u32 _supportedStyleSetMask;
433#endif //_NX64
434
436};
437
438// アクセスインターフェース
439GX_FORCE_INLINE GxSysInput* getGxSysInput(void){ return GxSysInput::getSingletonPointer(); }
440
441GX_CORE_NAMESPACE_END()
T gx_cast(GxClassBaseRoot *pObject)
Definition GxBase.h:264
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
配列クラス
Definition GxArray.h:18
オブジェクト基底クラス
Definition GxBase.h:88
キーボードクラス
Definition GxInputImeText.h:18
入力デバイスクラス
Definition GxSysInput.h:78
virtual b32 isCancel(void)=0
キャンセルボタンの判定
constexpr KIND getKind(void) const
種類を設定
Definition GxSysInput.h:180
virtual void update(void)=0
更新
constexpr void setNumber(u32 number)
番号を設定
Definition GxSysInput.h:176
constexpr void setRepeatInterval(s32 intervalTime)
リピート間隔を設定
Definition GxSysInput.h:172
virtual b32 initialize(void)=0
初期化
constexpr void setKind(KIND kind)
種類を設定
Definition GxSysInput.h:178
KIND
デバイスの種類
Definition GxSysInput.h:95
@ PAD_NETWORK
ネットワークパッド
virtual void setUserId(s32)
ユーザーIDを設定
Definition GxSysInput.h:190
virtual GX_FORCE_INLINE s32 getUserId(void) const
ユーザーIDを取得
Definition GxSysInput.h:188
constexpr s32 getRepeatStart(void) const
リピート開始時間を取得
Definition GxSysInput.h:166
static const s32 INVALID_USER_ID
無効ユーザーID
Definition GxSysInput.h:87
virtual b32 isEnable(void) const =0
有効判定
constexpr s32 getRepeatInterval(void) const
リピート間隔を取得
Definition GxSysInput.h:170
~GxInputDevice(void) override
デストラクタ
Definition GxSysInput.h:134
virtual void getInputDataDevice(void)=0
デバイスから入力を取得
GxInputDevice(void)
コンストラクタ
Definition GxSysInput.cpp:71
constexpr u32 getNumber(void) const
番号を取得
Definition GxSysInput.h:174
virtual void clear(void)=0
クリア
static const s32 INVALID_HANDLE
無効ハンドル
Definition GxSysInput.h:85
constexpr void setRepeatStart(s32 time)
リピート開始時間を設定
Definition GxSysInput.h:168
virtual void loadInput(void)=0
入力状態を復元
virtual b32 isOk(void)=0
決定ボタンの判定
初期化クラス
Definition GxSysInput.h:20
u32 _networkPadCount
ネットワークパッドの個数
Definition GxSysInput.h:63
b32 _enableForegroundMouse
ウインドウにフォーカスがある場合のみマウス入力を受け付ける
Definition GxSysInput.h:67
b32 _enableForegroundPad
ウインドウにフォーカスがある場合のみパッド力を受け付ける
Definition GxSysInput.h:66
b32 _enableForegroundKeyboard
ウインドウにフォーカスがある場合のみキー入力を受け付ける
Definition GxSysInput.h:65
b32 _useDualshock
Win64 で DUALSHOCK4 を有効にする(別途DLLが必要です)
Definition GxSysInput.h:68
u32 _supportedStyleSetMask
NX のスタイルセットマスク (GxPadNX::PAD_STYLE_MASK マスク値)
Definition GxSysInput.h:69
b32 _enableDInputKeyboard
キーボード入力を DirectInput で初期化する
Definition GxSysInput.h:64
JSON解析用ノード
Definition GxJson.h:108
パッドクラス
Definition GxInputPad.h:25
システム基底クラス
Definition GxSysBase.h:18
入力システムクラス
Definition GxSysInput.h:217
~GxSysInput(void) override
デストラクタ
Definition GxSysInput.h:311
constexpr u32 getDeviceMax(void)
デバイスの最大数を取得
Definition GxSysInput.h:360
void update(void) override
更新処理
Definition GxSysInput.cpp:311
void stopPadRecorder(void)
パッド記録・再生停止
Definition GxSysInput.cpp:505
DEVICE
デバイス定義
Definition GxSysInput.h:229
@ PAD_MAX
パッド定義数
@ DEFAULT
デフォルト
@ NETWORK_PAD_START
ネットワークパッド開始
@ OFFLINE_MAX
オフライン定義数
b32 isOk(void) const
決定ボタンの判定
Definition GxSysInput.cpp:612
constexpr PLAY_PAD getPlayPadMode(void) const
パッド再生モードを取得
Definition GxSysInput.h:346
b32 isCancel(void) const
キャンセルボタンの判定
Definition GxSysInput.cpp:628
b32 initialize(const GxClassBase *pInitializeInformation) override
初期化
Definition GxSysInput.cpp:141
void terminate(void) override
終了
Definition GxSysInput.cpp:293
GxPad * getPad(DEVICE number=DEVICE::DEFAULT) const
パッドを取得
Definition GxSysInput.cpp:587
GxSysInput(void)
コンストラクタ
Definition GxSysInput.cpp:126
PLAY_PAD
記録再生タイプ
Definition GxSysInput.h:291
@ LOOP_LOCAL
繰り返し再生(個々の記録長でループ)
@ LOOP
繰り返し再生
@ ONCE
1回再生
void updatePlayPad(void)
パッド再生状態更新
Definition GxSysInput.cpp:520
virtual GX_FORCE_INLINE b32 isInitialized(void)
初期化完了判定
Definition GxSysInput.h:315
constexpr GxInputDevice * getDevice(u32 number) const
デバイスを取得
Definition GxSysInput.h:362
void loadInputAll(void)
全入力状態を復元
Definition GxSysInput.cpp:379
GxInputDevice * createDevice(GxInputDevice::KIND kind)
デバイスを作成
Definition GxSysInput.cpp:395
constexpr void setPlayPadMode(PLAY_PAD mode)
パッド再生モードを設定
Definition GxSysInput.h:344
座標ユニット基礎クラス
Definition GxUnitLocate.h:23
シングルトン基礎クラス
Definition GxSingleton.h:19
static constexpr GxSysInput * getSingletonPointer(void)
Definition GxSingleton.h:59
32bitブーリアン
Definition GxDefine.h:173