OSDN Git Service

Merge pull request #2942 from backwardsEric/sprintf-refactor-floor-save
[hengbandforosx/hengbandosx.git] / src / wizard / wizard-player-modifier.cpp
1 /*!
2  * @brief プレイヤー属性を変更するデバッグコマンド
3  * @date 2021/03/07
4  */
5
6 #include "wizard/wizard-player-modifier.h"
7 #include "core/asking-player.h"
8 #include "io/input-key-requester.h"
9 #include "mutation/mutation-investor-remover.h"
10 #include "player-info/self-info.h"
11 #include "spell/spells-status.h"
12 #include "system/player-type-definition.h"
13 #include "term/screen-processor.h"
14 #include "util/int-char-converter.h"
15 #include "view/display-messages.h"
16 #include "wizard/wizard-special-process.h"
17 #include <array>
18 #include <sstream>
19 #include <string>
20 #include <tuple>
21 #include <vector>
22
23 /*!
24  * @brief プレイヤー設定コマンド一覧表
25  */
26 constexpr std::array wizard_player_modifier_menu_table = {
27     std::make_tuple('r', _("種族変更", "Change race")),
28     std::make_tuple('c', _("職業変更", "Change class")),
29     std::make_tuple('R', _("領域変更", "Change realms")),
30     std::make_tuple('e', _("能力変更", "Change status")),
31     std::make_tuple('k', _("自己分析", "Self knowledge")),
32     std::make_tuple('l', _("ライフレート変更", "Set new life rate")),
33     std::make_tuple('m', _("突然変異", "Get mutation")),
34     std::make_tuple('a', _("属性表示", "Print your alignment")),
35 };
36
37 /*!
38  * @brief プレイヤー設定コマンドの一覧を表示する
39  */
40 void display_wizard_player_modifier_menu()
41 {
42     for (auto y = 1U; y <= wizard_player_modifier_menu_table.size(); y++) {
43         term_erase(14, y, 64);
44     }
45
46     int r = 1;
47     int c = 15;
48     for (const auto &[symbol, desc] : wizard_player_modifier_menu_table) {
49         std::stringstream ss;
50         ss << symbol << ") " << desc;
51         put_str(ss.str().data(), r++, c);
52     }
53 }
54
55 /*!
56  * @brief プレイヤー設定コマンドの入力を受け付ける
57  * @param player_ptr プレイヤーの情報へのポインタ
58  */
59 void wizard_player_modifier(PlayerType *player_ptr)
60 {
61     screen_save();
62     display_wizard_player_modifier_menu();
63
64     char cmd;
65     get_com("Player Command: ", &cmd, false);
66     screen_load();
67
68     switch (cmd) {
69     case ESCAPE:
70     case ' ':
71     case '\n':
72     case '\r':
73         break;
74     case 'a':
75         msg_format("Your alignment is %d.", player_ptr->alignment);
76         break;
77     case 'c':
78         wiz_reset_class(player_ptr);
79         break;
80     case 'e':
81         wiz_change_status(player_ptr);
82         break;
83     case 'k':
84         self_knowledge(player_ptr);
85         break;
86     case 'm':
87         (void)gain_mutation(player_ptr, command_arg);
88         break;
89     case 'n':
90         roll_hitdice(player_ptr, i2enum<spell_operation>(SPOP_DISPLAY_MES | SPOP_DEBUG));
91         break;
92     case 'r':
93         wiz_reset_race(player_ptr);
94         break;
95     case 'R':
96         wiz_reset_realms(player_ptr);
97         break;
98     default:
99         msg_print("That is not a valid debug command.");
100         break;
101     }
102 }