OSDN Git Service

[Refactor] #2405 Separated SoftArmorEnchanter from ArmorEnchanter
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 12 Mar 2022 10:12:02 +0000 (19:12 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sat, 12 Mar 2022 12:05:13 +0000 (21:05 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/object-enchant/apply-magic.cpp
src/object-enchant/protector/apply-magic-armor.cpp
src/object-enchant/protector/apply-magic-armor.h
src/object-enchant/protector/apply-magic-soft-armor.cpp [new file with mode: 0644]
src/object-enchant/protector/apply-magic-soft-armor.h [new file with mode: 0644]

index 4d8936f..b801d3d 100644 (file)
     <ClCompile Include="..\..\src\load\item\item-loader-factory.cpp" />\r
     <ClCompile Include="..\..\src\load\monster\monster-loader-factory.cpp" />\r
     <ClCompile Include="..\..\src\load\player-class-specific-data-loader.cpp" />\r
+    <ClCompile Include="..\..\src\object-enchant\protector\apply-magic-soft-armor.cpp" />\r
     <ClCompile Include="..\..\src\object-enchant\others\apply-magic-lite.cpp" />\r
     <ClCompile Include="..\..\src\monster-race\monster-kind-mask.cpp" />\r
     <ClCompile Include="..\..\src\monster-race\race-resistance-mask.cpp" />\r
     <ClInclude Include="..\..\src\monster-race\race-resistance-mask.h" />\r
     <ClInclude Include="..\..\src\monster-race\race-visual-flags.h" />\r
     <ClInclude Include="..\..\src\mspell\mspell-result.h" />\r
+    <ClInclude Include="..\..\src\object-enchant\protector\apply-magic-soft-armor.h" />\r
     <ClInclude Include="..\..\src\object-enchant\others\apply-magic-lite.h" />\r
     <ClInclude Include="..\..\src\object-enchant\protector\apply-magic-dragon-armor.h" />\r
     <ClInclude Include="..\..\src\object-enchant\protector\apply-magic-hard-armor.h" />\r
index 345a008..f1143d2 100644 (file)
     <ClCompile Include="..\..\src\object-enchant\protector\apply-magic-hard-armor.cpp">\r
       <Filter>object-enchant\protector</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\src\object-enchant\protector\apply-magic-soft-armor.cpp">\r
+      <Filter>object-enchant\protector</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\src\combat\shoot.h">\r
     <ClInclude Include="..\..\src\object-enchant\protector\apply-magic-hard-armor.h">\r
       <Filter>object-enchant\protector</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\src\object-enchant\protector\apply-magic-soft-armor.h">\r
+      <Filter>object-enchant\protector</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <None Include="..\..\src\wall.bmp" />\r
index 94530f7..4b96d0e 100644 (file)
@@ -616,6 +616,7 @@ hengband_SOURCES = \
        object-enchant/protector/apply-magic-hard-armor.cpp object-enchant/protector/apply-magic-hard-armor.h \
        object-enchant/protector/apply-magic-helm.cpp object-enchant/protector/apply-magic-helm.h \
        object-enchant/protector/apply-magic-shield.cpp object-enchant/protector/apply-magic-shield.h \
+       object-enchant/protector/apply-magic-soft-armor.cpp object-enchant/protector/apply-magic-soft-armor.h \
        \
        object-enchant/weapon/abstract-weapon-enchanter.cpp object-enchant/weapon/abstract-weapon-enchanter.h \
        object-enchant/weapon/apply-magic-weapon.cpp object-enchant/weapon/apply-magic-weapon.h \
index a552daf..c288101 100644 (file)
@@ -26,6 +26,7 @@
 #include "object-enchant/protector/apply-magic-hard-armor.h"
 #include "object-enchant/protector/apply-magic-helm.h"
 #include "object-enchant/protector/apply-magic-shield.h"
+#include "object-enchant/protector/apply-magic-soft-armor.h"
 #include "object-enchant/special-object-flags.h"
 #include "object-enchant/tr-types.h"
 #include "object-enchant/trc-types.h"
@@ -173,8 +174,7 @@ void apply_magic_to_object(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH lev,
         HardArmorEnchanter(player_ptr, o_ptr, lev, power).apply_magic();
         break;
     case ItemKindType::SOFT_ARMOR:
-        // @todo いずれSoftArmorEnchanter等作って分離する.
-        ArmorEnchanter(player_ptr, o_ptr, lev, power).apply_magic();
+        SoftArmorEnchanter(player_ptr, o_ptr, lev, power).apply_magic();
         break;
     case ItemKindType::GLOVES:
         GlovesEnchanter(player_ptr, o_ptr, lev, power).apply_magic();
index d2bbef7..b4b189e 100644 (file)
@@ -28,59 +28,6 @@ ArmorEnchanter::ArmorEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH
 {
 }
 
-/*!
- * @brief power > 2 はデバッグ専用.
- */
-void ArmorEnchanter::apply_magic()
-{
-    if (this->power == 0) {
-        return;
-    }
-
-    switch (this->o_ptr->tval) {
-    case ItemKindType::SOFT_ARMOR:
-        // @todo 後ほどSoftArmorEnchanterへ分離した時、このswitch文はsval_enchant() へ移動させる.
-        switch (this->o_ptr->sval) {
-        case SV_KUROSHOUZOKU:
-            this->o_ptr->pval = randint1(4);
-            break;
-        case SV_ABUNAI_MIZUGI:
-            if (this->player_ptr->ppersonality != PERSONALITY_SEXY) {
-                break;
-            }
-
-            this->o_ptr->pval = 3;
-            this->o_ptr->art_flags.set(TR_STR);
-            this->o_ptr->art_flags.set(TR_INT);
-            this->o_ptr->art_flags.set(TR_WIS);
-            this->o_ptr->art_flags.set(TR_DEX);
-            this->o_ptr->art_flags.set(TR_CON);
-            this->o_ptr->art_flags.set(TR_CHR);
-            break;
-        default:
-            break;
-        }
-
-        if (this->power > 1) {
-            this->give_high_ego_index();
-            if (this->is_high_ego_generated) {
-                return;
-            }
-
-            this->give_ego_index();
-            return;
-        }
-
-        if (this->power < -1) {
-            this->give_cursed();
-        }
-
-        return;
-    default:
-        return;
-    }
-}
-
 /*
  * @details power > 2はデバッグ専用.
  */
index b577f3d..ccea17f 100644 (file)
@@ -7,17 +7,16 @@ class ObjectType;
 class PlayerType;
 class ArmorEnchanter : public AbstractProtectorEnchanter {
 public:
-    ArmorEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power);
     virtual ~ArmorEnchanter() = default;
-    void apply_magic() override;
 
 protected:
+    ArmorEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power);
+
+    PlayerType *player_ptr;
+    bool is_high_ego_generated = false;
+
     void sval_enchant() override{};
     void give_ego_index() override;
     void give_high_ego_index() override;
     void give_cursed() override;
-
-private:
-    PlayerType *player_ptr;
-    bool is_high_ego_generated = false;
 };
diff --git a/src/object-enchant/protector/apply-magic-soft-armor.cpp b/src/object-enchant/protector/apply-magic-soft-armor.cpp
new file mode 100644 (file)
index 0000000..e216501
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * @brief 軽鎧に耐性等の追加効果を付与する処理
+ * @date 2022/03/12
+ * @author Hourier
+ */
+
+#include "object-enchant/protector/apply-magic-soft-armor.h"
+#include "system/object-type-definition.h"
+#include "system/player-type-definition.h"
+#include "sv-definition/sv-armor-types.h"
+
+/*
+ * @brief コンストラクタ
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
+ * @param level 生成基準階
+ * @param power 生成ランク
+ */
+SoftArmorEnchanter::SoftArmorEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power)
+    : ArmorEnchanter{ player_ptr, o_ptr, level, power }
+{
+}
+
+/*!
+ * @brief power > 2 はデバッグ専用.
+ */
+void SoftArmorEnchanter::apply_magic()
+{
+    switch (this->o_ptr->sval) {
+    case SV_KUROSHOUZOKU:
+        this->o_ptr->pval = randint1(4);
+        break;
+    case SV_ABUNAI_MIZUGI:
+        if (this->player_ptr->ppersonality != PERSONALITY_SEXY) {
+            break;
+        }
+
+        this->o_ptr->pval = 3;
+        this->o_ptr->art_flags.set(TR_STR);
+        this->o_ptr->art_flags.set(TR_INT);
+        this->o_ptr->art_flags.set(TR_WIS);
+        this->o_ptr->art_flags.set(TR_DEX);
+        this->o_ptr->art_flags.set(TR_CON);
+        this->o_ptr->art_flags.set(TR_CHR);
+        break;
+    default:
+        break;
+    }
+
+    if (this->power > 1) {
+        this->give_high_ego_index();
+        if (this->is_high_ego_generated) {
+            return;
+        }
+
+        this->give_ego_index();
+        return;
+    }
+
+    if (this->power < -1) {
+        this->give_cursed();
+    }
+}
diff --git a/src/object-enchant/protector/apply-magic-soft-armor.h b/src/object-enchant/protector/apply-magic-soft-armor.h
new file mode 100644 (file)
index 0000000..5f46f81
--- /dev/null
@@ -0,0 +1,12 @@
+#pragma once
+
+#include "object-enchant/protector/apply-magic-armor.h"
+#include "system/angband.h"
+
+class ObjectType;
+class PlayerType;
+class SoftArmorEnchanter : ArmorEnchanter {
+public:
+    SoftArmorEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power);
+    void apply_magic() override;
+};