OSDN Git Service

Merge pull request #3754 from Hourier/Unify-Activation-ItemEntity-1
[hengbandforosx/hengbandosx.git] / src / spell-realm / spells-song.cpp
index dd82013..b7fcaa6 100644 (file)
@@ -1,6 +1,5 @@
-#include "spell-realm/spells-song.h"
+#include "spell-realm/spells-song.h"
 #include "core/disturbance.h"
-#include "core/player-redraw-types.h"
 #include "core/stuff-handler.h"
 #include "core/window-redrawer.h"
 #include "game-option/disturbance-options.h"
@@ -50,29 +49,36 @@ void check_music(PlayerType *player_ptr)
     if (s64b_cmp(player_ptr->csp, player_ptr->csp_frac, need_mana, need_mana_frac) < 0) {
         stop_singing(player_ptr);
         return;
-    } else {
-        s64b_sub(&(player_ptr->csp), &(player_ptr->csp_frac), need_mana, need_mana_frac);
-
-        player_ptr->redraw |= PR_MP;
-        if (interupting_song_effect != 0) {
-            set_singing_song_effect(player_ptr, interupting_song_effect);
-            set_interrupting_song_effect(player_ptr, MUSIC_NONE);
-            msg_print(_("歌を再開した。", "You resume singing."));
-            player_ptr->action = ACTION_SING;
-            auto &rfu = RedrawingFlagsUpdater::get_instance();
-            const auto flags_srf = {
-                StatusRedrawingFlag::BONUS,
-                StatusRedrawingFlag::HP,
-                StatusRedrawingFlag::MONSTER_STATUSES,
-            };
-            rfu.set_flags(flags_srf);
-            player_ptr->redraw |= (PR_MAP | PR_TIMED_EFFECT | PR_ACTION);
-            player_ptr->window_flags |= (PW_OVERHEAD | PW_DUNGEON);
-        }
     }
 
-    PlayerSkill(player_ptr).gain_continuous_spell_skill_exp(REALM_MUSIC, spell);
+    s64b_sub(&(player_ptr->csp), &(player_ptr->csp_frac), need_mana, need_mana_frac);
+    auto &rfu = RedrawingFlagsUpdater::get_instance();
+    rfu.set_flag(MainWindowRedrawingFlag::MP);
+    if (interupting_song_effect != 0) {
+        set_singing_song_effect(player_ptr, interupting_song_effect);
+        set_interrupting_song_effect(player_ptr, MUSIC_NONE);
+        msg_print(_("歌を再開した。", "You resume singing."));
+        player_ptr->action = ACTION_SING;
+        static constexpr auto flags_srf = {
+            StatusRecalculatingFlag::BONUS,
+            StatusRecalculatingFlag::HP,
+            StatusRecalculatingFlag::MONSTER_STATUSES,
+        };
+        rfu.set_flags(flags_srf);
+        static constexpr auto flags_mwrf = {
+            MainWindowRedrawingFlag::MAP,
+            MainWindowRedrawingFlag::TIMED_EFFECT,
+            MainWindowRedrawingFlag::ACTION,
+        };
+        rfu.set_flags(flags_mwrf);
+        static constexpr auto flags_swrf = {
+            SubWindowRedrawingFlag::OVERHEAD,
+            SubWindowRedrawingFlag::DUNGEON,
+        };
+        rfu.set_flags(flags_swrf);
+    }
 
+    PlayerSkill(player_ptr).gain_continuous_spell_skill_exp(REALM_MUSIC, spell);
     exe_spell(player_ptr, REALM_MUSIC, spell, SpellProcessType::CONTNUATION);
 }
 
@@ -110,8 +116,7 @@ bool set_tim_stealth(PlayerType *player_ptr, TIME_EFFECT v, bool do_dec)
 
     player_ptr->tim_stealth = v;
     auto &rfu = RedrawingFlagsUpdater::get_instance();
-    player_ptr->redraw |= (PR_TIMED_EFFECT);
-
+    rfu.set_flag(MainWindowRedrawingFlag::TIMED_EFFECT);
     if (!notice) {
         return false;
     }
@@ -120,7 +125,7 @@ bool set_tim_stealth(PlayerType *player_ptr, TIME_EFFECT v, bool do_dec)
         disturb(player_ptr, false, false);
     }
 
-    rfu.set_flag(StatusRedrawingFlag::BONUS);
+    rfu.set_flag(StatusRecalculatingFlag::BONUS);
     handle_stuff(player_ptr);
     return true;
 }
@@ -151,8 +156,8 @@ void stop_singing(PlayerType *player_ptr)
     set_singing_song_effect(player_ptr, MUSIC_NONE);
     set_singing_song_id(player_ptr, 0);
     auto &rfu = RedrawingFlagsUpdater::get_instance();
-    rfu.set_flag(StatusRedrawingFlag::BONUS);
-    set_bits(player_ptr->redraw, PR_TIMED_EFFECT);
+    rfu.set_flag(StatusRecalculatingFlag::BONUS);
+    rfu.set_flag(MainWindowRedrawingFlag::TIMED_EFFECT);
 }
 
 bool music_singing(PlayerType *player_ptr, int music_songs)