OSDN Git Service

[Refactor] #3286 PlayerType::redraw に関わる処理を、RedrawingFlagsUpdaterに集約した
[hengbandforosx/hengbandosx.git] / src / mind / mind-warrior-mage.cpp
1 #include "mind/mind-warrior-mage.h"
2 #include "core/player-redraw-types.h"
3 #include "hpmp/hp-mp-processor.h"
4 #include "player/player-damage.h"
5 #include "system/player-type-definition.h"
6 #include "system/redrawing-flags-updater.h"
7 #include "view/display-messages.h"
8
9 bool comvert_hp_to_mp(PlayerType *player_ptr)
10 {
11     constexpr auto mes = _("HPからMPへの無謀な変換", "thoughtless conversion from HP to SP");
12     auto gain_sp = take_hit(player_ptr, DAMAGE_USELIFE, player_ptr->lev, mes) / 5;
13     auto &rfu = RedrawingFlagsUpdater::get_instance();
14     const auto flags = {
15         MainWindowRedrawingFlag::HP,
16         MainWindowRedrawingFlag::MP,
17     };
18     if (!gain_sp) {
19         msg_print(_("変換に失敗した。", "You failed to convert."));
20         rfu.set_flags(flags);
21         return true;
22     }
23
24     player_ptr->csp += gain_sp;
25     if (player_ptr->csp > player_ptr->msp) {
26         player_ptr->csp = player_ptr->msp;
27         player_ptr->csp_frac = 0;
28     }
29
30     rfu.set_flags(flags);
31     return true;
32 }
33
34 bool comvert_mp_to_hp(PlayerType *player_ptr)
35 {
36     if (player_ptr->csp >= player_ptr->lev / 5) {
37         player_ptr->csp -= player_ptr->lev / 5;
38         hp_player(player_ptr, player_ptr->lev);
39     } else {
40         msg_print(_("変換に失敗した。", "You failed to convert."));
41     }
42
43     const auto flags = {
44         MainWindowRedrawingFlag::HP,
45         MainWindowRedrawingFlag::MP,
46     };
47     RedrawingFlagsUpdater::get_instance().set_flags(flags);
48     return true;
49 }