From 72e1305b5f3d823df9eea7583a2dfaca647dd4ec Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Wed, 11 Oct 2023 20:56:02 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#2666=20is=5Fin=5Fspecial=5Ffloor()?= =?utf8?q?=20=E3=82=92FloorType=20=E3=81=AE=E3=82=AA=E3=83=96=E3=82=B8?= =?utf8?q?=E3=82=A7=E3=82=AF=E3=83=88=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89?= =?utf8?q?=E3=81=B8=E7=B9=B0=E3=82=8A=E8=BE=BC=E3=82=93=E3=81=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/spell-kind/spells-genocide.cpp | 10 +--------- src/system/floor-type-definition.cpp | 12 ++++++++++++ src/system/floor-type-definition.h | 1 + 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/spell-kind/spells-genocide.cpp b/src/spell-kind/spells-genocide.cpp index 8f6417126..4baa5a82e 100644 --- a/src/spell-kind/spells-genocide.cpp +++ b/src/spell-kind/spells-genocide.cpp @@ -31,14 +31,6 @@ #include "util/bit-flags-calculator.h" #include "view/display-messages.h" -static bool is_in_special_floor(PlayerType *player_ptr) -{ - auto &floor = *player_ptr->current_floor_ptr; - auto is_in_fixed_quest = floor.is_in_quest(); - is_in_fixed_quest &= !inside_quest(floor.get_random_quest_id()); - return is_in_fixed_quest || floor.inside_arena || AngbandSystem::get_instance().is_watching(); -} - /*! * @brief モンスターへの単体抹殺処理サブルーチン / Delete a non-unique/non-quest monster * @param m_idx 抹殺するモンスターID @@ -64,7 +56,7 @@ bool genocide_aux(PlayerType *player_ptr, MONSTER_IDX m_idx, int power, bool pla resist = true; } else if (m_idx == player_ptr->riding) { resist = true; - } else if (is_in_special_floor(player_ptr)) { + } else if (floor.is_special()) { resist = true; } else if (player_cast && (monrace.level > randint0(power))) { resist = true; diff --git a/src/system/floor-type-definition.cpp b/src/system/floor-type-definition.cpp index aabb5baba..efcfacc5a 100644 --- a/src/system/floor-type-definition.cpp +++ b/src/system/floor-type-definition.cpp @@ -1,5 +1,6 @@ #include "system/floor-type-definition.h" #include "dungeon/quest.h" +#include "system/angband-system.h" #include "system/dungeon-info.h" #include "system/grid-type-definition.h" #include "system/item-entity.h" @@ -115,3 +116,14 @@ bool FloorType::has_los(const Pos2D pos) const { return this->get_grid(pos).has_los(); } + +/*! + * @brief 特別なフロアにいるかを判定する + * @return 固定クエスト、アリーナ、モンスター闘技場のいずれかならばtrue + */ +bool FloorType::is_special() const +{ + auto is_in_fixed_quest = this->is_in_quest(); + is_in_fixed_quest &= !inside_quest(this->get_random_quest_id()); + return is_in_fixed_quest || this->inside_arena || AngbandSystem::get_instance().is_watching(); +} diff --git a/src/system/floor-type-definition.h b/src/system/floor-type-definition.h index 5fe6a0145..2e51fcb9b 100644 --- a/src/system/floor-type-definition.h +++ b/src/system/floor-type-definition.h @@ -95,4 +95,5 @@ public: QuestId get_random_quest_id(std::optional level_opt = std::nullopt) const; QuestId get_quest_id(const int bonus = 0) const; bool has_los(const Pos2D pos) const; + bool is_special() const; }; -- 2.11.0