OSDN Git Service

[Refactor] #2205 apply-magic-others.cpp/h をOtherItemsEnchanterとして定義した
authorHourier <66951241+Hourier@users.noreply.github.com>
Mon, 21 Feb 2022 10:43:37 +0000 (19:43 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Wed, 23 Feb 2022 02:55:12 +0000 (11:55 +0900)
src/object-enchant/apply-magic.cpp
src/object-enchant/others/apply-magic-others.cpp
src/object-enchant/others/apply-magic-others.h

index 89673d1..8ce652d 100644 (file)
@@ -170,7 +170,7 @@ void apply_magic_to_object(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH lev,
         LiteEnchanter(player_ptr, o_ptr, power).apply_magic();
         break;
     default:
-        apply_magic_others(player_ptr, o_ptr);
+        OtherItemsEnchanter(player_ptr, o_ptr).apply_magic();
         break;
     }
 
index 6b0a5a4..86ab078 100644 (file)
 #include "util/bit-flags-calculator.h"
 #include "view/display-messages.h"
 
+OtherItemsEnchanter::OtherItemsEnchanter(PlayerType *player_ptr, ObjectType *o_ptr)
+    : player_ptr(player_ptr)
+    , o_ptr(o_ptr)
+{
+}
+
 /*!
  * @brief その他雑多のオブジェクトに生成ランクごとの強化を与えるサブルーチン
  * Apply magic to an item known to be "boring"
  * @param power 生成ランク
  * @details power > 2はデバッグ専用.
  */
-void apply_magic_others(PlayerType *player_ptr, ObjectType *o_ptr)
+void OtherItemsEnchanter::apply_magic()
 {
-    auto *k_ptr = &k_info[o_ptr->k_idx];
+    auto *k_ptr = &k_info[this->o_ptr->k_idx];
 
-    auto *floor_ptr = player_ptr->current_floor_ptr;
-    switch (o_ptr->tval) {
+    auto *floor_ptr = this->player_ptr->current_floor_ptr;
+    switch (this->o_ptr->tval) {
     case ItemKindType::WHISTLE: {
         break;
     }
     case ItemKindType::FLASK: {
-        o_ptr->fuel = o_ptr->pval;
-        o_ptr->pval = 0;
+        this->o_ptr->fuel = this->o_ptr->pval;
+        this->o_ptr->pval = 0;
         break;
     }
     case ItemKindType::WAND:
@@ -56,17 +62,17 @@ void apply_magic_others(PlayerType *player_ptr, ObjectType *o_ptr)
         /* The wand or staff gets a number of initial charges equal
          * to between 1/2 (+1) and the full object kind's pval. -LM-
          */
-        o_ptr->pval = k_ptr->pval / 2 + randint1((k_ptr->pval + 1) / 2);
+        this->o_ptr->pval = k_ptr->pval / 2 + randint1((k_ptr->pval + 1) / 2);
         break;
     }
     case ItemKindType::ROD: {
-        o_ptr->pval = k_ptr->pval;
+        this->o_ptr->pval = k_ptr->pval;
         break;
     }
     case ItemKindType::CAPTURE: {
-        o_ptr->pval = 0;
-        object_aware(player_ptr, o_ptr);
-        object_known(o_ptr);
+        this->o_ptr->pval = 0;
+        object_aware(this->player_ptr, this->o_ptr);
+        object_known(this->o_ptr);
         break;
     }
     case ItemKindType::FIGURINE: {
@@ -76,7 +82,7 @@ void apply_magic_others(PlayerType *player_ptr, ObjectType *o_ptr)
         while (true) {
             i = randint1(r_info.size() - 1);
 
-            if (!item_monster_okay(player_ptr, i))
+            if (!item_monster_okay(this->player_ptr, i))
                 continue;
             if (i == MON_TSUCHINOKO)
                 continue;
@@ -93,9 +99,9 @@ void apply_magic_others(PlayerType *player_ptr, ObjectType *o_ptr)
             break;
         }
 
-        o_ptr->pval = i;
+        this->o_ptr->pval = i;
         if (one_in_(6))
-            o_ptr->curse_flags.set(CurseTraitType::CURSED);
+            this->o_ptr->curse_flags.set(CurseTraitType::CURSED);
 
         break;
     }
@@ -104,15 +110,15 @@ void apply_magic_others(PlayerType *player_ptr, ObjectType *o_ptr)
         int check;
         uint32_t match = 0;
         monster_race *r_ptr;
-        if (o_ptr->sval == SV_SKELETON) {
+        if (this->o_ptr->sval == SV_SKELETON) {
             match = RF9_DROP_SKELETON;
-        } else if (o_ptr->sval == SV_CORPSE) {
+        } else if (this->o_ptr->sval == SV_CORPSE) {
             match = RF9_DROP_CORPSE;
         }
 
-        get_mon_num_prep(player_ptr, item_monster_okay, nullptr);
+        get_mon_num_prep(this->player_ptr, item_monster_okay, nullptr);
         while (true) {
-            i = get_mon_num(player_ptr, 0, floor_ptr->dun_level, 0);
+            i = get_mon_num(this->player_ptr, 0, floor_ptr->dun_level, 0);
             r_ptr = &r_info[i];
             check = (floor_ptr->dun_level < r_ptr->level) ? (r_ptr->level - floor_ptr->dun_level) : 0;
             if (!r_ptr->rarity)
@@ -125,9 +131,9 @@ void apply_magic_others(PlayerType *player_ptr, ObjectType *o_ptr)
             break;
         }
 
-        o_ptr->pval = i;
-        object_aware(player_ptr, o_ptr);
-        object_known(o_ptr);
+        this->o_ptr->pval = i;
+        object_aware(this->player_ptr, this->o_ptr);
+        object_known(this->o_ptr);
         break;
     }
     case ItemKindType::STATUE: {
@@ -142,27 +148,27 @@ void apply_magic_others(PlayerType *player_ptr, ObjectType *o_ptr)
             break;
         }
 
-        o_ptr->pval = i;
+        this->o_ptr->pval = i;
         if (cheat_peek) {
             msg_format(_("%sの像", "Statue of %s"), r_ptr->name.c_str());
         }
 
-        object_aware(player_ptr, o_ptr);
-        object_known(o_ptr);
+        object_aware(this->player_ptr, this->o_ptr);
+        object_known(this->o_ptr);
         break;
     }
     case ItemKindType::CHEST: {
-        DEPTH obj_level = k_info[o_ptr->k_idx].level;
+        DEPTH obj_level = k_info[this->o_ptr->k_idx].level;
         if (obj_level <= 0)
             break;
 
-        o_ptr->pval = randint1(obj_level);
-        if (o_ptr->sval == SV_CHEST_KANDUME)
-            o_ptr->pval = 6;
+        this->o_ptr->pval = randint1(obj_level);
+        if (this->o_ptr->sval == SV_CHEST_KANDUME)
+            this->o_ptr->pval = 6;
 
-        o_ptr->chest_level = floor_ptr->dun_level + 5;
-        if (o_ptr->pval > 55)
-            o_ptr->pval = 55 + (byte)randint0(5);
+        this->o_ptr->chest_level = floor_ptr->dun_level + 5;
+        if (this->o_ptr->pval > 55)
+            this->o_ptr->pval = 55 + (byte)randint0(5);
 
         break;
     }
index 81d9712..9790c6f 100644 (file)
@@ -1,5 +1,20 @@
 #pragma once
 
+#include "object-enchant/enchanter-base.h"
+
 class ObjectType;
 class PlayerType;
-void apply_magic_others(PlayerType *player_ptr, ObjectType *o_ptr);
+class OtherItemsEnchanter : EnchanterBase {
+public:
+    OtherItemsEnchanter(PlayerType *player_ptr, ObjectType *o_ptr);
+    void apply_magic() override;
+
+    void sval_enchant() override{};
+    void give_ego_index() override{};
+    void give_high_ego_index() override{};
+    void give_cursed() override{};
+
+private:
+    PlayerType *player_ptr;
+    ObjectType *o_ptr;
+};