From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Sat, 18 Sep 2021 06:07:10 +0000 (+0900) Subject: [Refactor] #1498 Defined get_expr() to divide View and Model X-Git-Tag: vmacos3.0.0-alpha52~97^2^2~3 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=310826f0ee7c601080a0a617e5df4837adb8564f;p=hengbandforosx%2Fhengbandosx.git [Refactor] #1498 Defined get_expr() to divide View and Model --- diff --git a/src/timed-effect/player-stun.cpp b/src/timed-effect/player-stun.cpp index fa086f112..166ae734a 100644 --- a/src/timed-effect/player-stun.cpp +++ b/src/timed-effect/player-stun.cpp @@ -96,6 +96,22 @@ bool PlayerStun::is_stunned() const return this->get_rank() > StunRank::NONE; } +std::tuple PlayerStun::get_expr() const +{ + switch (this->get_rank()) { + case StunRank::NONE: // dummy. + return std::make_tuple(TERM_WHITE, " "); + case StunRank::NORMAL: + return std::make_tuple(TERM_ORANGE, _("朦朧 ", "Stun ")); + case StunRank::HARD: + return std::make_tuple(TERM_ORANGE, _("ひどく朦朧 ", "Heavy stun ")); + case StunRank::UNCONSCIOUS: + return std::make_tuple(TERM_RED, _("意識不明瞭 ", "Knocked out ")); + default: + throw("Invalid stun rank is specified!"); + } +} + void PlayerStun::set(short value) { this->stun = value; diff --git a/src/timed-effect/player-stun.h b/src/timed-effect/player-stun.h index a055e7fff..477b04051 100644 --- a/src/timed-effect/player-stun.h +++ b/src/timed-effect/player-stun.h @@ -1,6 +1,8 @@ #pragma once +#include "term/term-color-types.h" #include +#include enum class StunRank { NONE = 0, @@ -21,6 +23,7 @@ public: int decrease_chance() const; short decrease_damage() const; bool is_stunned() const; + std::tuple get_expr() const; void reset(); void set(short value); diff --git a/src/window/main-window-stat-poster.cpp b/src/window/main-window-stat-poster.cpp index b19d7203a..120fd70b9 100644 --- a/src/window/main-window-stat-poster.cpp +++ b/src/window/main-window-stat-poster.cpp @@ -107,27 +107,17 @@ void print_cut(player_type *player_ptr) /*! * @brief プレイヤーの朦朧状態を表示する * @param player_ptr プレイヤーへの参照ポインタ - * @todo TERM値のenumと文字列はPlayerStunの中へ入れ、ここは可能な限り軽くする. */ void print_stun(player_type *player_ptr) { - int s = player_ptr->effects()->stun()->current(); - if (s > 100) { - c_put_str(TERM_RED, _("意識不明瞭 ", "Knocked out "), ROW_STUN, COL_STUN); + auto player_stun = player_ptr->effects()->stun(); + if (!player_stun->is_stunned()) { + put_str(" ", ROW_STUN, COL_STUN); return; } - if (s > 50) { - c_put_str(TERM_ORANGE, _("ひどく朦朧 ", "Heavy stun "), ROW_STUN, COL_STUN); - return; - } - - if (s) { - c_put_str(TERM_ORANGE, _("朦朧 ", "Stun "), ROW_STUN, COL_STUN); - return; - } - - put_str(" ", ROW_STUN, COL_STUN); + auto [color, stat] = player_stun->get_expr(); + c_put_str(color, stat.data(), ROW_STUN, COL_STUN); } /*!