OSDN Git Service

[Refactor] #3325 extract_note_dies() をMonsterEntity/MonsterRaceInfo::get_died_message...
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 20 May 2023 01:18:41 +0000 (10:18 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sat, 20 May 2023 13:46:03 +0000 (22:46 +0900)
src/combat/shoot.cpp
src/effect/effect-monster-util.cpp
src/monster-floor/monster-death.cpp
src/monster-floor/monster-death.h
src/mspell/mspell-special.cpp
src/object-use/throw-execution.cpp
src/system/monster-entity.cpp
src/system/monster-entity.h
src/system/monster-race-info.cpp
src/system/monster-race-info.h

index 5ecf517..3644a53 100644 (file)
@@ -855,7 +855,7 @@ void exe_fire(PlayerType *player_ptr, INVENTORY_IDX item, ItemEntity *j_ptr, SPE
 
                     /* Hit the monster, check for death */
                     MonsterDamageProcessor mdp(player_ptr, c_mon_ptr->m_idx, tdam, &fear, attribute_flags);
-                    if (mdp.mon_take_hit(extract_note_dies(m_ptr->get_real_r_idx()))) {
+                    if (mdp.mon_take_hit(m_ptr->get_died_message().data())) {
                         /* Dead monster */
                     }
 
index eda00c2..fdac266 100644 (file)
@@ -79,7 +79,8 @@ effect_monster_type *initialize_effect_monster(PlayerType *player_ptr, effect_mo
     em_ptr->heal_leper = false;
     em_ptr->photo = 0;
     em_ptr->note = nullptr;
-    em_ptr->note_dies = extract_note_dies(em_ptr->m_ptr->get_real_r_idx());
+    const auto died_mes = em_ptr->m_ptr->get_died_message();
+    em_ptr->note_dies = died_mes.data();
     em_ptr->caster_lev = (em_ptr->who > 0) ? monraces_info[em_ptr->m_caster_ptr->r_idx].level : (player_ptr->lev * 2);
     return em_ptr;
 }
index 2be71f3..6dc7932 100644 (file)
@@ -420,30 +420,3 @@ void monster_death(PlayerType *player_ptr, MONSTER_IDX m_idx, bool drop_item, At
 
     on_defeat_last_boss(player_ptr);
 }
-
-/*!
- * @brief モンスターを撃破した際の述語メッセージを返す /
- * Return monster death string
- * @param r_ptr 撃破されたモンスターの種族情報を持つ構造体の参照ポインタ
- * @return 撃破されたモンスターの述語
- */
-concptr extract_note_dies(MonsterRaceId r_idx)
-{
-    const auto &r_ref = monraces_info[r_idx];
-    const auto explode = std::any_of(std::begin(r_ref.blow), std::end(r_ref.blow),
-        [](const auto &blow) { return blow.method == RaceBlowMethodType::EXPLODE; });
-
-    if (r_ref.has_living_flag()) {
-        if (explode) {
-            return _("は爆発して死んだ。", " explodes and dies.");
-        }
-
-        return _("は死んだ。", " dies.");
-    }
-
-    if (explode) {
-        return _("は爆発して粉々になった。", " explodes into tiny shreds.");
-    }
-
-    return _("を倒した。", " is destroyed.");
-}
index c6a0a9d..384f0d0 100644 (file)
@@ -5,9 +5,7 @@
 #include "system/angband.h"
 
 enum class FixedArtifactId : short;
-enum class MonsterRaceId : int16_t;
 class PlayerType;
 void monster_death(PlayerType *player_ptr, MONSTER_IDX m_idx, bool drop_item, AttributeFlags attribute_flags);
 void monster_death(PlayerType *player_ptr, MONSTER_IDX m_idx, bool drop_item, AttributeType type);
 bool drop_single_artifact(PlayerType *player_ptr, monster_death_type *md_ptr, FixedArtifactId a_idx);
-concptr extract_note_dies(MonsterRaceId r_idx);
index 10307e9..c5d7456 100644 (file)
@@ -223,11 +223,11 @@ static MonsterSpellResult spell_RF6_SPECIAL_B(PlayerType *player_ptr, POSITION y
 
     if (monster_to_player && player_ptr->riding) {
         const auto &m_ref = floor_ptr->m_list[player_ptr->riding];
-        mon_take_hit_mon(player_ptr, player_ptr->riding, dam, &dead, &fear, extract_note_dies(m_ref.get_real_r_idx()), m_idx);
+        mon_take_hit_mon(player_ptr, player_ptr->riding, dam, &dead, &fear, m_ref.get_died_message().data(), m_idx);
     }
 
     if (monster_to_monster) {
-        mon_take_hit_mon(player_ptr, t_idx, dam, &dead, &fear, extract_note_dies(t_ptr->get_real_r_idx()), m_idx);
+        mon_take_hit_mon(player_ptr, t_idx, dam, &dead, &fear, t_ptr->get_died_message().data(), m_idx);
     }
 
     return MonsterSpellResult::make_valid();
index e30928c..ff718c2 100644 (file)
@@ -453,7 +453,7 @@ void ObjectThrowEntity::attack_racial_power()
     }
 
     MonsterDamageProcessor mdp(this->player_ptr, this->g_ptr->m_idx, this->tdam, &fear, attribute_flags);
-    if (mdp.mon_take_hit(extract_note_dies(this->m_ptr->get_real_r_idx()))) {
+    if (mdp.mon_take_hit(this->m_ptr->get_died_message().data())) {
         return;
     }
 
index 7fc1ba3..89f7a93 100644 (file)
@@ -198,3 +198,9 @@ bool MonsterEntity::has_living_flag(bool is_apperance) const
     const auto &monrace = monraces_info[is_apperance ? this->ap_r_idx : this->r_idx];
     return monrace.has_living_flag();
 }
+
+std::string MonsterEntity::get_died_message() const
+{
+    const auto &monrace = monraces_info[this->r_idx];
+    return monrace.get_died_message();
+}
index 496117d..56b89f3 100644 (file)
@@ -5,6 +5,7 @@
 #include "monster/smart-learn-types.h"
 #include "object/object-index-list.h"
 #include "util/flag-group.h"
+#include <string>
 
 /*!
  * @brief Monster information, for a specific monster.
@@ -81,4 +82,5 @@ public:
     bool is_invulnerable() const;
     byte get_temporary_speed() const;
     bool has_living_flag(bool is_apperance = false) const;
+    std::string get_died_message() const;
 };
index ffdfc12..3be1468 100644 (file)
@@ -28,3 +28,18 @@ bool MonsterRaceInfo::has_living_flag() const
 {
     return this->kind_flags.has_none_of({ MonsterKindType::DEMON, MonsterKindType::UNDEAD, MonsterKindType::NONLIVING });
 }
+
+/*!
+ * @brief モンスターを撃破した際の述語メッセージを返す
+ * @return 撃破されたモンスターの述語
+ */
+std::string MonsterRaceInfo::get_died_message() const
+{
+    const auto is_explodable = std::any_of(std::begin(this->blow), std::end(this->blow),
+        [](const auto &blow) { return blow.method == RaceBlowMethodType::EXPLODE; });
+    if (this->has_living_flag()) {
+        return is_explodable ? _("は爆発して死んだ。", " explodes and dies.") : _("は死んだ。", " dies.");
+    }
+
+    return is_explodable ? _("は爆発して粉々になった。", " explodes into tiny shreds.") : _("を倒した。", " is destroyed.");
+}
index a09f56c..9af4cbb 100644 (file)
@@ -138,4 +138,5 @@ public:
 
     const std::string &decide_horror_message() const;
     bool has_living_flag() const;
+    std::string get_died_message() const;
 };