AM Daemon ライブラリリファレンス
CreditUnit.h
[詳解]
1 /// @file
2 /// @brief ビデオゲームのプレイヤー別クレジット情報を保持するクラス CreditUnit のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_CREDITUNIT_H
7 #define AMDAEMON_CREDITUNIT_H
8 
9 #include "amdaemon/env.h"
10 
11 #include <cstdint>
12 #include <cstddef>
13 
14 namespace amdaemon
15 {
16 /// @addtogroup g_credit
17 /// @{
18 
19  // 内部クラスの前方宣言
20  class InnerIndexHolder;
21 
22  /// @brief ビデオゲームのプレイヤー別クレジット情報を保持するクラス。
23  /// @see Credit, Player
24  ///
25  /// このクラスのインスタンスをアプリ側で直接生成することはできない。
26  /// Credit クラスのメンバ関数 Credit#getPlayer から取得すること。
27  ///
28  /// 一部の関数は処理完了まで呼び出し元スレッドをブロックする。
29  ///
30  /// @par INSERT COIN(S) 表示について
31  /// 次の順序で INSERT COIN(S) 表示内容を決定する。
32  /// -# メンバ関数 #isGameCostEnough が true を返すならばプレイ可能表示を行う。
33  /// -# メンバ関数 #isZero が true を返すならば "INSERT COIN(S)" 表示を行う。
34  /// -# どちらも満たさなければ "INSERT MORE COIN(S)" 表示を行う。
35  ///
36  /// @ingroup g_player
37  class CreditUnit
38  {
39  public:
40  /// @brief コンストラクタ。
41  /// @note アプリ側からは利用できない。
42  explicit CreditUnit(InnerIndexHolder);
43 
44  // 下記は暗黙の定義を用いる。
45  //‾CreditUnit();
46 
47  /// @brief 現在のクレジット値を取得する。
48  /// @return 現在のクレジット値。
49  std::uint32_t getCredit() const;
50 
51  /// @brief 現在のクレジット端数値を取得する。
52  /// @return 現在のクレジット端数値。
53  ///
54  /// COIN TO CREDIT 設定値以上にはならない。
55  /// COIN TO CREDIT 設定値が 1 ならば常に 0 を返す。
56  std::uint32_t getRemain() const;
57 
58  /// @brief 現在のクレジット値およびクレジット端数値が 0 であるか否かを取得する。
59  /// @retval true クレジット値もクレジット端数値も 0 である場合。
60  /// @retval false クレジット値もしくはクレジット端数値が 1 以上である場合。
61  bool isZero() const;
62 
63  /// @brief 追加可能なコイン数を取得する。
64  /// @return 追加可能なコイン数。 FREE PLAY 設定が有効である場合は 0 。
65  ///
66  /// 現在の状態から追加可能なコイン数を返す。
67  /// ただし FREE PLAY 設定が有効である場合は 0 を返す。
68  ///
69  /// 主に、 EMoney クラスによる電子マネーでのコイン購入支払操作において、
70  /// 購入予定のコイン数が追加可能であるか事前に調べるために用いる。
71  ///
72  /// BONUS ADDER 設定等があるため、追加可能なコイン数は単純計算で算出できない。
73  /// 独自に計算せず、この関数の戻り値を利用すること。
74  std::uint32_t getAddableCoin() const;
75 
76  /// @brief COIN TO CREDIT 設定値を取得する。
77  /// @return COIN TO CREDIT 設定値。
78  ///
79  /// COIN数いくつで1クレジットになるかを表す。
80  /// FREE PLAY 設定が有効であっても 0 にはならない。
81  ///
82  /// std::max(Credit().getConfig().coinToCredit, 1U) を返す。
83  std::uint32_t getCoinToCredit() const;
84 
85  /// @brief FREE PLAY 設定が有効であるか否かを取得する。
86  /// @retval true FREE PLAY 設定が有効である場合。
87  /// @retval false FREE PLAY 設定が無効である場合。
88  ///
89  /// Credit().getConfig().freePlay を返す。
90  bool isFreePlay() const;
91 
92  /// @brief 現在のクレジット値情報を文字列化する。
93  /// @return クレジット値情報文字列。
94  /// @attention
95  /// 内部でプレイヤーごとに共通の文字列バッファを使い回しているため、
96  /// この関数を再度呼び出すと戻り値のポインタが指す文字列値が変更される。
97  /// 以前の値を保持しておきたい場合は std::wstring 等にコピーする必要がある。
98  ///
99  /// 次の手順に従って文字列を生成する。
100  /// FREE PLAY 設定は考慮しない。
101  ///
102  /// -# COIN TO CREDIT 設定値が 1 ならば、クレジット値を文字列化して返す。
103  /// -# COIN TO CREDIT 設定値が 2 以上かつクレジット値が 0 ならば、
104  /// クレジット端数値および COIN TO CREDIT 設定値を文字列化したものを
105  /// "/" で連結した文字列を返す。
106  /// -# COIN TO CREDIT 設定値が 2 以上かつクレジット値が 1 以上ならば、
107  /// 上記手順 1 と 2 の文字列を " " で連結した文字列を返す。
108  /// ただしクレジット端数値が 0 の場合は上記手順 1 の文字列のみを返す。
109  const wchar_t* toString() const;
110 
111  /// @brief ゲームコスト設定値を取得する。
112  /// @param[in] gameCostIndex ゲームコスト設定インデックス。
113  /// @return ゲームコスト設定値。
114  ///
115  /// @exception Exception
116  /// 引数 gameCostIndex に CreditConfig::MaxGameCostCount 以上の値を指定した場合。
117  ///
118  /// Credit().getConfig().gameCosts[gameCostIndex] を返す。
119  std::uint32_t getGameCost(std::size_t gameCostIndex) const;
120 
121  /// @brief 現在のクレジット値がゲームコストを満たすか否かを取得する。
122  /// @param[in] gameCostIndex ゲームコスト設定インデックス。
123  /// @param[in] count ゲームコスト減算回数。既定値は 1 。
124  /// @retval true ゲームコストを満たす場合。
125  /// @retval false ゲームコストを満たさない場合。
126  ///
127  /// @exception Exception
128  /// - 引数 gameCostIndex に CreditConfig::MaxGameCostCount 以上の値を指定した場合。
129  /// - 引数 count に 0 以下もしくは 99 より大きい値を指定した場合。
130  ///
131  /// 下記の条件判定式の結果を返す。
132  ///
133  /// @code
134  /// getCredit() >= (getGameCost(gameCostIndex) * count)
135  /// @endcode
136  ///
137  /// ただし、 FREE PLAY 設定が有効である場合は常に true を返す。
138  bool isGameCostEnough(std::size_t gameCostIndex, std::size_t count = 1) const;
139 
140  /// @brief 現在のクレジット値からゲームコスト分を減算するように要求する。
141  /// @param[in] gameCostIndex ゲームコスト設定インデックス。
142  /// @param[in] count ゲームコスト減算回数。既定値は 1 。
143  /// @retval true 成功した場合。
144  /// @retval false クレジット不足等で失敗した場合。
145  /// @see Sequence#beginPlay, Sequence#continuePlay
146  ///
147  /// @exception Exception
148  /// - 引数 gameCostIndex に CreditConfig::MaxGameCostCount 以上の値を指定した場合。
149  /// - 引数 count に 0 以下もしくは 99 より大きい値を指定した場合。
150  ///
151  /// プレイ開始、コンティニューと連動してゲームコスト(クレジット)支払いを行いたい場合は
152  /// Sequence クラスのメンバ関数
153  /// Sequence#beginPlay や Sequence#continuePlay を用いることを推奨する。
154  /// それ以外のタイミングで支払いを行いたい場合にこの関数を用いる。
155  ///
156  /// 事前にメンバ関数 #isGameCostEnough でクレジットが足りていることを確認済みでも、
157  /// Daemonプロセス側でクレジット減算に失敗する可能性はある。
158  /// よって必ずこの関数の戻り値を確認すること。
159  ///
160  /// FREE PLAY 設定が有効ならば、要求は発行されるが、クレジット減算は行われない。
161  /// その場合、要求処理自体は成功したものとして扱われる。
162  ///
163  /// Daemonプロセスが処理完了するまで呼び出し元スレッドをブロックする。
164  ///
165  /// @par 引数 count について
166  /// ゲーム内アイテム購入等によってゲームコストのパターンが多岐に渡り、
167  /// 標準のゲームコスト設定では賄いきれない場合、この引数値を設定することで
168  /// @code
169  /// (ゲームコスト設定値 * count)
170  /// @endcode
171  /// のクレジット減算を行うことができる。
172  /// @par
173  /// 標準のゲームコスト設定で賄える場合、既定値の 1 を用いること。
174  /// @par
175  /// この関数を複数回呼び出すことでも同等の処理を行えるように思えるかもしれないが、
176  /// 関数を呼び出す度にDaemonプロセス側でクレジット数のバックアップが行われるため、
177  /// 途中電断等によって中途半端なクレジット減算が行われてしまう可能性がある。
178  /// 一度のプレイヤー操作に対してこの関数を複数回呼び出すような処理は避けること。
179  bool payGameCost(std::size_t gameCostIndex, std::size_t count = 1);
180 
181  private:
182  std::size_t _playerIndex; ///< プレイヤーインデックス。
183 
184  private:
185  // コピー禁止
186  CreditUnit(const CreditUnit&); // 宣言のみ
187  CreditUnit& operator=(const CreditUnit&); // 宣言のみ
188  };
189 
190 /// @}
191 } // namespace amdaemon
192 
193 #endif // AMDAEMON_CREDITUNIT_H
std::uint32_t getGameCost(std::size_t gameCostIndex) const
ゲームコスト設定値を取得する。
CreditUnit(InnerIndexHolder)
コンストラクタ。
bool isZero() const
現在のクレジット値およびクレジット端数値が 0 であるか否かを取得する。
std::uint32_t getCoinToCredit() const
COIN TO CREDIT 設定値を取得する。
bool payGameCost(std::size_t gameCostIndex, std::size_t count=1)
現在のクレジット値からゲームコスト分を減算するように要求する。
Daemonライブラリの環境定義を行うヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
std::uint32_t getCredit() const
現在のクレジット値を取得する。
ビデオゲームのプレイヤー別クレジット情報を保持するクラス。
Definition: CreditUnit.h:37
std::uint32_t getAddableCoin() const
追加可能なコイン数を取得する。
bool isGameCostEnough(std::size_t gameCostIndex, std::size_t count=1) const
現在のクレジット値がゲームコストを満たすか否かを取得する。
const wchar_t * toString() const
現在のクレジット値情報を文字列化する。
std::uint32_t getRemain() const
現在のクレジット端数値を取得する。
bool isFreePlay() const
FREE PLAY 設定が有効であるか否かを取得する。