MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_gamepad_server.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_GAMEPAD_SERVER_H_1609654269
12#define INCGUARD_MGL_GAMEPAD_SERVER_H_1609654269
13
14#include <array>
15#include <mutex>
16#include <optional>
17
19#include <mgl/event/mgl_event.h>
25
26namespace MGL
27{
28class InitializerDelegate;
29}
30
31namespace MGL::Input
32{
33constexpr size_t kGamepadMax = 32;
34
36class GamepadServer final : public MGL::SharedSingleton<GamepadServer>
37{
38public:
40
41 GamepadServer() noexcept;
42
43 bool AddDelegate(STL::unique_ptr<GamepadDelegate> delegate) noexcept;
44
46 void ReturnPadState(PadState *returnState) noexcept;
47 size_t GetFreePadStateCount() const noexcept;
48
49 PadEntry Entry(const PadState &entryState, PadEntry entry) noexcept;
50 void Leave(const PadState &leaveState) noexcept;
51 void LeaveAll() noexcept;
52
53 const PadState &GetPadState(PadEntry entry = PadEntry::Auto) noexcept;
54
55 /* ------------------------------------------------------------------------- */
60 /* ------------------------------------------------------------------------- */
61 constexpr void SetRepeatSetting(const RepeatSetting &repeatSetting) noexcept
62 {
63 _repeatSetting = repeatSetting;
64 }
65
66 /* ------------------------------------------------------------------------- */
71 /* ------------------------------------------------------------------------- */
72 constexpr const RepeatSetting &GetRepeatSetting() const noexcept
73 {
74 return _repeatSetting;
75 }
76
77 void SetDecideCancelButton(PadType type, PadButton decideButton, PadButton cancelButton) noexcept;
78
79 PadButton GetDecideButton(PadType type, PadButton defaultButton = PadButton::None) const noexcept;
80 PadButton GetCancelButton(PadType type, PadButton defaultButton = PadButton::None) const noexcept;
81
82private:
83 static void OnEventPreFrameUpdate(void *callbackArg, void *notifyArg) noexcept;
84
85 std::optional<size_t> GetEntryIndex(PadEntry entry) const noexcept;
86 void SetEntryIndex(PadEntry entry, int32_t index) noexcept;
87
88 Event::Handle _eventPreFrameUpdate;
89
91 std::array<PadState, kGamepadMax> _padStates;
92
93 std::array<int32_t, kGamepadEntryMax> _entryIndexes;
94
95 bool _existsHighPriorityPad{false};
96
97 PadState _invalidPadState;
98
99 RepeatSetting _repeatSetting;
100
101 struct TypeSettings
102 {
103 PadButton decideButton{PadButton::None};
104 PadButton cancelButton{PadButton::None};
105 };
106 STL::unordered_map<PadType, TypeSettings> _typeSettings;
107
108 std::recursive_mutex _mutexPadStates;
109 std::recursive_mutex _mutexEntry;
110};
111} // namespace MGL::Input
112
113#endif // INCGUARD_MGL_GAMEPAD_SERVER_H_1609654269
114
115// vim: et ts=4 sw=4 sts=4
イベントハンドルクラス
Definition mgl_event_handle.h:21
ゲームパッドサーバ
Definition mgl_gamepad_server.h:37
PadEntry Entry(const PadState &entryState, PadEntry entry) noexcept
ゲームパッドのエントリー
Definition mgl_gamepad_server.cc:204
const PadState & GetPadState(PadEntry entry=PadEntry::Auto) noexcept
ゲームパッドステートを取得
Definition mgl_gamepad_server.cc:311
constexpr void SetRepeatSetting(const RepeatSetting &repeatSetting) noexcept
リピート入力の設定
Definition mgl_gamepad_server.h:61
size_t GetFreePadStateCount() const noexcept
空いているパッドステートの数を取得
Definition mgl_gamepad_server.cc:180
void LeaveAll() noexcept
全てのエントリーを解除
Definition mgl_gamepad_server.cc:290
static STL::unique_ptr< GamepadServer > & GetInstanceRef() noexcept
インスタンスの取得
Definition mgl_gamepad_server.cc:24
PadButton GetDecideButton(PadType type, PadButton defaultButton=PadButton::None) const noexcept
決定ボタンの割り当てを取得
Definition mgl_gamepad_server.cc:451
void SetDecideCancelButton(PadType type, PadButton decideButton, PadButton cancelButton) noexcept
決定ボタンとキャンセルボタンの割り当て
Definition mgl_gamepad_server.cc:421
void ReturnPadState(PadState *returnState) noexcept
パッドステートをサーバに返却
Definition mgl_gamepad_server.cc:161
PadButton GetCancelButton(PadType type, PadButton defaultButton=PadButton::None) const noexcept
キャンセルボタンの割り当てを取得
Definition mgl_gamepad_server.cc:476
bool AddDelegate(STL::unique_ptr< GamepadDelegate > delegate) noexcept
デリゲートの追加
Definition mgl_gamepad_server.cc:53
PadState * RequestsFreePadState() noexcept
未使用のパッドステートを要求
Definition mgl_gamepad_server.cc:138
constexpr const RepeatSetting & GetRepeatSetting() const noexcept
リピート入力の設定状態を取得
Definition mgl_gamepad_server.h:72
void Leave(const PadState &leaveState) noexcept
ゲームパッドのエントリーの解除
Definition mgl_gamepad_server.cc:261
GamepadServer() noexcept
コンストラクタ
Definition mgl_gamepad_server.cc:36
ゲームパッドステートクラス
Definition mgl_gamepad_state.h:26
シングルトンテンプレート(共有ライブラリ用)
Definition mgl_singleton.h:44
MGL イベント
PadEntry
パッドのエントリータイプ
Definition mgl_gamepad_defs.h:164
PadType
ゲームパッドの種類
Definition mgl_gamepad_defs.h:148
PadButton
ゲームパッドのボタンの定義
Definition mgl_gamepad_defs.h:33
MGL ゲームパッド用デリゲート基底クラス
constexpr size_t kGamepadMax
ゲームパッドの最大認識数
Definition mgl_gamepad_server.h:33
MGL ゲームパッドステート
MGL リピート入力関連定義
MGL シングルトンクラス
MGL STLコンテナの代替
std::vector< T, Allocator< T > > vector
std::vectorの代替
Definition mgl_stl_containers.h:51
MGL STLのメモリ関連の代替
std::unique_ptr< T, Deleter > unique_ptr
MGLのアロケータを利用するユニークポインタ
Definition mgl_stl_memory.h:247
リピート設定
Definition mgl_input_repeat.h:25