AM Daemon ライブラリリファレンス
Credit.h
[詳解]
1 /// @file
2 /// @brief ビデオゲームのクレジット処理を提供するMonostateクラス Credit のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_CREDIT_H
7 #define AMDAEMON_CREDIT_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/CreditUnit.h"
13 #include "amdaemon/CreditConfig.h"
14 #include "amdaemon/CreditSound.h"
15 
16 #include <utility>
17 #include <functional>
18 #include <vector>
19 #include <cstdint>
20 #include <cstddef>
21 
22 namespace amdaemon
23 {
24 /// @addtogroup g_credit
25 /// @{
26 
27  /// @brief ビデオゲームのクレジット処理を提供するMonostateクラス。
28  ///
29  /// Core クラスのメンバ関数 Core#execute 呼び出しによって内容が更新される。
30  /// 一部の関数は処理完了まで呼び出し元スレッドをブロックする。
31  ///
32  /// @par ライブラリ利用アプリで実装すべきこと(ビデオタイトルのみ)
33  /// - メンバ関数 @ref setCoinInHook(std::function<bool (CreditSound)>) "setCoinInHook"
34  /// または #setCoinInHookWithPlayer でフック関数を設定し、
35  /// フック関数呼び出し時にコイン/クレジット投入音再生処理を行うこと。
36  /// - ゲームテストモードにバックアップクリア画面を用意し、
37  /// オペレータがクリアを指示した場合にメンバ関数 #clearBackup を呼び出すこと。
38  /// - 必要に応じて Sequence クラスのメンバ関数 Sequence#clearBackup も呼び出すこと。
39  ///
40  /// @par INSERT COIN(S) 表示について
41  /// CreditUnit クラスの説明を参照すること。
42  ///
43  /// @ingroup g_common
44  class Credit
45  {
46  public:
47  // 下記は暗黙の定義を用いる。
48  //Credit() = default;
49  //‾Credit() = default;
50  //Credit(const Credit&) = default;
51  //Credit& operator=(const Credit&) = default;
52 
53  /// @brief クレジット機能を利用可能であるか否かを取得する。
54  /// @retval true 利用可能である場合。
55  /// @retval false 機能が無効である場合。
56  bool isAvailable() const;
57 
58  /// @brief コイン追加を無視する処理が有効であるか否かを取得する。
59  /// @retval true 処理が有効である場合。
60  /// @retval false 処理が無効であるか、クレジット機能が無効である場合。
61  /// @see #setCoinInIgnored
62  ///
63  /// メンバ関数 #setCoinInIgnored で設定した値を返す。
64  /// ただし、 Sequence クラスによるゲームテストモードの開始時および終了時には
65  /// 初期値 false にリセットされる。
66  ///
67  /// 処理の詳細はメンバ関数 #setCoinInIgnored の説明を参照すること。
68  bool isCoinInIgnored() const;
69 
70  /// @brief コイン追加を無視する処理を有効にするか否かを設定する。
71  /// @param[in] ignored 有効にするならば true 。無効にするならば false 。
72  /// @retval true 成功した場合。
73  /// @retval false 失敗したか、クレジット機能が無効である場合。
74  /// @see #isCoinInIgnored
75  ///
76  /// この関数によってコイン追加を無視する処理を有効にした場合、
77  /// コイン投入、サービスクレジット、電子マネーのコイン購入操作について、
78  /// ゲームテストモード中と同等の動作を行うようになる。
79  ///
80  /// 即ち、コイン投入およびサービスボタン押下によるコイン追加は無視され、
81  /// 電子マネーによるコイン購入操作は失敗扱いとなる。
82  ///
83  /// なお、ゲームテストモード中および進行停止エラー発生中は、
84  /// この関数での設定状態とは関係なくコイン追加が無視される。
85  ///
86  /// この関数による処理有効設定は、 Sequence クラスによるゲームテストモードの
87  /// 開始時および終了時にリセットされて処理無効状態に戻る。
88  /// この関数自体はゲームテストモード中に呼び出すことも可能だが、
89  /// ゲームテストモードの終了時に設定がリセットされるため、実質無意味となる。
90  ///
91  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
92  bool setCoinInIgnored(bool ignored);
93 
94  /// @brief 現在のクレジット値とブックキーピングのクリア処理を要求する。
95  /// @retval true 成功した場合。
96  /// @retval false 失敗したか、クレジット機能が無効である場合。
97  ///
98  /// クレジット関連のブックキーピングのみがクリアされる。
99  /// プレイ回数やプレイ時間等のブックキーピングは
100  /// Sequence クラスのメンバ関数 Sequence#clearBackup でクリアできる。
101  ///
102  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
103  bool clearBackup();
104 
105  /// @brief 現在のクレジット関連ブックキーピングを取得する。
106  /// @return クレジット関連ブックキーピング。
107  ///
108  /// プレイ回数やプレイ時間等のブックキーピングは
109  /// Sequence クラスのメンバ関数 Sequence#getBookkeeping で取得できる。
110  const CreditBookkeeping& getBookkeeping() const;
111 
112  /// @brief 現在のクレジット設定を取得する。
113  /// @return 現在のクレジット設定。
114  const CreditConfig& getConfig() const;
115 
116  /// @brief コイン投入時に呼び出されるフック関数を設定する。
117  /// @param[in] hook フック関数。
118  /// @see #setCoinInHookWithPlayer
119  ///
120  /// この関数でフック関数(コールバック)を設定すると、
121  /// 以降のコイン投入時にフック関数が呼び出される。
122  ///
123  /// より正確には、コイン投入音を鳴らすべきタイミングで呼び出される。
124  /// ゲームテストモード中など、コイン投入音を鳴らすべきでないタイミングでは、
125  /// たとえコイン投入を行ったとしても呼び出されない。
126  ///
127  /// コイン投入時には投入音を鳴らすことが作成基準で定められているため、
128  /// 必ずこの関数、またはメンバ関数 #setCoinInHookWithPlayer でフック関数を登録し、
129  /// 投入音再生処理を実施すること。
130  ///
131  /// フック関数の第1引数には、投入音種別を表す @ref CreditSound 列挙値が渡される。
132  /// 渡される値が CreditSound::None になることはない。
133  ///
134  /// フック関数は、処理が完了したならば true 、未完了ならば false を返すこと。
135  /// false を返した場合は次のフレームで再度フック関数呼び出しが発生する。
136  /// false を返す状況としては、前回の投入音が再生完了していない場合等が考えられる。
137  ///
138  /// フック関数には、第1引数に @ref CreditSound 列挙値を受け取り、
139  /// bool 値を返す関数もしくは関数オブジェクトを指定できる。
140  /// 任意のクラスのメンバ関数を指定したい場合はラムダ式を用いるとよい。
141  ///
142  /// コイン投入によってコイン数が増加したプレイヤーを判別したい場合、
143  /// この関数の代わりにメンバ関数 #setCoinInHookWithPlayer を用いることができる。
144  /// この関数とメンバ関数
145  /// #setCoinInHookWithPlayer は内部で共通のフック関数設定先を用いるため、
146  /// 両方にフック関数を設定しようとした場合は最後に設定したもののみ有効となる。
147  ///
148  /// いずれのフック関数も未設定の場合、設定されるまでフック処理が保留される。
149  /// そのため、Daemonプロセス起動からフック関数設定までの間にコイン投入を N 回行うと、
150  /// フック関数設定直後に N 回連続でフック関数が呼び出される。
151  /// ただし、 1 フレームに呼び出される回数は 1 回までとなる。
152  ///
153  /// @code
154  /// // MyClass クラスのメンバ関数 doHook を指定する例
155  /// void setHook(MyClass& c)
156  /// {
157  /// amdaemon::Credit credit;
158  /// credit.setCoinInHook([&c](amdaemon::CreditSound s) { return c.doHook(s); });
159  /// }
160  ///
161  /// // MyClass クラスのメンバ関数内から指定する例
162  /// void MyClass::setHook()
163  /// {
164  /// amdaemon::Credit credit;
165  /// credit.setCoinInHook([this](amdaemon::CreditSound s) { return this->doHook(s); });
166  /// }
167  /// @endcode
168  void setCoinInHook(std::function<bool (CreditSound)> hook);
169 
170 #if AMDAEMON_MSVC_COMPATIBLE(1900) // VC++2015以降
171 
172  /// @brief コイン投入時に呼び出されるフック関数を設定する。(VC++2015以降限定)
173  /// @param[in] hook フック関数。
174  /// @see #setCoinInHookWithPlayer
175  ///
176  /// メンバ関数 setCoinInHook(std::function<bool (CreditSound)> hook) のオーバロード。
177  ///
178  /// 引数のフック関数をそのままメンバ関数 #setCoinInHookWithPlayer に渡すだけである。
179  /// よって詳細はメンバ関数 #setCoinInHookWithPlayer の説明を参照すること。
180  ///
181  /// VC++2013以前の環境では、
182  /// std::function クラステンプレートの関数型によるオーバロードが正しく機能しない。
183  /// そのためこのメンバ関数はVC++2015以降の環境でのみ定義される。
185  std::function<bool (CreditSound, const std::vector<std::size_t>&)> hook)
186  {
187  this->setCoinInHookWithPlayer(std::move(hook));
188  }
189 
190 #endif // VC++2015以降
191 
192  /// @brief コイン投入時に呼び出されるフック関数を設定する。
193  /// @param[in] hook フック関数。
194  /// @see setCoinInHook(std::function<bool (CreditSound)>)
195  ///
196  /// 基本的にはメンバ関数 setCoinInHook(std::function<bool (CreditSound)>)
197  /// に準ずるため、そちらの説明も参照すること。
198  ///
199  /// この関数は、設定するフック関数に第2引数が追加されている点が異なる。
200  ///
201  /// フック関数の第2引数には、コイン投入によってコイン数が増加したプレイヤーの
202  /// プレイヤーインデックスが配列で渡される。
203  /// 配列である理由は、クレジット設定の COIN CHUTE TYPE 設定値が COMMON の場合、
204  /// 1回のコイン投入に対して複数のプレイヤーが該当する場合があるためである。
205  ///
206  /// 第2引数の参照先配列自体は常に有効だが、
207  /// フック関数が true を返した直後に配列要素はクリアされ、要素数 0 になる。
208  /// フック関数呼び出し時点での配列内容をそれ以降でも利用したい場合、
209  /// 参照の保持ではなく値のコピーを行うこと。
210  ///
211  /// この関数とメンバ関数
212  /// @ref setCoinInHook(std::function<bool (CreditSound)>) "setCoinInHook"
213  /// は内部で共通のフック関数設定先を用いるため、
214  /// 両方にフック関数を設定しようとした場合は最後に設定したもののみ有効となる。
216  std::function<bool (CreditSound, const std::vector<std::size_t>&)> hook);
217 
218  /// @brief コイン投入時に呼び出されるフック関数を解除し、未設定状態に戻す。
219  /// @see
220  /// @ref setCoinInHook(std::function<bool (CreditSound)>) "setCoinInHook",
221  /// #setCoinInHookWithPlayer
222  ///
223  /// フック関数未設定である場合、設定されるまでフック関数呼び出しが保留される。
224  void resetCoinInHook();
225 
226  /// @brief 有効プレイヤー数を取得する。
227  /// @return 有効プレイヤー数。クレジット機能が無効ならば 0 。
228  /// @see Core#getPlayerCount
229  ///
230  /// 機能が有効ならば、 Core#getPlayerCount と同じ値を返す。
231  std::size_t getPlayerCount() const;
232 
233  /// @brief プレイヤーのクレジット情報インスタンスを取得する。
234  /// @param[in] playerIndex プレイヤーインデックス。
235  /// @return プレイヤーのクレジット情報インスタンス。
236  /// @see Player
237  ///
238  /// @exception Exception
239  /// - クレジット機能が無効である場合。
240  /// - 引数 playerIndex に有効プレイヤー数以上の値を指定した場合。
241  /// 有効プレイヤー数はメンバ関数 #getPlayerCount で取得できる。
242  CreditUnit& getPlayer(std::size_t playerIndex);
243 
244  /// @copydoc getPlayer
245  const CreditUnit& getPlayer(std::size_t playerIndex) const;
246 
247  /// @brief 特殊デバイス操作インスタンスを取得する。
248  /// @return 特殊デバイス操作インスタンス。
250  };
251 
252 /// @}
253 } // namespace amdaemon
254 
255 #endif // AMDAEMON_CREDIT_H
bool setCoinInIgnored(bool ignored)
コイン追加を無視する処理を有効にするか否かを設定する。
bool clearBackup()
現在のクレジット値とブックキーピングのクリア処理を要求する。
ビデオゲーム用のクレジット設定構造体。
Definition: CreditConfig.h:27
const CreditBookkeeping & getBookkeeping() const
現在のクレジット関連ブックキーピングを取得する。
Daemonライブラリの環境定義を行うヘッダ。
ビデオゲーム用のクレジットブックキーピング構造体 CreditBookkeeping のヘッダ。
ビデオゲーム用のクレジット投入音列挙 CreditSound のヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
void setCoinInHookWithPlayer(std::function< bool(CreditSound, const std::vector< std::size_t > &)> hook)
コイン投入時に呼び出されるフック関数を設定する。
ビデオゲーム用のクレジットブックキーピング構造体。
Definition: CreditBookkeeping.h:26
ビデオゲームのプレイヤー別クレジット情報を保持するクラス CreditUnit のヘッダ。
ビデオゲームのクレジット処理を提供するMonostateクラス。
Definition: Credit.h:44
bool isCoinInIgnored() const
コイン追加を無視する処理が有効であるか否かを取得する。
void setCoinInHook(std::function< bool(CreditSound, const std::vector< std::size_t > &)> hook)
コイン投入時に呼び出されるフック関数を設定する。(VC++2015以降限定)
Definition: Credit.h:184
void resetCoinInHook()
コイン投入時に呼び出されるフック関数を解除し、未設定状態に戻す。
std::size_t getPlayerCount() const
有効プレイヤー数を取得する。
void setCoinInHook(std::function< bool(CreditSound)> hook)
コイン投入時に呼び出されるフック関数を設定する。
ビデオゲームのプレイヤー別クレジット情報を保持するクラス。
Definition: CreditUnit.h:37
ビデオゲームのクレジット処理に統合された特殊デバイスを操作するクラス CreditSpecialDevice のヘッダ。 ...
CreditSpecialDevice & getSpecialDevice()
特殊デバイス操作インスタンスを取得する。
ビデオゲーム用のクレジット設定構造体 CreditConfig のヘッダ。
CreditSound
ビデオゲーム用のクレジット投入音列挙。
Definition: CreditSound.h:17
bool isAvailable() const
クレジット機能を利用可能であるか否かを取得する。
CreditUnit & getPlayer(std::size_t playerIndex)
プレイヤーのクレジット情報インスタンスを取得する。
const CreditConfig & getConfig() const
現在のクレジット設定を取得する。
ビデオゲームのクレジット処理に統合された特殊デバイスを操作するクラス。
Definition: CreditSpecialDevice.h:39