OSDN Git Service

[Refactor] #1578 Simplified BadStatusSetter::cut() by PlayerRace::can_resist_cut()
authorHourier <66951241+Hourier@users.noreply.github.com>
Wed, 22 Sep 2021 12:27:58 +0000 (21:27 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Thu, 23 Sep 2021 07:26:40 +0000 (16:26 +0900)
src/player-base/player-race.cpp
src/player-base/player-race.h
src/status/bad-status-setter.cpp

index 590baa3..819b388 100644 (file)
@@ -20,6 +20,15 @@ bool PlayerRace::is_mimic_nonliving() const
     return any_bits(mimic_info[this->player_ptr->mimic_form].choice, nonliving_flag);
 }
 
+bool PlayerRace::can_resist_cut() const
+{
+    auto can_resist_cut = this->player_ptr->prace == player_race_type::GOLEM;
+    can_resist_cut |= this->player_ptr->prace == player_race_type::SKELETON;
+    can_resist_cut |= this->player_ptr->prace == player_race_type::SPECTRE;
+    can_resist_cut |= (this->player_ptr->prace == player_race_type::ZOMBIE) && (this->player_ptr->lev > 11);
+    return can_resist_cut;
+}
+
 bool PlayerRace::equals(player_race_type prace) const
 {
     return (this->player_ptr->mimic_form == MIMIC_NONE) && (this->player_ptr->prace == prace);
index 079755f..4de3207 100644 (file)
@@ -9,6 +9,7 @@ public:
     virtual ~PlayerRace() = default;
 
     bool is_mimic_nonliving() const;
+    bool can_resist_cut() const;
     bool equals(player_race_type prace) const;
 
 private:
index 6472419..972f78c 100644 (file)
@@ -500,9 +500,8 @@ bool BadStatusSetter::cut(const TIME_EFFECT tmp_v)
         return false;
     }
 
-    if ((this->player_ptr->prace == player_race_type::GOLEM || this->player_ptr->prace == player_race_type::SKELETON || this->player_ptr->prace == player_race_type::SPECTRE
-            || (this->player_ptr->prace == player_race_type::ZOMBIE && this->player_ptr->lev > 11))
-        && !this->player_ptr->mimic_form) {
+    PlayerRace player_race(this->player_ptr);
+    if (player_race.can_resist_cut() && !this->player_ptr->mimic_form) {
         v = 0;
     }
 
@@ -521,7 +520,7 @@ bool BadStatusSetter::cut(const TIME_EFFECT tmp_v)
         }
     } else if (new_aux < old_aux) {
         if (new_aux == PlayerCutRank::NONE) {
-            auto blood_stop_mes = this->player_ptr->prace == player_race_type::ANDROID
+            auto blood_stop_mes = player_race.equals(player_race_type::ANDROID)
                 ? _("怪我が直った", "leaking fluid")
                 : _("出血が止まった", "bleeding");
             msg_format(_("やっと%s。", "You are no longer %s."), blood_stop_mes);