AM Daemon ライブラリリファレンス
InputUnit.h
[詳解]
1 /// @file
2 /// @brief カテゴリ単位のID付けされた入力情報を提供するクラス InputUnit のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_INPUTUNIT_H
7 #define AMDAEMON_INPUTUNIT_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/InputId.h"
11 
12 #include <cstdint>
13 #include <cstddef>
14 
15 namespace amdaemon
16 {
17 /// @addtogroup g_io
18 /// @{
19 
20  // 内部クラスの前方宣言
21  class InnerIndexHolder;
22 
23  // ラッパクラスの前方宣言
24  class SwitchInput;
25  class AnalogInput;
26 
27  /// @brief カテゴリ単位のID付けされた入力情報を提供するクラス。
28  /// @see Input, Player
29  ///
30  /// このクラスのインスタンスをアプリ側で直接生成することはできない。
31  /// Input クラスのメンバ関数 Input#getSystem および Input#getPlayer から取得すること。
32  ///
33  /// 入力識別ID値は文字列から作成できる。
34  /// アプリ実装においては、定数を定義してそれを用いることを推奨する。
35  ///
36  /// @code
37  /// namespace inputs
38  /// {
39  /// const amdaemon::InputId Up = amdaemon::InputId::make(L"up");
40  /// }
41  /// @endcode
42  ///
43  /// 有効な入力識別IDそのものはDaemonプロセスの設定ファイルで定義する。
44  ///
45  /// スイッチ入力は SwitchInput クラス、アナログ入力は AnalogInput クラスで
46  /// それぞれラップして入力値を取得することを推奨する。
47  /// メンバ関数 #getSwitch および #getAnalog で各ラッパを取得できる。
48  ///
49  /// @ingroup g_player
50  class InputUnit
51  {
52  public:
53  /// @brief コンストラクタ。
54  /// @note アプリ側からは利用できない。
55  explicit InputUnit(InnerIndexHolder);
56 
57  // 下記は暗黙の定義を用いる。
58  //‾InputUnit() = default;
59 
60  /// @brief 指定した識別IDの入力が存在するか否かを取得する。
61  /// @param[in] id 入力識別ID。
62  /// @retval true 存在する場合。
63  /// @retval false 存在しない場合。
64  bool exists(const InputId& id) const;
65 
66  /// @brief 入力値を取得する。
67  /// @param[in] id 入力識別ID。
68  /// @return 入力値。入力元デバイスにより値の意味は異なる。
69  ///
70  /// @exception Exception
71  /// 引数 id に存在しない入力識別IDを指定した場合。
72  ///
73  /// - PushSwitchおよびI/Oボードスイッチ入力の場合、
74  /// ON状態ならば 1 、OFF状態ならば 0 を返す。
75  /// - I/Oボードアナログ入力の場合、有効ビット数分になるよう直値を右シフトした値を返す。
76  /// 値の最小値は 1 となる。
77  /// - I/Oボードロータリ入力の場合、前フレームとの差分値を返す。
78  /// 値の範囲は -32768 以上 +32768 以下となる。
79  std::int64_t getValue(const InputId& id) const;
80 
81  /// @brief 前フレームとの入力値の差分値を取得する。
82  /// @param[in] id 入力識別ID。
83  /// @return 前フレームとの入力値の差分値。
84  ///
85  /// @exception Exception
86  /// 引数 id に存在しない入力識別IDを指定した場合。
87  ///
88  /// 入力値がどのような意味を持っていようと関係なく一律で
89  /// 前フレームの入力値と現在フレームの入力値との差分値を返す。
90  std::int64_t getDelta(const InputId& id) const;
91 
92  /// @brief 入力値の取りうる最小値を取得する。
93  /// @param[in] id 入力識別ID。
94  /// @return 入力値の取りうる最小値。
95  ///
96  /// @exception Exception
97  /// 引数 id に存在しない入力識別IDを指定した場合。
98  std::int64_t getMinValue(const InputId& id) const;
99 
100  /// @brief 入力値の取りうる最大値を取得する。
101  /// @param[in] id 入力識別ID。
102  /// @return 入力値の取りうる最大値。
103  ///
104  /// @exception Exception
105  /// 引数 id に存在しない入力識別IDを指定した場合。
106  std::int64_t getMaxValue(const InputId& id) const;
107 
108  /// @brief 入力の直値を取得する。
109  /// @param[in] id 入力識別ID。
110  /// @return 入力の直値。入力元デバイスにより値の意味は異なる。
111  ///
112  /// @exception Exception
113  /// 引数 id に存在しない入力識別IDを指定した場合。
114  ///
115  /// ゲームテストモード等で直値の表示が必要となる場合に用いる。
116  /// 通常はこちらではなくメンバ関数 #getValue を用いること。
117  ///
118  /// - I/Oボードアナログ入力の場合、 0 以上 UINT16_MAX 以下の直値を返す。
119  /// - I/Oボードロータリ入力の場合、 0 以上 UINT16_MAX 以下の直値を返す。
120  /// - 上記以外の入力の場合、メンバ関数 #getValue と同じ値を返す。
121  std::int64_t getDirectValue(const InputId& id) const;
122 
123  /// @brief スイッチ入力ラッパを取得する。
124  /// @param[in] id 入力識別ID。
125  /// @return スイッチ入力ラッパ。
126  ///
127  /// 引数 id に存在しない入力識別IDを指定した場合でもラッパを取得できる。
128  /// ただしラッパのメンバ関数 SwitchInput#exists は false を返す。
129  inline SwitchInput getSwitch(const InputId& id) const;
130 
131  /// @brief アナログ入力ラッパを取得する。
132  /// @param[in] id 入力識別ID。
133  /// @param[in] minValue 最小値を線形変換した時の値。
134  /// @param[in] maxValue 最大値を線形変換した時の値。
135  /// @return アナログ入力ラッパ。
136  ///
137  /// @exception Exception
138  /// 引数 minValue または maxValue に非数値(NAN等)を指定した場合。
139  ///
140  /// 引数 id に存在しない入力識別IDを指定した場合でもラッパを取得できる。
141  /// ただしラッパのメンバ関数 AnalogInput#exists は false を返す。
142  inline AnalogInput getAnalog(
143  const InputId& id,
144  double minValue,
145  double maxValue) const;
146 
147  /// @brief アナログ入力ラッパを取得する。
148  /// @param[in] id 入力識別ID。
149  /// @param[in] maxValue 最大値を線形変換した時の値。既定値は 1.0 。
150  /// @return アナログ入力ラッパ。
151  ///
152  /// @exception Exception
153  /// 引数 maxValue に非数値(NAN等)を指定した場合。
154  ///
155  /// 最小値を線形変換した時の値は 0.0 となる。
156  ///
157  /// 引数 id に存在しない入力識別IDを指定した場合でもラッパを取得できる。
158  /// ただしラッパのメンバ関数 AnalogInput#exists は false を返す。
159  inline AnalogInput getAnalog(const InputId& id, double maxValue = 1) const;
160 
161  private:
162  std::size_t _playerIndex; ///< プレイヤーインデックス。
163 
164  private:
165  // コピー禁止
166  InputUnit(const InputUnit&); // 宣言のみ
167  InputUnit& operator=(const InputUnit&); // 宣言のみ
168  };
169 
170 /// @}
171 } // namespace amdaemon
172 
173 // 互いに参照しているためこの位置に記述する必要がある
174 #include "amdaemon/SwitchInput.h"
175 #include "amdaemon/AnalogInput.h"
176 
177 namespace amdaemon
178 {
179  // スイッチ入力ラッパを取得する。
180  inline SwitchInput InputUnit::getSwitch(const InputId& id) const
181  {
182  return SwitchInput(*this, id);
183  }
184 
185  // アナログ入力ラッパを取得する。
187  const InputId& id,
188  double minValue,
189  double maxValue) const
190  {
191  return AnalogInput(*this, id, minValue, maxValue);
192  }
193 
194  // アナログ入力ラッパを取得する。
195  inline AnalogInput InputUnit::getAnalog(const InputId& id, double maxValue) const
196  {
197  return AnalogInput(*this, id, maxValue);
198  }
199 } // namespace amdaemon
200 
201 #endif // AMDAEMON_INPUTUNIT_H
std::int64_t getDirectValue(const InputId &id) const
入力の直値を取得する。
SwitchInput getSwitch(const InputId &id) const
スイッチ入力ラッパを取得する。
Definition: InputUnit.h:180
抽象入力の識別ID型 InputId のヘッダ。
AnalogInput getAnalog(const InputId &id, double minValue, double maxValue) const
アナログ入力ラッパを取得する。
Definition: InputUnit.h:186
std::int64_t getDelta(const InputId &id) const
前フレームとの入力値の差分値を取得する。
std::int64_t getMaxValue(const InputId &id) const
入力値の取りうる最大値を取得する。
bool exists(const InputId &id) const
指定した識別IDの入力が存在するか否かを取得する。
InputUnit クラスからスイッチ入力を取得するラッパクラス SwitchInput のヘッダ。
Daemonライブラリの環境定義を行うヘッダ。
std::int64_t getMinValue(const InputId &id) const
入力値の取りうる最小値を取得する。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
InputUnit クラスからスイッチ入力を取得するラッパクラス。
Definition: SwitchInput.h:58
InputUnit クラスからアナログ入力を取得するラッパクラス。
Definition: AnalogInput.h:62
カテゴリ単位のID付けされた入力情報を提供するクラス。
Definition: InputUnit.h:50
InputUnit クラスからアナログ入力を取得するラッパクラス AnalogInput のヘッダ。
InputUnit(InnerIndexHolder)
コンストラクタ。
std::int64_t getValue(const InputId &id) const
入力値を取得する。