From b5e10dd07dbe7692a7807e4915e1298c31b70bf6 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Sun, 21 Apr 2024 22:09:19 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#3932=20cmd-magiceat.cpp=20?= =?utf8?q?=E3=81=AEBaseitem=20=E5=91=A8=E3=82=8A=E3=82=92=E6=95=B4?= =?utf8?q?=E7=90=86=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/cmd-item/cmd-magiceat.cpp | 47 +++++++++++++++++++++---------------------- src/system/baseitem-info.cpp | 5 +++++ src/system/baseitem-info.h | 1 + 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/cmd-item/cmd-magiceat.cpp b/src/cmd-item/cmd-magiceat.cpp index 806f704e2..921cd3db5 100644 --- a/src/cmd-item/cmd-magiceat.cpp +++ b/src/cmd-item/cmd-magiceat.cpp @@ -115,18 +115,18 @@ static std::optional check_magic_eater_spell_repeat(magic_eater_dat if (item.charge <= baseitems_info[lookup_baseitem_id({ ItemKindType::ROD, sval })].pval * (item.count - 1) * EATER_ROD_CHARGE) { return BaseitemKey(tval, sval); } - break; + + return std::nullopt; case ItemKindType::STAFF: case ItemKindType::WAND: if (item.charge >= EATER_CHARGE) { return BaseitemKey(tval, sval); } - break; + + return std::nullopt; default: - break; + return std::nullopt; } - - return std::nullopt; } /*! @@ -329,28 +329,27 @@ static std::optional select_magic_eater(PlayerType *player_ptr, boo col = TERM_WHITE; - if (bi_id) { - if (tval == ItemKindType::ROD) { - dummy.append( - format(_(" %-22.22s 充填:%2d/%2d%3d%%", " %-22.22s (%2d/%2d) %3d%%"), baseitem.name.data(), - item.charge ? (item.charge - 1) / (EATER_ROD_CHARGE * baseitem.pval) + 1 : 0, - item.count, chance) - .data()); - if (item.charge > baseitem.pval * (item.count - 1) * EATER_ROD_CHARGE) { - col = TERM_RED; - } - } else { - dummy.append( - format(" %-22.22s %2d/%2d %3d%%", baseitem.name.data(), (int16_t)(item.charge / EATER_CHARGE), - item.count, chance) - .data()); - if (item.charge < EATER_CHARGE) { - col = TERM_RED; - } + if (!baseitem.is_valid()) { + dummy.clear(); + c_prt(col, dummy, y1, x1); + continue; + } + + if (tval == ItemKindType::ROD) { + constexpr auto fmt = _(" %-22.22s 充填:%2d/%2d%3d%%", " %-22.22s (%2d/%2d) %3d%%"); + const auto charge = item.charge > 0 ? (item.charge - 1) / (EATER_ROD_CHARGE * baseitem.pval) + 1 : 0; + dummy.append(format(fmt, baseitem.name.data(), charge, item.count, chance)); + if (item.charge > baseitem.pval * (item.count - 1) * EATER_ROD_CHARGE) { + col = TERM_RED; } } else { - dummy.clear(); + constexpr auto fmt = " %-22.22s %2d/%2d %3d%%"; + dummy.append(format(fmt, baseitem.name.data(), (int16_t)(item.charge / EATER_CHARGE), item.count, chance)); + if (item.charge < EATER_CHARGE) { + col = TERM_RED; + } } + c_prt(col, dummy, y1, x1); } } diff --git a/src/system/baseitem-info.cpp b/src/system/baseitem-info.cpp index 6fef30acf..94d43cc27 100644 --- a/src/system/baseitem-info.cpp +++ b/src/system/baseitem-info.cpp @@ -606,6 +606,11 @@ BaseitemInfo::BaseitemInfo() { } +bool BaseitemInfo::is_valid() const +{ + return (this->idx > 0) && !this->name.empty(); +} + /*! * @brief 最初から簡易な名称が明らかなベースアイテムにその旨のフラグを立てる */ diff --git a/src/system/baseitem-info.h b/src/system/baseitem-info.h index 5f7688f71..df07aef0b 100644 --- a/src/system/baseitem-info.h +++ b/src/system/baseitem-info.h @@ -128,6 +128,7 @@ public: bool easy_know{}; /*!< ベースアイテムが初期からベース名を判断可能かどうか / This object is always known (if aware) */ RandomArtActType act_idx{}; /*!< 発動能力のID / Activative ability index */ + bool is_valid() const; void decide_easy_know(); /* @todo ここから下はk_info.txt に依存しないミュータブルなフィールド群なので、将来的に分離予定 */ -- 2.11.0