OSDN Git Service

[Refactor] #2647 is_friendly() をmonster_type のオブジェクトメソッドとして再定義した
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 17 Sep 2022 01:34:11 +0000 (10:34 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sat, 17 Sep 2022 08:44:55 +0000 (17:44 +0900)
17 files changed:
src/effect/effect-monster-oldies.cpp
src/effect/effect-monster.cpp
src/melee/melee-postprocess.cpp
src/monster-floor/monster-move.cpp
src/monster-floor/monster-runaway.cpp
src/monster-floor/one-monster-placer.cpp
src/monster/monster-info.cpp
src/monster/monster-info.h
src/monster/monster-processor.cpp
src/monster/monster-status-setter.cpp
src/mspell/mspell-summon.cpp
src/object-use/throw-execution.cpp
src/spell-kind/spells-genocide.cpp
src/spell-kind/spells-polymorph.cpp
src/system/monster-type-definition.cpp
src/system/monster-type-definition.h
src/view/display-monster-status.cpp

index c2eb0cc..f37a201 100644 (file)
@@ -111,7 +111,7 @@ static void effect_monster_old_heal_check_player(PlayerType *player_ptr, effect_
         chg_virtue(player_ptr, V_INDIVIDUALISM, 1);
     }
 
-    if (is_friendly(em_ptr->m_ptr)) {
+    if (em_ptr->m_ptr->is_friendly()) {
         chg_virtue(player_ptr, V_HONOUR, 1);
     } else if (em_ptr->r_ptr->kind_flags.has_not(MonsterKindType::EVIL)) {
         if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::GOOD)) {
@@ -203,7 +203,7 @@ ProcessResult effect_monster_old_speed(PlayerType *player_ptr, effect_monster_ty
         if (em_ptr->r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) {
             chg_virtue(player_ptr, V_INDIVIDUALISM, 1);
         }
-        if (is_friendly(em_ptr->m_ptr)) {
+        if (em_ptr->m_ptr->is_friendly()) {
             chg_virtue(player_ptr, V_HONOUR, 1);
         }
     }
index 68e0e11..990ffa6 100644 (file)
@@ -619,7 +619,7 @@ static void update_phase_out_stat(PlayerType *player_ptr, effect_monster_type *e
  */
 static void postprocess_by_effected_pet(PlayerType *player_ptr, effect_monster_type *em_ptr)
 {
-    if ((em_ptr->dam <= 0) || is_pet(em_ptr->m_ptr) || is_friendly(em_ptr->m_ptr)) {
+    if ((em_ptr->dam <= 0) || is_pet(em_ptr->m_ptr) || em_ptr->m_ptr->is_friendly()) {
         return;
     }
 
index c9bcc67..39ba44e 100644 (file)
@@ -296,7 +296,7 @@ void mon_take_hit_mon(PlayerType *player_ptr, MONSTER_IDX m_idx, int dam, bool *
     *dead = false;
     cancel_fear_by_pain(player_ptr, mam_pp_ptr);
     make_monster_fear(player_ptr, mam_pp_ptr);
-    if ((dam > 0) && !is_pet(m_ptr) && !is_friendly(m_ptr) && (mam_pp_ptr->who != m_idx)) {
+    if ((dam > 0) && !is_pet(m_ptr) && !m_ptr->is_friendly() && (mam_pp_ptr->who != m_idx)) {
         if (is_pet(&floor_ptr->m_list[mam_pp_ptr->who]) && !player_bold(player_ptr, m_ptr->target_y, m_ptr->target_x)) {
             set_target(m_ptr, floor_ptr->m_list[mam_pp_ptr->who].fy, floor_ptr->m_list[mam_pp_ptr->who].fx);
         }
index 3f01dd0..ebbf285 100644 (file)
@@ -490,7 +490,7 @@ static std::string_view get_speak_filename(monster_type *m_ptr)
         return monspeak_txt;
     }
 
-    if (is_friendly(m_ptr) && can_speak(ap_r_ref, MonsterSpeakType::SPEAK_FRIEND)) {
+    if (m_ptr->is_friendly() && can_speak(ap_r_ref, MonsterSpeakType::SPEAK_FRIEND)) {
         return _("monfrien_j.txt", "monfrien.txt");
     }
 
index 946e009..81f9adc 100644 (file)
@@ -91,7 +91,7 @@ bool runaway_monster(PlayerType *player_ptr, turn_flags *turn_flags_ptr, MONSTER
 {
     auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
     auto *r_ptr = &r_info[m_ptr->r_idx];
-    bool can_runaway = is_pet(m_ptr) || is_friendly(m_ptr);
+    bool can_runaway = is_pet(m_ptr) || m_ptr->is_friendly();
     can_runaway &= (r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) || (r_ptr->population_flags.has(MonsterPopulationType::NAZGUL));
     can_runaway &= !player_ptr->phase_out;
     if (!can_runaway) {
index 8f55084..1340a08 100644 (file)
 
 static bool is_friendly_idx(PlayerType *player_ptr, MONSTER_IDX m_idx)
 {
-    return m_idx > 0 && is_friendly(&player_ptr->current_floor_ptr->m_list[(m_idx)]);
+    if (m_idx == 0) {
+        return false;
+    }
+
+    const auto &m_ref = player_ptr->current_floor_ptr->m_list[m_idx];
+    return m_ref.is_friendly();
 }
 
 /*!
index 2d5313b..b2c7715 100644 (file)
@@ -271,11 +271,6 @@ bool is_original_ap(const monster_type *m_ptr)
     return m_ptr->ap_r_idx == m_ptr->r_idx;
 }
 
-bool is_friendly(const monster_type *m_ptr)
-{
-    return m_ptr->mflag2.has(MonsterConstantFlagType::FRIENDLY);
-}
-
 bool is_pet(const monster_type *m_ptr)
 {
     return m_ptr->mflag2.has(MonsterConstantFlagType::PET);
@@ -283,7 +278,7 @@ bool is_pet(const monster_type *m_ptr)
 
 bool is_hostile(const monster_type *m_ptr)
 {
-    return !is_friendly(m_ptr) && !is_pet(m_ptr);
+    return !m_ptr->is_friendly() && !is_pet(m_ptr);
 }
 
 /*!
index 3f4163a..084b93c 100644 (file)
@@ -17,7 +17,6 @@ bool are_enemies(PlayerType *player_ptr, monster_type *m_ptr1, monster_type *m_p
 bool monster_has_hostile_align(PlayerType *player_ptr, monster_type *m_ptr, int pa_good, int pa_evil, monster_race *r_ptr);
 bool is_original_ap_and_seen(PlayerType *player_ptr, monster_type *m_ptr);
 
-bool is_friendly(const monster_type *m_ptr);
 bool is_pet(const monster_type *m_ptr);
 bool is_hostile(const monster_type *m_ptr);
 bool is_original_ap(const monster_type *m_ptr);
index 5aa10bb..97098c2 100644 (file)
@@ -329,7 +329,7 @@ void process_angar(PlayerType *player_ptr, MONSTER_IDX m_idx, bool see_m)
     auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
     auto *r_ptr = &r_info[m_ptr->r_idx];
     bool gets_angry = false;
-    if (is_friendly(m_ptr) && has_aggravate(player_ptr)) {
+    if (m_ptr->is_friendly() && has_aggravate(player_ptr)) {
         gets_angry = true;
     }
 
index 0e95fd0..323c1ac 100644 (file)
@@ -63,7 +63,7 @@ void set_hostile(PlayerType *player_ptr, monster_type *m_ptr)
  */
 void anger_monster(PlayerType *player_ptr, monster_type *m_ptr)
 {
-    if (player_ptr->phase_out || !is_friendly(m_ptr)) {
+    if (player_ptr->phase_out || !m_ptr->is_friendly()) {
         return;
     }
 
index 874296f..476667b 100644 (file)
@@ -253,7 +253,7 @@ MonsterSpellResult spell_RF6_S_CYBER(PlayerType *player_ptr, POSITION y, POSITIO
     summon_disturb(player_ptr, target_type, known, see_either);
 
     int count = 0;
-    if (is_friendly(m_ptr) && mon_to_mon) {
+    if (m_ptr->is_friendly() && mon_to_mon) {
         count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP));
     } else {
         count += summon_cyber(player_ptr, m_idx, y, x);
index 52a89f6..2aaa640 100644 (file)
@@ -258,7 +258,7 @@ void ObjectThrowEntity::display_potion_throw()
 
     auto *floor_ptr = this->player_ptr->current_floor_ptr;
     auto *angry_m_ptr = &floor_ptr->m_list[floor_ptr->grid_array[this->y][this->x].m_idx];
-    if ((floor_ptr->grid_array[this->y][this->x].m_idx == 0) || !is_friendly(angry_m_ptr) || monster_invulner_remaining(angry_m_ptr)) {
+    if ((floor_ptr->grid_array[this->y][this->x].m_idx == 0) || !angry_m_ptr->is_friendly() || monster_invulner_remaining(angry_m_ptr)) {
         this->do_drop = false;
         return;
     }
index db43973..0af766e 100644 (file)
@@ -86,7 +86,7 @@ bool genocide_aux(PlayerType *player_ptr, MONSTER_IDX m_idx, int power, bool pla
             }
         }
 
-        if (is_friendly(m_ptr) && !is_pet(m_ptr)) {
+        if (m_ptr->is_friendly() && !is_pet(m_ptr)) {
             if (see_m) {
                 msg_format(_("%sは怒った!", "%^s gets angry!"), m_name);
             }
index 8728909..83604b5 100644 (file)
@@ -94,7 +94,7 @@ bool polymorph_monster(PlayerType *player_ptr, POSITION y, POSITION x)
     bool preserve_hold_objects = !back_m.hold_o_idx_list.empty();
 
     BIT_FLAGS mode = 0L;
-    if (is_friendly(m_ptr)) {
+    if (m_ptr->is_friendly()) {
         mode |= PM_FORCE_FRIENDLY;
     }
     if (is_pet(m_ptr)) {
index ae714e5..bb8537c 100644 (file)
@@ -1 +1,6 @@
 #include "system/monster-type-definition.h"
+
+bool monster_type::is_friendly() const
+{
+    return this->mflag2.has(MonsterConstantFlagType::FRIENDLY);
+}
index b7d3e43..a0c9a0e 100644 (file)
@@ -51,4 +51,6 @@ struct monster_type {
     /* TODO: クローン、ペット、有効化は意義が異なるので別変数に切り離すこと。save/loadのバージョン更新が面倒そうだけど */
     EnumClassFlagGroup<MonsterSmartLearnType> smart{}; /*!< モンスターのプレイヤーに対する学習状態 / Field for "smart_learn" - Some bit-flags for the "smart" field */
     MONSTER_IDX parent_m_idx{}; /*!< 召喚主のモンスターID */
+
+    bool is_friendly() const;
 };
index 9a6f12b..640f513 100644 (file)
@@ -33,7 +33,7 @@ concptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
         attitude = "";
     } else if (is_pet(m_ptr)) {
         attitude = _(", ペット", ", pet");
-    } else if (is_friendly(m_ptr)) {
+    } else if (m_ptr->is_friendly()) {
         attitude = _(", 友好的", ", friendly");
     } else {
         attitude = _("", "");