OSDN Git Service

[Refactor] #3286 Removed player-redraw-types.h
[hengbandforosx/hengbandosx.git] / src / cmd-visual / cmd-draw.cpp
index c4a03ee..62404b3 100644 (file)
@@ -1,29 +1,30 @@
 #include "cmd-visual/cmd-draw.h"
 #include "core/asking-player.h"
-#include "core/player-redraw-types.h"
-#include "core/player-update-types.h"
 #include "core/stuff-handler.h"
 #include "core/window-redrawer.h"
 #include "io/files-util.h"
 #include "io/input-key-acceptor.h"
 #include "main/sound-of-music.h"
-#include "player/player-race-types.h"
+#include "player-base/player-race.h"
+#include "player-info/race-types.h"
 #include "player/process-name.h"
 #include "racial/racial-android.h"
 #include "system/player-type-definition.h"
+#include "system/redrawing-flags-updater.h"
 #include "term/gameterm.h"
 #include "term/screen-processor.h"
 #include "term/term-color-types.h"
+#include "term/z-form.h"
 #include "util/int-char-converter.h"
 #include "util/string-processor.h"
 #include "view/display-messages.h"
-#include "view/display-player.h" // 暫定。後で消す.
+#include "view/display-player.h"
 #include "world/world.h"
 
 /*!
  * @brief 画面を再描画するコマンドのメインルーチン
  * Hack -- redraw the screen
- * @param creature_ptr プレーヤーへの参照ポインタ
+ * @param player_ptr プレイヤーへの参照ポインタ
  * @details
  * <pre>
  * This command performs various low level updates, clears all the "extra"
  * the "TERM_XTRA_REACT" hook before redrawing the windows.
  * </pre>
  */
-void do_cmd_redraw(player_type *creature_ptr)
+void do_cmd_redraw(PlayerType *player_ptr)
 {
-       term_xtra(TERM_XTRA_REACT, 0);
+    term_xtra(TERM_XTRA_REACT, 0);
 
-       creature_ptr->update |= (PU_COMBINE | PU_REORDER);
-       creature_ptr->update |= (PU_TORCH);
-       creature_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
-       creature_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
-       creature_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
-       creature_ptr->update |= (PU_MONSTERS);
+    auto &rfu = RedrawingFlagsUpdater::get_instance();
+    const auto flags_srf = {
+        StatusRedrawingFlag::COMBINATION,
+        StatusRedrawingFlag::REORDER,
+        StatusRedrawingFlag::TORCH,
+        StatusRedrawingFlag::BONUS,
+        StatusRedrawingFlag::HP,
+        StatusRedrawingFlag::MP,
+        StatusRedrawingFlag::SPELLS,
+        StatusRedrawingFlag::UN_VIEW,
+        StatusRedrawingFlag::UN_LITE,
+        StatusRedrawingFlag::VIEW,
+        StatusRedrawingFlag::LITE,
+        StatusRedrawingFlag::MONSTER_LITE,
+        StatusRedrawingFlag::MONSTER_STATUSES,
+    };
+    rfu.set_flags(flags_srf);
+    const auto flags_mwrf = {
+        MainWindowRedrawingFlag::WIPE,
+        MainWindowRedrawingFlag::BASIC,
+        MainWindowRedrawingFlag::EXTRA,
+        MainWindowRedrawingFlag::EQUIPPY,
+        MainWindowRedrawingFlag::MAP,
+    };
+    rfu.set_flags(flags_mwrf);
+    player_ptr->window_flags |= (PW_INVENTORY | PW_EQUIPMENT | PW_SPELL | PW_PLAYER);
+    player_ptr->window_flags |= (PW_MESSAGE | PW_OVERHEAD | PW_DUNGEON | PW_MONSTER_LORE | PW_ITEM_KNOWLEDGTE);
+    update_playtime();
+    handle_stuff(player_ptr);
+    if (PlayerRace(player_ptr).equals(PlayerRaceType::ANDROID)) {
+        calc_android_exp(player_ptr);
+    }
 
-       creature_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
+    term_type *old = game_term;
+    for (auto i = 0U; i < angband_terms.size(); ++i) {
+        if (!angband_terms[i]) {
+            continue;
+        }
 
-       creature_ptr->window_flags |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER);
-       creature_ptr->window_flags |= (PW_MESSAGE | PW_OVERHEAD | PW_DUNGEON | PW_MONSTER | PW_OBJECT);
-
-       update_playtime();
-       handle_stuff(creature_ptr);
-       if (creature_ptr->prace == player_race_type::ANDROID) calc_android_exp(creature_ptr);
-
-       term_type *old = Term;
-       for (int j = 0; j < 8; j++)
-       {
-               if (!angband_term[j]) continue;
-
-               term_activate(angband_term[j]);
-               term_redraw();
-               term_fresh();
-               term_activate(old);
-       }
+        term_activate(angband_terms[i]);
+        term_redraw();
+        term_fresh();
+        term_activate(old);
+    }
 }
 
-
 /*!
  * @brief プレイヤーのステータス表示
  */
-void do_cmd_player_status(player_type *creature_ptr)
+void do_cmd_player_status(PlayerType *player_ptr)
 {
-       int mode = 0;
-       char tmp[160];
-       screen_save();
-       while (true)
-       {
-               update_playtime();
-               display_player(creature_ptr, mode);
+    int mode = 0;
+    char tmp[160];
+    screen_save();
+    while (true) {
+        TermCenteredOffsetSetter tcos(MAIN_TERM_MIN_COLS, MAIN_TERM_MIN_ROWS);
 
-               if (mode == 5)
-               {
-                       mode = 0;
-                       display_player(creature_ptr, mode);
-               }
+        update_playtime();
+        (void)display_player(player_ptr, mode);
 
-               term_putstr(2, 23, -1, TERM_WHITE,
-                       _("['c'で名前変更, 'f'でファイルへ書出, 'h'でモード変更, ESCで終了]", "['c' to change name, 'f' to file, 'h' to change mode, or ESC]"));
-               char c = inkey();
-               if (c == ESCAPE) break;
+        if (mode == 5) {
+            mode = 0;
+            (void)display_player(player_ptr, mode);
+        }
 
-               if (c == 'c')
-               {
-                       get_name(creature_ptr);
-                       process_player_name(creature_ptr);
-               }
-               else if (c == 'f')
-               {
-                       sprintf(tmp, "%s.txt", creature_ptr->base_name);
-                       if (get_string(_("ファイル名: ", "File name: "), tmp, 80))
-                       {
-                               if (tmp[0] && (tmp[0] != ' '))
-                               {
-                                       update_playtime();
-                                       file_character(creature_ptr, tmp, display_player);
-                               }
-                       }
-               }
-               else if (c == 'h')
-               {
-                       mode++;
-               }
-               else
-               {
-                       bell();
-               }
+        term_putstr(2, 23, -1, TERM_WHITE,
+            _("['c'で名前変更, 'f'でファイルへ書出, 'h'でモード変更, ESCで終了]", "['c' to change name, 'f' to file, 'h' to change mode, or ESC]"));
+        char c = inkey();
+        if (c == ESCAPE) {
+            break;
+        }
 
-               msg_erase();
-       }
+        if (c == 'c') {
+            get_name(player_ptr);
+            process_player_name(player_ptr);
+        } else if (c == 'f') {
+            strnfmt(tmp, sizeof(tmp), "%s.txt", player_ptr->base_name);
+            if (get_string(_("ファイル名: ", "File name: "), tmp, 80)) {
+                if (tmp[0] && (tmp[0] != ' ')) {
+                    update_playtime();
+                    file_character(player_ptr, tmp);
+                }
+            }
+        } else if (c == 'h') {
+            mode++;
+        } else {
+            bell();
+        }
 
-       screen_load();
-       creature_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
-       handle_stuff(creature_ptr);
-}
+        msg_erase();
+    }
 
+    screen_load();
+    auto &rfu = RedrawingFlagsUpdater::get_instance();
+    const auto flags_mwrf = {
+        MainWindowRedrawingFlag::WIPE,
+        MainWindowRedrawingFlag::BASIC,
+        MainWindowRedrawingFlag::EXTRA,
+        MainWindowRedrawingFlag::EQUIPPY,
+        MainWindowRedrawingFlag::MAP,
+    };
+    rfu.set_flags(flags_mwrf);
+    handle_stuff(player_ptr);
+}
 
 /*!
  * @brief 最近表示されたメッセージを再表示するコマンドのメインルーチン
@@ -133,10 +151,9 @@ void do_cmd_player_status(player_type *creature_ptr)
  */
 void do_cmd_message_one(void)
 {
-       prt(format("> %s", message_str(0)), 0, 0);
+    prt(format("> %s", message_str(0)), 0, 0);
 }
 
-
 /*!
  * @brief メッセージのログを表示するコマンドのメインルーチン
  * Recall the most recent message
@@ -159,127 +176,123 @@ void do_cmd_message_one(void)
  */
 void do_cmd_messages(int num_now)
 {
-       char shower_str[81];
-       char finder_str[81];
-       char back_str[81];
-       concptr shower = NULL;
-       int wid, hgt;
-       term_get_size(&wid, &hgt);
-       int num_lines = hgt - 4;
-       strcpy(finder_str, "");
-       strcpy(shower_str, "");
-       int n = message_num();
-       int i = 0;
-       screen_save();
-       term_clear();
-       while (true)
-       {
-               int j;
-               int skey;
-               for (j = 0; (j < num_lines) && (i + j < n); j++)
-               {
-                       concptr msg = message_str(i + j);
-                       c_prt((i + j < num_now ? TERM_WHITE : TERM_SLATE), msg, num_lines + 1 - j, 0);
-                       if (!shower || !shower[0]) continue;
+    char shower_str[81];
+    char finder_str[81];
+    char back_str[81];
+    concptr shower = nullptr;
+    int wid, hgt;
+    term_get_size(&wid, &hgt);
+    int num_lines = hgt - 4;
+    strcpy(finder_str, "");
+    strcpy(shower_str, "");
+    int n = message_num();
+    int i = 0;
+    screen_save();
+    term_clear();
+    while (true) {
+        int j;
+        int skey;
+        for (j = 0; (j < num_lines) && (i + j < n); j++) {
+            concptr msg = message_str(i + j);
+            c_prt((i + j < num_now ? TERM_WHITE : TERM_SLATE), msg, num_lines + 1 - j, 0);
+            if (!shower || !shower[0]) {
+                continue;
+            }
 
-                       concptr str = msg;
-                       while ((str = angband_strstr(str, shower)) != NULL)
-                       {
-                               int len = strlen(shower);
-                               term_putstr(str - msg, num_lines + 1 - j, len, TERM_YELLOW, shower);
-                               str += len;
-                       }
-               }
+            concptr str = msg;
+            while ((str = angband_strstr(str, shower)) != nullptr) {
+                int len = strlen(shower);
+                term_putstr(str - msg, num_lines + 1 - j, len, TERM_YELLOW, shower);
+                str += len;
+            }
+        }
 
-               for (; j < num_lines; j++)
-                       term_erase(0, num_lines + 1 - j, 255);
+        for (; j < num_lines; j++) {
+            term_erase(0, num_lines + 1 - j, 255);
+        }
 
-               prt(format(_("以前のメッセージ %d-%d 全部で(%d)", "Message Recall (%d-%d of %d)"),
-                       i, i + j - 1, n), 0, 0);
-               prt(_("[ 'p' で更に古いもの, 'n' で更に新しいもの, '/' で検索, ESC で中断 ]",
-                       "[Press 'p' for older, 'n' for newer, ..., or ESCAPE]"), hgt - 1, 0);
-               skey = inkey_special(true);
-               if (skey == ESCAPE) break;
+        prt(format(_("以前のメッセージ %d-%d 全部で(%d)", "Message Recall (%d-%d of %d)"), i, i + j - 1, n), 0, 0);
+        prt(_("[ 'p' で更に古いもの, 'n' で更に新しいもの, '/' で検索, ESC で中断 ]", "[Press 'p' for older, 'n' for newer, ..., or ESCAPE]"), hgt - 1, 0);
+        skey = inkey_special(true);
+        if (skey == ESCAPE) {
+            break;
+        }
 
-               j = i;
-               switch (skey)
-               {
-               case '=':
-                       prt(_("強調: ", "Show: "), hgt - 1, 0);
-                       strcpy(back_str, shower_str);
-                       if (askfor(shower_str, 80))
-                               shower = shower_str[0] ? shower_str : NULL;
-                       else
-                               strcpy(shower_str, back_str);
+        j = i;
+        switch (skey) {
+        case '=':
+            prt(_("強調: ", "Show: "), hgt - 1, 0);
+            strcpy(back_str, shower_str);
+            if (askfor(shower_str, 80)) {
+                shower = shower_str[0] ? shower_str : nullptr;
+            } else {
+                strcpy(shower_str, back_str);
+            }
 
-                       continue;
-               case '/':
-               case KTRL('s'):
-               {
-                       prt(_("検索: ", "Find: "), hgt - 1, 0);
-                       strcpy(back_str, finder_str);
-                       if (!askfor(finder_str, 80))
-                       {
-                               strcpy(finder_str, back_str);
-                               continue;
-                       }
-                       else if (!finder_str[0])
-                       {
-                               shower = NULL;
-                               continue;
-                       }
+            continue;
+        case '/':
+        case KTRL('s'): {
+            prt(_("検索: ", "Find: "), hgt - 1, 0);
+            strcpy(back_str, finder_str);
+            if (!askfor(finder_str, 80)) {
+                strcpy(finder_str, back_str);
+                continue;
+            } else if (!finder_str[0]) {
+                shower = nullptr;
+                continue;
+            }
 
-                       shower = finder_str;
-                       for (int z = i + 1; z < n; z++)
-                       {
-                               concptr msg = message_str(z);
-                               if (angband_strstr(msg, finder_str))
-                               {
-                                       i = z;
-                                       break;
-                               }
-                       }
-               }
+            shower = finder_str;
+            for (int z = i + 1; z < n; z++) {
+                concptr msg = message_str(z);
+                if (angband_strstr(msg, finder_str)) {
+                    i = z;
+                    break;
+                }
+            }
+        }
 
-               break;
+        break;
 
-               case SKEY_TOP:
-                       i = n - num_lines;
-                       break;
-               case SKEY_BOTTOM:
-                       i = 0;
-                       break;
-               case '8':
-               case SKEY_UP:
-               case '\n':
-               case '\r':
-                       i = MIN(i + 1, n - num_lines);
-                       break;
-               case '+':
-                       i = MIN(i + 10, n - num_lines);
-                       break;
-               case 'p':
-               case KTRL('P'):
-               case ' ':
-               case SKEY_PGUP:
-                       i = MIN(i + num_lines, n - num_lines);
-                       break;
-               case 'n':
-               case KTRL('N'):
-               case SKEY_PGDOWN:
-                       i = MAX(0, i - num_lines);
-                       break;
-               case '-':
-                       i = MAX(0, i - 10);
-                       break;
-               case '2':
-               case SKEY_DOWN:
-                       i = MAX(0, i - 1);
-                       break;
-               }
+        case SKEY_TOP:
+            i = n - num_lines;
+            break;
+        case SKEY_BOTTOM:
+            i = 0;
+            break;
+        case '8':
+        case SKEY_UP:
+        case '\n':
+        case '\r':
+            i = std::min(i + 1, n - num_lines);
+            break;
+        case '+':
+            i = std::min(i + 10, n - num_lines);
+            break;
+        case 'p':
+        case KTRL('P'):
+        case ' ':
+        case SKEY_PGUP:
+            i = std::min(i + num_lines, n - num_lines);
+            break;
+        case 'n':
+        case KTRL('N'):
+        case SKEY_PGDOWN:
+            i = std::max(0, i - num_lines);
+            break;
+        case '-':
+            i = std::max(0, i - 10);
+            break;
+        case '2':
+        case SKEY_DOWN:
+            i = std::max(0, i - 1);
+            break;
+        }
 
-               if (i == j) bell();
-       }
+        if (i == j) {
+            bell();
+        }
+    }
 
-       screen_load();
+    screen_load();
 }