OSDN Git Service

[Refactor] #3230 PlayerType::update に関わる処理を、RedrawingFlagsUpdaterに集約した
[hengbandforosx/hengbandosx.git] / src / spell-realm / spells-demon.cpp
1 #include "spell-realm/spells-demon.h"
2 #include "core/disturbance.h"
3 #include "core/player-redraw-types.h"
4 #include "core/player-update-types.h"
5 #include "core/stuff-handler.h"
6 #include "game-option/disturbance-options.h"
7 #include "system/player-type-definition.h"
8 #include "system/redrawing-flags-updater.h"
9 #include "view/display-messages.h"
10
11 /*!
12  * @brief 一時的火炎のオーラの継続時間をセットする / Set "tim_sh_fire", notice observable changes
13  * @param v 継続時間
14  * @param do_dec 現在の継続時間より長い値のみ上書きする
15  * @return ステータスに影響を及ぼす変化があった場合TRUEを返す。
16  */
17 bool set_tim_sh_fire(PlayerType *player_ptr, TIME_EFFECT v, bool do_dec)
18 {
19     bool notice = false;
20     v = (v > 10000) ? 10000 : (v < 0) ? 0
21                                       : v;
22
23     if (player_ptr->is_dead) {
24         return false;
25     }
26
27     if (v) {
28         if (player_ptr->tim_sh_fire && !do_dec) {
29             if (player_ptr->tim_sh_fire > v) {
30                 return false;
31             }
32         } else if (!player_ptr->tim_sh_fire) {
33             msg_print(_("体が炎のオーラで覆われた。", "You are enveloped by a fiery aura!"));
34             notice = true;
35         }
36     } else {
37         if (player_ptr->tim_sh_fire) {
38             msg_print(_("炎のオーラが消えた。", "The fiery aura disappeared."));
39             notice = true;
40         }
41     }
42
43     player_ptr->tim_sh_fire = v;
44     auto &rfu = RedrawingFlagsUpdater::get_instance();
45     player_ptr->redraw |= (PR_TIMED_EFFECT);
46
47     if (!notice) {
48         return false;
49     }
50
51     if (disturb_state) {
52         disturb(player_ptr, false, false);
53     }
54
55     rfu.set_flag(StatusRedrawingFlag::BONUS);
56     handle_stuff(player_ptr);
57     return true;
58 }