OSDN Git Service

[Refactor] object_is_rare() を object_type のメンバ関数化
authorHabu <habu1010+github@gmail.com>
Thu, 2 Sep 2021 16:44:16 +0000 (01:44 +0900)
committerHabu <habu1010+github@gmail.com>
Thu, 2 Sep 2021 16:44:16 +0000 (01:44 +0900)
src/autopick/autopick-entry.cpp
src/autopick/autopick-matcher.cpp
src/object-hook/hook-enchant.cpp
src/object-hook/hook-enchant.h
src/system/object-type-definition.cpp
src/system/object-type-definition.h

index fb64cc1..24f30b3 100644 (file)
@@ -356,7 +356,7 @@ void autopick_entry_from_object(player_type *player_ptr, autopick_type *entry, o
                 strcpy(name_str, e_ptr->name.c_str());
 #endif
                 name = false;
-                if (!object_is_rare(o_ptr))
+                if (!o_ptr->is_rare())
                     ADD_FLG(FLG_COMMON);
             }
 
index 88595a5..6151ef0 100644 (file)
@@ -165,10 +165,10 @@ bool is_autopick_match(player_type *player_ptr, object_type *o_ptr, autopick_typ
         }
     }
 
-    if (IS_FLG(FLG_RARE) && !object_is_rare(o_ptr))
+    if (IS_FLG(FLG_RARE) && !o_ptr->is_rare())
         return false;
 
-    if (IS_FLG(FLG_COMMON) && object_is_rare(o_ptr))
+    if (IS_FLG(FLG_COMMON) && o_ptr->is_rare())
         return false;
 
     if (IS_FLG(FLG_WANTED) && !object_is_bounty(player_ptr, o_ptr))
index deeb55d..d2d2989 100644 (file)
@@ -7,76 +7,6 @@
 #include "system/player-type-definition.h"
 
 /*!
- * @brief オブジェクトがレアアイテムかどうかを返す /
- * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return レアアイテムならばTRUEを返す
- */
-bool object_is_rare(const object_type *o_ptr)
-{
-    switch (o_ptr->tval) {
-    case TV_HAFTED:
-        if (o_ptr->sval == SV_MACE_OF_DISRUPTION || o_ptr->sval == SV_WIZSTAFF)
-            return true;
-        break;
-
-    case TV_POLEARM:
-        if (o_ptr->sval == SV_SCYTHE_OF_SLICING || o_ptr->sval == SV_DEATH_SCYTHE)
-            return true;
-        break;
-
-    case TV_SWORD:
-        if (o_ptr->sval == SV_BLADE_OF_CHAOS || o_ptr->sval == SV_DIAMOND_EDGE || o_ptr->sval == SV_POISON_NEEDLE || o_ptr->sval == SV_HAYABUSA)
-            return true;
-        break;
-
-    case TV_SHIELD:
-        if (o_ptr->sval == SV_DRAGON_SHIELD || o_ptr->sval == SV_MIRROR_SHIELD)
-            return true;
-        break;
-
-    case TV_HELM:
-        if (o_ptr->sval == SV_DRAGON_HELM)
-            return true;
-        break;
-
-    case TV_BOOTS:
-        if (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE)
-            return true;
-        break;
-
-    case TV_CLOAK:
-        if (o_ptr->sval == SV_ELVEN_CLOAK || o_ptr->sval == SV_ETHEREAL_CLOAK || o_ptr->sval == SV_SHADOW_CLOAK || o_ptr->sval == SV_MAGIC_RESISTANCE_CLOAK)
-            return true;
-        break;
-
-    case TV_GLOVES:
-        if (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES)
-            return true;
-        break;
-
-    case TV_SOFT_ARMOR:
-        if (o_ptr->sval == SV_KUROSHOUZOKU || o_ptr->sval == SV_ABUNAI_MIZUGI)
-            return true;
-        break;
-
-    case TV_HARD_ARMOR:
-        if (o_ptr->sval == SV_MITHRIL_CHAIN_MAIL || o_ptr->sval == SV_MITHRIL_PLATE_MAIL || o_ptr->sval == SV_ADAMANTITE_PLATE_MAIL)
-            return true;
-        break;
-
-    case TV_DRAG_ARMOR:
-        return true;
-
-    default:
-        break;
-    }
-
-    /* Any others are not "rare" objects. */
-    return false;
-}
-
-/*!
  * @brief オブジェクトがアーティファクトかを返す /
  * Check if an object is artifact
  * @param o_ptr 対象のオブジェクト構造体ポインタ
index 7856307..dcfad9b 100644 (file)
@@ -4,7 +4,6 @@ typedef struct object_type object_type;
 typedef struct player_type player_type;
 bool object_is_fixed_artifact(const object_type *o_ptr);
 bool object_is_ego(const object_type *o_ptr);
-bool object_is_rare(const object_type *o_ptr);
 bool object_is_artifact(const object_type *o_ptr);
 bool object_is_random_artifact(const object_type *o_ptr);
 bool object_is_nameless(const object_type *o_ptr);
index c0b2f96..4fb45ee 100644 (file)
@@ -11,7 +11,9 @@
 #include "object-enchant/trc-types.h"
 #include "object-enchant/trg-types.h"
 #include "object/object-kind.h"
+#include "sv-definition/sv-armor-types.h"
 #include "sv-definition/sv-other-types.h"
+#include "sv-definition/sv-protector-types.h"
 #include "sv-definition/sv-weapon-types.h"
 #include "system/player-type-definition.h"
 
@@ -271,3 +273,72 @@ bool object_type::is_armour() const
 {
     return (TV_ARMOR_BEGIN <= this->tval) && (this->tval <= TV_ARMOR_END);
 }
+
+/*!
+ * @brief オブジェクトがレアアイテムかどうかを返す /
+ * Rare weapons/aromors including Blade of Chaos, Dragon armors, etc.
+ * @return レアアイテムならばTRUEを返す
+ */
+bool object_type::is_rare() const
+{
+    switch (this->tval) {
+    case TV_HAFTED:
+        if (this->sval == SV_MACE_OF_DISRUPTION || this->sval == SV_WIZSTAFF)
+            return true;
+        break;
+
+    case TV_POLEARM:
+        if (this->sval == SV_SCYTHE_OF_SLICING || this->sval == SV_DEATH_SCYTHE)
+            return true;
+        break;
+
+    case TV_SWORD:
+        if (this->sval == SV_BLADE_OF_CHAOS || this->sval == SV_DIAMOND_EDGE || this->sval == SV_POISON_NEEDLE || this->sval == SV_HAYABUSA)
+            return true;
+        break;
+
+    case TV_SHIELD:
+        if (this->sval == SV_DRAGON_SHIELD || this->sval == SV_MIRROR_SHIELD)
+            return true;
+        break;
+
+    case TV_HELM:
+        if (this->sval == SV_DRAGON_HELM)
+            return true;
+        break;
+
+    case TV_BOOTS:
+        if (this->sval == SV_PAIR_OF_DRAGON_GREAVE)
+            return true;
+        break;
+
+    case TV_CLOAK:
+        if (this->sval == SV_ELVEN_CLOAK || this->sval == SV_ETHEREAL_CLOAK || this->sval == SV_SHADOW_CLOAK || this->sval == SV_MAGIC_RESISTANCE_CLOAK)
+            return true;
+        break;
+
+    case TV_GLOVES:
+        if (this->sval == SV_SET_OF_DRAGON_GLOVES)
+            return true;
+        break;
+
+    case TV_SOFT_ARMOR:
+        if (this->sval == SV_KUROSHOUZOKU || this->sval == SV_ABUNAI_MIZUGI)
+            return true;
+        break;
+
+    case TV_HARD_ARMOR:
+        if (this->sval == SV_MITHRIL_CHAIN_MAIL || this->sval == SV_MITHRIL_PLATE_MAIL || this->sval == SV_ADAMANTITE_PLATE_MAIL)
+            return true;
+        break;
+
+    case TV_DRAG_ARMOR:
+        return true;
+
+    default:
+        break;
+    }
+
+    /* Any others are not "rare" objects. */
+    return false;
+}
index 01e9e12..79a1514 100644 (file)
@@ -75,4 +75,5 @@ typedef struct object_type {
     bool is_convertible() const;
     bool is_lance() const;
     bool is_armour() const;
+    bool is_rare() const;
 } object_type;