From 20350aaa01c499db8ca25d96d7772861554e3fc7 Mon Sep 17 00:00:00 2001
From: Hourier <66951241+Hourier@users.noreply.github.com>
Date: Fri, 11 Mar 2022 22:51:57 +0900
Subject: [PATCH] [Refactor] #2403 Separated apply-magic-arrow.cpp/h from
apply-magic.cpp
---
Hengband/Hengband/Hengband.vcxproj | 2 +
Hengband/Hengband/Hengband.vcxproj.filters | 6 +++
src/Makefile.am | 1 +
src/object-enchant/apply-magic.cpp | 5 +-
src/object-enchant/weapon/apply-magic-arrow.cpp | 60 ++++++++++++++++++++++++
src/object-enchant/weapon/apply-magic-arrow.h | 21 +++++++++
src/object-enchant/weapon/apply-magic-weapon.cpp | 47 ++-----------------
7 files changed, 99 insertions(+), 43 deletions(-)
create mode 100644 src/object-enchant/weapon/apply-magic-arrow.cpp
create mode 100644 src/object-enchant/weapon/apply-magic-arrow.h
diff --git a/Hengband/Hengband/Hengband.vcxproj b/Hengband/Hengband/Hengband.vcxproj
index f8f2b9aeb..5a0de937d 100644
--- a/Hengband/Hengband/Hengband.vcxproj
+++ b/Hengband/Hengband/Hengband.vcxproj
@@ -281,6 +281,7 @@
+
@@ -968,6 +969,7 @@
+
diff --git a/Hengband/Hengband/Hengband.vcxproj.filters b/Hengband/Hengband/Hengband.vcxproj.filters
index 5ea3138b3..700fc1441 100644
--- a/Hengband/Hengband/Hengband.vcxproj.filters
+++ b/Hengband/Hengband/Hengband.vcxproj.filters
@@ -2430,6 +2430,9 @@
object-enchant\weapon
+
+ object-enchant\weapon
+
@@ -5280,6 +5283,9 @@
object-enchant\weapon
+
+ object-enchant\weapon
+
diff --git a/src/Makefile.am b/src/Makefile.am
index 462cfcd4e..27a9d8ed1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -619,6 +619,7 @@ hengband_SOURCES = \
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-arrow.cpp object-enchant/weapon/apply-magic-arrow.h \
object-enchant/weapon/apply-magic-digging.cpp object-enchant/weapon/apply-magic-digging.h \
object-enchant/weapon/apply-magic-sword.cpp object-enchant/weapon/apply-magic-sword.h \
object-enchant/weapon/apply-magic-weapon.cpp object-enchant/weapon/apply-magic-weapon.h \
diff --git a/src/object-enchant/apply-magic.cpp b/src/object-enchant/apply-magic.cpp
index eeef97128..de6a899dd 100644
--- a/src/object-enchant/apply-magic.cpp
+++ b/src/object-enchant/apply-magic.cpp
@@ -31,6 +31,7 @@
#include "object-enchant/tr-types.h"
#include "object-enchant/trc-types.h"
#include "object-enchant/trg-types.h"
+#include "object-enchant/weapon/apply-magic-arrow.h"
#include "object-enchant/weapon/apply-magic-digging.h"
#include "object-enchant/weapon/apply-magic-sword.h"
#include "object-enchant/weapon/apply-magic-weapon.h"
@@ -143,10 +144,12 @@ void apply_magic_to_object(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH lev,
DiggingEnchanter(player_ptr, o_ptr, lev, power).apply_magic();
break;
case ItemKindType::BOW:
+ WeaponEnchanter(player_ptr, o_ptr, lev, power).apply_magic();
+ break;
case ItemKindType::SHOT:
case ItemKindType::ARROW:
case ItemKindType::BOLT:
- WeaponEnchanter(player_ptr, o_ptr, lev, power).apply_magic();
+ ArrowEnchanter(player_ptr, o_ptr, lev, power).apply_magic();
break;
case ItemKindType::HAFTED:
case ItemKindType::POLEARM:
diff --git a/src/object-enchant/weapon/apply-magic-arrow.cpp b/src/object-enchant/weapon/apply-magic-arrow.cpp
new file mode 100644
index 000000000..cd1bed499
--- /dev/null
+++ b/src/object-enchant/weapon/apply-magic-arrow.cpp
@@ -0,0 +1,60 @@
+/*!
+ * @brief ç¢é¡ã®ã¢ã¤ãã ãå¼·åããå¦ç
+ * @date 2022/03/11
+ * @author Hourier
+ */
+
+#include "object-enchant/weapon/apply-magic-arrow.h"
+#include "artifact/random-art-generator.h"
+#include "floor/floor-base-definitions.h"
+#include "inventory/inventory-slot-types.h"
+#include "system/object-type-definition.h"
+#include "system/player-type-definition.h"
+
+/*!
+ * @brief ç¢é¡å¼·åã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿
+ * @param player_ptr ãã¬ã¤ã¤ã¼ã¸ã®åç
§ãã¤ã³ã¿
+ * @param o_ptr å¼·åãä¸ããããªãã¸ã§ã¯ãã®æ§é ä½åç
§ãã¤ã³ã¿
+ * @param level çæåºæºé
+ * @param power çæã©ã³ã¯
+ */
+ArrowEnchanter::ArrowEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power)
+ : AbstractWeaponEnchanter(o_ptr, level, power)
+ , player_ptr(player_ptr)
+{
+}
+
+/*!
+ * @brief ç¢é¡ã«çæã©ã³ã¯ãã¨ã®å¼·åãä¸ãããµãã«ã¼ãã³
+ * @details power > 2ã¯ãããã°å°ç¨.
+ */
+void ArrowEnchanter::apply_magic()
+{
+ if (this->should_skip) {
+ return;
+ }
+
+ if (this->power > 1) {
+ if (this->power > 2) {
+ become_random_artifact(this->player_ptr, this->o_ptr, false);
+ return;
+ }
+
+ this->o_ptr->ego_idx = get_random_ego(INVEN_AMMO, true);
+ while (one_in_(10 * this->o_ptr->dd * this->o_ptr->ds)) {
+ this->o_ptr->dd++;
+ }
+
+ if (this->o_ptr->dd > 9) {
+ this->o_ptr->dd = 9;
+ }
+
+ return;
+ }
+
+ if (this->power < -1) {
+ if (randint0(MAX_DEPTH) < this->level) {
+ this->o_ptr->ego_idx = get_random_ego(INVEN_AMMO, false);
+ }
+ }
+}
diff --git a/src/object-enchant/weapon/apply-magic-arrow.h b/src/object-enchant/weapon/apply-magic-arrow.h
new file mode 100644
index 000000000..fabeaf53a
--- /dev/null
+++ b/src/object-enchant/weapon/apply-magic-arrow.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "object-enchant/weapon/abstract-weapon-enchanter.h"
+#include "system/angband.h"
+
+class ObjectType;
+class PlayerType;
+class ArrowEnchanter : AbstractWeaponEnchanter {
+public:
+ ArrowEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power);
+ void apply_magic() override;
+
+protected:
+ void sval_enchant() override{};
+ void give_ego_index() override{};
+ void give_high_ego_index() override{};
+ void give_cursed() override{};
+
+private:
+ PlayerType *player_ptr;
+};
diff --git a/src/object-enchant/weapon/apply-magic-weapon.cpp b/src/object-enchant/weapon/apply-magic-weapon.cpp
index 7323862df..ac4c8fb84 100644
--- a/src/object-enchant/weapon/apply-magic-weapon.cpp
+++ b/src/object-enchant/weapon/apply-magic-weapon.cpp
@@ -42,49 +42,12 @@ void WeaponEnchanter::apply_magic()
return;
}
- switch (this->o_ptr->tval) {
- case ItemKindType::BOW: {
- if (this->power > 1) {
- if ((this->power > 2) || one_in_(20)) {
- become_random_artifact(this->player_ptr, this->o_ptr, false);
- break;
- }
-
- this->o_ptr->ego_idx = get_random_ego(INVEN_BOW, true);
- }
-
- break;
- }
- case ItemKindType::BOLT:
- case ItemKindType::ARROW:
- case ItemKindType::SHOT: {
- if (this->power > 1) {
- if (this->power > 2) {
- become_random_artifact(this->player_ptr, this->o_ptr, false);
- break;
- }
-
- this->o_ptr->ego_idx = get_random_ego(INVEN_AMMO, true);
- while (one_in_(10L * this->o_ptr->dd * this->o_ptr->ds)) {
- this->o_ptr->dd++;
- }
-
- if (this->o_ptr->dd > 9) {
- this->o_ptr->dd = 9;
- }
-
- break;
+ if (this->power > 1) {
+ if ((this->power > 2) || one_in_(20)) {
+ become_random_artifact(this->player_ptr, this->o_ptr, false);
+ return;
}
- if (this->power < -1) {
- if (randint0(MAX_DEPTH) < this->level) {
- this->o_ptr->ego_idx = get_random_ego(INVEN_AMMO, false);
- }
- }
-
- break;
- }
- default:
- break;
+ this->o_ptr->ego_idx = get_random_ego(INVEN_BOW, true);
}
}
--
2.11.0