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