OSDN Git Service

Merge pull request #2335 from sikabane-works/release/3.0.0Alpha54
[hengbandforosx/hengbandosx.git] / src / cmd-io / cmd-floor.cpp
1 #include "cmd-io/cmd-floor.h"
2 #include "core/asking-player.h"
3 #include "core/player-redraw-types.h"
4 #include "core/player-update-types.h"
5 #include "core/stuff-handler.h"
6 #include "core/window-redrawer.h"
7 #include "floor/geometry.h"
8 #include "game-option/keymap-directory-getter.h"
9 #include "io/cursor.h"
10 #include "io/screen-util.h"
11 #include "main/sound-of-music.h"
12 #include "system/player-type-definition.h"
13 #include "target/target-checker.h"
14 #include "target/target-setter.h"
15 #include "target/target-types.h"
16 #include "util/bit-flags-calculator.h"
17 #include "view/display-messages.h"
18 #include "window/main-window-util.h"
19
20 /*!
21  * @brief ターゲットを設定するコマンドのメインルーチン
22  * Target command
23  */
24 void do_cmd_target(PlayerType *player_ptr)
25 {
26     if (player_ptr->wild_mode) {
27         return;
28     }
29
30     if (target_set(player_ptr, TARGET_KILL)) {
31         msg_print(_("ターゲット決定。", "Target Selected."));
32     } else {
33         msg_print(_("ターゲット解除。", "Target Aborted."));
34     }
35 }
36
37 /*!
38  * @brief 周囲を見渡すコマンドのメインルーチン
39  * Look command
40  */
41 void do_cmd_look(PlayerType *player_ptr)
42 {
43     set_bits(player_ptr->window_flags, PW_MONSTER_LIST | PW_FLOOR_ITEM_LIST);
44     handle_stuff(player_ptr);
45     if (target_set(player_ptr, TARGET_LOOK)) {
46         msg_print(_("ターゲット決定。", "Target Selected."));
47     }
48 }
49
50 /*!
51  * @brief 位置を確認するコマンドのメインルーチン
52  * Allow the player to examine other sectors on the map
53  */
54 void do_cmd_locate(PlayerType *player_ptr)
55 {
56     DIRECTION dir;
57     POSITION y1, x1;
58     GAME_TEXT tmp_val[80];
59     GAME_TEXT out_val[MAX_MONSTER_NAME];
60     TERM_LEN wid, hgt;
61     get_screen_size(&wid, &hgt);
62     POSITION y2 = y1 = panel_row_min;
63     POSITION x2 = x1 = panel_col_min;
64     while (true) {
65         if ((y2 == y1) && (x2 == x1)) {
66             strcpy(tmp_val, _("真上", "\0"));
67         } else {
68             sprintf(tmp_val, "%s%s", ((y2 < y1) ? _("北", " North") : (y2 > y1) ? _("南", " South")
69                                                                                 : ""),
70                 ((x2 < x1) ? _("西", " West") : (x2 > x1) ? _("東", " East")
71                                                           : ""));
72         }
73
74         sprintf(out_val, _("マップ位置 [%d(%02d),%d(%02d)] (プレイヤーの%s)  方向?", "Map sector [%d(%02d),%d(%02d)], which is%s your sector.  Direction?"),
75             y2 / (hgt / 2), y2 % (hgt / 2), x2 / (wid / 2), x2 % (wid / 2), tmp_val);
76
77         dir = 0;
78         while (!dir) {
79             char command;
80             if (!get_com(out_val, &command, true)) {
81                 break;
82             }
83
84             dir = get_keymap_dir(command);
85             if (!dir) {
86                 bell();
87             }
88         }
89
90         if (!dir) {
91             break;
92         }
93
94         if (change_panel(player_ptr, ddy[dir], ddx[dir])) {
95             y2 = panel_row_min;
96             x2 = panel_col_min;
97         }
98     }
99
100     verify_panel(player_ptr);
101     player_ptr->update |= PU_MONSTERS;
102     player_ptr->redraw |= PR_MAP;
103     player_ptr->window_flags |= PW_OVERHEAD | PW_DUNGEON;
104     handle_stuff(player_ptr);
105 }