AM Daemon ライブラリリファレンス
SwitchInput.h
[詳解]
1 /// @file
2 /// @brief InputUnit クラスからスイッチ入力を取得するラッパクラス SwitchInput のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_SWITCHINPUT_H
7 #define AMDAEMON_SWITCHINPUT_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/InputId.h"
11 
12 namespace amdaemon
13 {
14 /// @addtogroup g_io
15 /// @{
16 
17  // InputUnit クラスの前方宣言
18  class InputUnit;
19 
20  /// @brief InputUnit クラスからスイッチ入力を取得するラッパクラス。
21  /// @see Input, InputUnit
22  ///
23  /// PushSwitchやI/Oボードスイッチ入力等、ON/OFF状態のみを持つ入力に対して用いる。
24  ///
25  /// @code
26  /// #include "amdaemon/Input.h"
27  ///
28  /// namespace inputs
29  /// {
30  /// // 定数宣言(実値は任意のソースファイルで定義する)
31  /// extern const amdaemon::InputId Up;
32  /// extern const amdaemon::InputId Down;
33  /// }
34  ///
35  /// void foo()
36  /// {
37  /// amdaemon::Input input;
38  ///
39  /// // InputUnit インスタンスから取得
40  /// const auto up = input.getPlayer(0).getSwitch(inputs::Up);
41  ///
42  /// // Up ボタンが押されているか?
43  /// if (up.isOn())
44  /// {
45  /// // 押されている時の処理
46  /// }
47  ///
48  /// // InputUnit インスタンスから直接構築
49  /// const amdaemon::SwitchInput down(input.getPlayer(0), inputs::Down);
50  ///
51  /// // Down ボタンが押されているか?
52  /// if (down.isOn())
53  /// {
54  /// // 押されている時の処理
55  /// }
56  /// }
57  /// @endcode
59  {
60  public:
61  /// @brief コンストラクタ。
62  /// @param[in] unit InputUnit インスタンス参照。
63  /// @param[in] id 入力識別ID。
64  ///
65  /// 引数 id に存在しない入力識別IDを指定した場合でも例外は発生しない。
66  /// ただしメンバ関数 #exists は false を返す。
67  SwitchInput(const InputUnit& unit, const InputId& id)
68  :
69  _unit(&unit),
70  _id(id)
71  {
72  }
73 
74  // 下記は暗黙の定義を用いる。
75  //SwitchInput(const SwitchInput&) = default;
76  //‾SwitchInput() = default;
77  //SwitchInput& operator=(const SwitchInput&) = default;
78 
79  /// @brief 入力が存在するか否かを取得する。
80  /// @retval true 存在する場合。
81  /// @retval false 存在しない場合。
82  inline bool exists() const;
83 
84  /// @brief スイッチ入力がON状態であるか否かを取得する。
85  /// @retval true ON状態である場合。
86  /// @retval false OFF状態であるか、入力が存在しない場合。
87  inline bool isOn() const;
88 
89  /// @brief スイッチ入力のON/OFF状態がちょうど切り替わったか否かを取得する。
90  /// @retval true ON/OFF状態がちょうど切り替わった場合。
91  /// @retval false ON/OFF状態が切り替わっていないか、入力が存在しない場合。
92  inline bool isFlipNow() const;
93 
94  /// @brief スイッチ入力がちょうどON状態に切り替わったか否かを取得する。
95  /// @retval true ちょうどON状態に切り替わった場合。
96  /// @retval false
97  /// 前フレーム時点でON状態であるか、現在OFF状態であるか、
98  /// もしくは入力が存在しない場合。
99  inline bool isOnNow() const;
100 
101  /// @brief スイッチ入力がちょうどOFF状態に切り替わったか否かを取得する。
102  /// @retval true ちょうどOFF状態に切り替わった場合。
103  /// @retval false
104  /// 前フレーム時点でOFF状態であるか、現在ON状態であるか、
105  /// もしくは入力が存在しない場合。
106  inline bool isOffNow() const;
107 
108  private:
109  const InputUnit* _unit; ///< InputUnit インスタンス参照。
110  InputId _id; ///< 入力識別ID。
111  };
112 
113 /// @}
114 } // namespace amdaemon
115 
116 // 互いに参照しているためこの位置に記述する必要がある
117 #include "amdaemon/InputUnit.h"
118 
119 namespace amdaemon
120 {
121  // 入力が存在するか否かを取得する。
122  inline bool SwitchInput::exists() const
123  {
124  return _unit->exists(_id);
125  }
126 
127  // スイッチ入力がON状態であるか否かを取得する。
128  inline bool SwitchInput::isOn() const
129  {
130  return (this->exists() && _unit->getValue(_id) != 0);
131  }
132 
133  // スイッチ入力のON/OFF状態がちょうど切り替わったか否かを取得する。
134  inline bool SwitchInput::isFlipNow() const
135  {
136  return (this->exists() && _unit->getDelta(_id) != 0);
137  }
138 
139  // スイッチ入力がちょうどON状態に切り替わったか否かを取得する。
140  inline bool SwitchInput::isOnNow() const
141  {
142  return (this->exists() && _unit->getDelta(_id) > 0);
143  }
144 
145  // スイッチ入力がちょうどOFF状態に切り替わったか否かを取得する。
146  inline bool SwitchInput::isOffNow() const
147  {
148  return (this->exists() && _unit->getDelta(_id) < 0);
149  }
150 } // namespace amdaemon
151 
152 #endif // AMDAEMON_SWITCHINPUT_H
SwitchInput(const InputUnit &unit, const InputId &id)
コンストラクタ。
Definition: SwitchInput.h:67
bool isOnNow() const
スイッチ入力がちょうどON状態に切り替わったか否かを取得する。
Definition: SwitchInput.h:140
抽象入力の識別ID型 InputId のヘッダ。
Daemonライブラリの環境定義を行うヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
bool exists() const
入力が存在するか否かを取得する。
Definition: SwitchInput.h:122
bool isOffNow() const
スイッチ入力がちょうどOFF状態に切り替わったか否かを取得する。
Definition: SwitchInput.h:146
InputUnit クラスからスイッチ入力を取得するラッパクラス。
Definition: SwitchInput.h:58
bool isOn() const
スイッチ入力がON状態であるか否かを取得する。
Definition: SwitchInput.h:128
bool isFlipNow() const
スイッチ入力のON/OFF状態がちょうど切り替わったか否かを取得する。
Definition: SwitchInput.h:134
カテゴリ単位のID付けされた入力情報を提供するクラス InputUnit のヘッダ。
カテゴリ単位のID付けされた入力情報を提供するクラス。
Definition: InputUnit.h:50