#include "cmd-io/cmd-diary.h"
-#include "cmd-io/diary-subtitle-table.h"
#include "core/asking-player.h"
#include "core/show-file.h"
#include "game-option/play-record-options.h"
#include "util/int-char-converter.h"
#include "view/display-messages.h"
#include "world/world.h"
-#include <span>
#include <sstream>
#include <string>
/*!
- * @brief 日記のサブタイトルの候補一覧を取得する
- *
- * 候補一覧の先頭は「最高の肉体を求めて」、末尾は「最高の頭脳を求めて」で
- * あるため、プレイヤーの職業に従い範囲を決定する。
- *
- * @return 候補一覧を参照するstd::spanオブジェクト
- */
-static auto get_subtitle_candidates(PlayerType *player_ptr)
-{
- std::span<const std::string> candidates(diary_subtitles);
- const auto max = diary_subtitles.size();
-
- PlayerClass pc(player_ptr);
-
- if (pc.is_tough()) {
- return candidates.subspan(0, max - 1);
- }
-
- if (pc.is_wizard()) {
- return candidates.subspan(1);
- }
-
- return candidates.subspan(1, max - 2);
-}
-
-/*!
* @brief 日記のタイトル表記と内容出力
* @param player_ptr プレイヤーへの参照ポインタ
*/
static void display_diary(PlayerType *player_ptr)
{
- const auto subtitle_candidates = get_subtitle_candidates(player_ptr);
+ const auto subtitle_candidates = PlayerClass(player_ptr).get_subtitle_candidates();
const auto choice = Rand_external(subtitle_candidates.size());
const auto &subtitle = subtitle_candidates[choice];
#ifdef JP
* @details PlayerRaceからPlayerClassへの依存はあるが、逆は依存させないこと.
*/
#include "player-base/player-class.h"
+#include "cmd-io/diary-subtitle-table.h"
#include "core/player-redraw-types.h"
#include "inventory/inventory-slot-types.h"
#include "mind/mind-elementalist.h"
has_ninja_speed_sub |= can_attack_with_sub_hand(this->player_ptr);
return has_ninja_speed_main && has_ninja_speed_sub;
}
+
+/*!
+ * @brief 日記のサブタイトルの候補一覧を取得する
+ *
+ * 候補一覧の先頭は「最高の肉体を求めて」、末尾は「最高の頭脳を求めて」で
+ * あるため、プレイヤーの職業に従い範囲を決定する。
+ *
+ * @return 候補一覧を参照するstd::spanオブジェクト
+ */
+std::span<const std::string> PlayerClass::get_subtitle_candidates() const
+{
+ static const std::span<const std::string> candidates(diary_subtitles);
+ const auto max = diary_subtitles.size();
+ if (this->is_tough()) {
+ return candidates.subspan(0, max - 1);
+ }
+
+ if (this->is_wizard()) {
+ return candidates.subspan(1);
+ }
+
+ return candidates.subspan(1, max - 2);
+}
#pragma once
-#include "system/angband.h"
-
#include "object-enchant/tr-flags.h"
#include "system/player-type-definition.h"
-
#include <initializer_list>
#include <memory>
+#include <span>
#include <variant>
enum class SamuraiStanceType : uint8_t;
std::shared_ptr<T> get_specific_data() const;
bool has_ninja_speed() const;
+ std::span<const std::string> get_subtitle_candidates() const;
private:
PlayerType *player_ptr;