OSDN Git Service

[Fix] #2363 シンボルエディタのシンボルが非表示になることがある不具合を修正した
[hengbandforosx/hengbandosx.git] / src / io-dump / player-status-dump.cpp
1 #include "io-dump/player-status-dump.h"
2 #include "view/display-player.h"
3
4 /*!
5  * @brief 画面番号を指定してダンプする
6  * @param player_ptr プレイヤーへの参照ポインタ
7  * @param fff ファイルポインタ
8  * @param display_player 画面表示へのコールバック
9  * @param mode 表示モード
10  * @param start_y ダンプの開始行数
11  * @param tmp_end_y ダンプの終了行数 (補正前)
12  * @param change_color バッファへ詰める文字の変更有無
13  * @details モンスター名の長さによっては固定長だとはみ出す可能性があるので、適切に終了行数を調整する.
14  */
15 static void dump_player_status_with_screen_num(PlayerType *player_ptr, FILE *fff,
16     const int mode, const TERM_LEN start_y, const TERM_LEN tmp_end_y, const bool change_color)
17 {
18     char buf[1024]{};
19     auto num_lines = display_player(player_ptr, mode);
20     auto end_y = tmp_end_y + num_lines.value_or(0);
21     for (auto y = start_y; y < end_y; y++) {
22         TERM_LEN x;
23         for (x = 0; x < 79; x++) {
24             TERM_COLOR a;
25             char c;
26             (void)(term_what(x, y, &a, &c));
27             if (!change_color) {
28                 buf[x] = c;
29                 continue;
30             }
31
32             buf[x] = a < 128 ? c : ' ';
33         }
34
35         buf[x] = '\0';
36         while ((x > 0) && (buf[x - 1] == ' ')) {
37             buf[--x] = '\0';
38         }
39
40         fprintf(fff, "%s\n", buf);
41     }
42 }
43
44 /*!
45  * @brief プレイヤーのステータス表示をファイルにダンプする
46  * @param player_ptr プレイヤーへの参照ポインタ
47  * @param fff ファイルポインタ
48  */
49 void dump_aux_player_status(PlayerType *player_ptr, FILE *fff)
50 {
51     dump_player_status_with_screen_num(player_ptr, fff, 0, 1, 22, false);
52     dump_player_status_with_screen_num(player_ptr, fff, 1, 10, 17, false);
53     fprintf(fff, "\n");
54     dump_player_status_with_screen_num(player_ptr, fff, 2, 2, 22, true);
55     fprintf(fff, "\n");
56     dump_player_status_with_screen_num(player_ptr, fff, 3, 1, 18, true);
57     fprintf(fff, "\n");
58     dump_player_status_with_screen_num(player_ptr, fff, 4, 1, 19, true);
59     fprintf(fff, "\n");
60 }