OSDN Git Service

[Refactor] #3503 cmd-macro.cpp/cmd-dump.cpp における長大なif-elseif 文の塊をswitch/case 文に改めた
[hengbandforosx/hengbandosx.git] / src / cmd-visual / cmd-map.cpp
1 #include "cmd-visual/cmd-map.h"
2 #include "autopick/autopick-methods-table.h"
3 #include "autopick/autopick-util.h"
4 #include "io/input-key-acceptor.h"
5 #include "system/player-type-definition.h"
6 #include "term/screen-processor.h"
7 #include "view/display-map.h"
8 #include "window/main-window-util.h"
9 #include <string_view>
10
11 /*
12  * Display a "small-scale" map of the dungeon for the player
13  *
14  * Currently, the "player" is displayed on the map.
15  */
16 void do_cmd_view_map(PlayerType *player_ptr)
17 {
18     screen_save();
19     prt(_("お待ち下さい...", "Please wait..."), 0, 0);
20     term_fresh();
21     term_clear();
22     display_autopick = 0;
23
24     int cy, cx;
25     display_map(player_ptr, &cy, &cx);
26     if (autopick_list.empty() || player_ptr->wild_mode) {
27         int wid, hgt;
28         term_get_size(&wid, &hgt);
29         constexpr auto msg = _("何かキーを押すとゲームに戻ります", "Hit any key to continue");
30         const auto center_x = (wid - std::string_view(msg).length()) / 2;
31         put_str(msg, hgt - 1, center_x);
32         move_cursor(cy, cx);
33         inkey(true);
34         screen_load();
35         return;
36     }
37
38     display_autopick = ITEM_DISPLAY;
39     while (true) {
40         int wid, hgt;
41         term_get_size(&wid, &hgt);
42         int row_message = hgt - 1;
43         put_str(_("何かキーを押してください('M':拾う 'N':放置 'D':M+N 'K':壊すアイテムを表示)",
44                     " Hit M, N(for ~), K(for !), or D(same as M+N) to display auto-picker items."),
45             row_message, 1);
46         move_cursor(cy, cx);
47         int i = inkey(true);
48         byte flag;
49         if ('M' == i) {
50             flag = (DO_AUTOPICK | DO_QUERY_AUTOPICK);
51         } else if ('N' == i) {
52             flag = DONT_AUTOPICK;
53         } else if ('K' == i) {
54             flag = DO_AUTODESTROY;
55         } else if ('D' == i) {
56             flag = (DO_AUTOPICK | DO_QUERY_AUTOPICK | DONT_AUTOPICK);
57         } else {
58             break;
59         }
60
61         term_fresh();
62         if (~display_autopick & flag) {
63             display_autopick |= flag;
64         } else {
65             display_autopick &= ~flag;
66         }
67
68         display_map(player_ptr, &cy, &cx);
69     }
70
71     display_autopick = 0;
72     screen_load();
73 }