ソシャゲによくある、消費した体力(や行動力)が時間経過により回復するやつをどう実装するかのメモ。
データ構造
プレイヤーデータに以下を保持する。
1. 更新時体力値(最後に体力を更新した時の値)
2. 更新日時
「現在」の体力値算出方法
「更新日時」が入っていない場合、体力はMAXのはずなので「更新時体力値」をそのまま返す。
「更新日時」が入っている場合、「更新時体力値」に、「更新日時」から現在日時までに回復するべき値を加算して返す。
例えば、「更新時体力値」が4、「更新日時」が10分前で、5分ごとに体力が1回復する仕様の場合、4 + 2 = 6を返す。
(例がややこしくなるので省いているが、当然最大値切り捨て処理も必要)
注意点
大事なのは、算出時に「更新時体力値」を更新しないこと。
なぜかというと、表示箇所は多いため、プレイヤーデータが頻繁に更新されることになり、ロックの問題と負荷の問題が発生するから。
じゃあ「更新時体力値」は、どんな時に更新するかというと、アイテムを使って「全快させた時」や、クエストなどで「消費した時」など。
全快時は「更新日時」をクリアして、消費時は現在日時をセットし直すことを忘れないように。
また、全快時に体力上限値が増えた時、「更新日時」が入っていない状態のままだと、回復しないことになってしまうので、「更新日時」をセットしなければいけない。