X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;ds=sidebyside;f=src%2Fcore%2Fplayer-processor.cpp;h=7782aa733d1daaa07c0d698d92d6a6557f9e2630;hb=d3573e04b85e938c2d4bb69ce5052fcfde56f41b;hp=175028afefe0cfee664e44e764a2d692a22a20c8;hpb=31c1bde8bd271b061e0b1ddc018a9442d8adfe6d;p=hengbandforosx%2Fhengbandosx.git diff --git a/src/core/player-processor.cpp b/src/core/player-processor.cpp index 175028afe..7782aa733 100644 --- a/src/core/player-processor.cpp +++ b/src/core/player-processor.cpp @@ -1,9 +1,7 @@ -#include "core/player-processor.h" +#include "core/player-processor.h" #include "action/run-execution.h" #include "action/travel-execution.h" #include "core/disturbance.h" -#include "core/player-redraw-types.h" -#include "core/player-update-types.h" #include "core/special-internal-keys.h" #include "core/speed-table.h" #include "core/stuff-handler.h" @@ -27,7 +25,6 @@ #include "monster-floor/place-monster-types.h" #include "monster-race/monster-race-hook.h" #include "monster-race/monster-race.h" -#include "monster-race/race-flags1.h" #include "monster/monster-describer.h" #include "monster/monster-flag-types.h" #include "monster/monster-list.h" @@ -50,11 +47,13 @@ #include "spell-realm/spells-hex.h" #include "spell-realm/spells-song.h" #include "status/action-setter.h" +#include "system/angband-system.h" #include "system/dungeon-info.h" #include "system/floor-type-definition.h" #include "system/grid-type-definition.h" #include "system/monster-race-info.h" #include "system/player-type-definition.h" +#include "system/redrawing-flags-updater.h" #include "term/screen-processor.h" #include "timed-effect/player-blindness.h" #include "timed-effect/player-confusion.h" @@ -80,15 +79,15 @@ static void process_fishing(PlayerType *player_ptr) auto *floor_ptr = player_ptr->current_floor_ptr; const auto wild_level = wilderness[player_ptr->wilderness_y][player_ptr->wilderness_x].level; const auto level = floor_ptr->is_in_dungeon() ? floor_ptr->dun_level : wild_level; - const auto r_idx = get_mon_num(player_ptr, 0, level, 0); + const auto r_idx = get_mon_num(player_ptr, 0, level, PM_NONE); msg_print(nullptr); if (MonsterRace(r_idx).is_valid() && one_in_(2)) { POSITION y, x; y = player_ptr->y + ddy[player_ptr->fishing_dir]; x = player_ptr->x + ddx[player_ptr->fishing_dir]; - if (place_monster_aux(player_ptr, 0, y, x, r_idx, PM_NO_KAGE)) { + if (place_specific_monster(player_ptr, 0, y, x, r_idx, PM_NO_KAGE)) { const auto m_name = monster_desc(player_ptr, &floor_ptr->m_list[floor_ptr->grid_array[y][x].m_idx], 0); - msg_format(_("%sが釣れた!", "You have a good catch!"), m_name.data()); + msg_print(_(format("%sが釣れた!", m_name.data()), "You have a good catch!")); success = true; } } @@ -127,7 +126,8 @@ void process_player(PlayerType *player_ptr) player_ptr->invoking_midnight_curse = false; } - if (player_ptr->phase_out) { + const auto &system = AngbandSystem::get_instance(); + if (system.is_phase_out()) { for (MONSTER_IDX m_idx = 1; m_idx < player_ptr->current_floor_ptr->m_max; m_idx++) { auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx]; if (!m_ptr->is_valid()) { @@ -184,7 +184,7 @@ void process_player(PlayerType *player_ptr) const auto effects = player_ptr->effects(); if (player_ptr->riding && !effects->confusion()->is_confused() && !effects->blindness()->is_blind()) { auto *m_ptr = &player_ptr->current_floor_ptr->m_list[player_ptr->riding]; - auto *r_ptr = &monraces_info[m_ptr->r_idx]; + auto *r_ptr = &m_ptr->get_monrace(); if (m_ptr->is_asleep()) { const auto m_name = monster_desc(player_ptr, m_ptr, 0); (void)set_monster_csleep(player_ptr, player_ptr->riding, 0); @@ -223,13 +223,14 @@ void process_player(PlayerType *player_ptr) set_lightspeed(player_ptr, player_ptr->lightspeed - 1, true); } + auto &rfu = RedrawingFlagsUpdater::get_instance(); if (PlayerClass(player_ptr).equals(PlayerClassType::FORCETRAINER) && get_current_ki(player_ptr)) { if (get_current_ki(player_ptr) < 40) { set_current_ki(player_ptr, true, 0); } else { set_current_ki(player_ptr, false, -40); } - player_ptr->update |= (PU_BONUS); + rfu.set_flag(StatusRecalculatingFlag::BONUS); } if (player_ptr->action == ACTION_LEARN) { @@ -244,7 +245,7 @@ void process_player(PlayerType *player_ptr) s64b_sub(&(player_ptr->csp), &(player_ptr->csp_frac), cost, cost_frac); } - player_ptr->redraw |= PR_MANA; + rfu.set_flag(MainWindowRedrawingFlag::MP); } if (PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU)) { @@ -252,13 +253,13 @@ void process_player(PlayerType *player_ptr) set_action(player_ptr, ACTION_NONE); } else { player_ptr->csp -= 2; - player_ptr->redraw |= (PR_MANA); + rfu.set_flag(MainWindowRedrawingFlag::MP); } } /*** Handle actual user input ***/ while (player_ptr->energy_need <= 0) { - player_ptr->window_flags |= PW_PLAYER; + rfu.set_flag(SubWindowRedrawingFlag::PLAYER); player_ptr->sutemi = false; player_ptr->counter = false; player_ptr->now_damaged = false; @@ -279,7 +280,7 @@ void process_player(PlayerType *player_ptr) energy.reset_player_turn(); auto is_knocked_out = effects->stun()->is_knocked_out(); auto is_paralyzed = effects->paralysis()->is_paralyzed(); - if (player_ptr->phase_out) { + if (system.is_phase_out()) { move_cursor_relative(player_ptr->y, player_ptr->x); command_cmd = SPECIAL_KEY_BUILDING; process_command(player_ptr); @@ -291,7 +292,8 @@ void process_player(PlayerType *player_ptr) if (!player_ptr->resting) { set_action(player_ptr, ACTION_NONE); } - player_ptr->redraw |= (PR_STATE); + + rfu.set_flag(MainWindowRedrawingFlag::ACTION); } energy.set_player_turn_energy(100); @@ -303,7 +305,7 @@ void process_player(PlayerType *player_ptr) travel_step(player_ptr); } else if (command_rep) { command_rep--; - player_ptr->redraw |= (PR_STATE); + rfu.set_flag(MainWindowRedrawingFlag::ACTION); handle_stuff(player_ptr); msg_flag = false; prt("", 0, 0); @@ -311,7 +313,11 @@ void process_player(PlayerType *player_ptr) } else { move_cursor_relative(player_ptr->y, player_ptr->x); - player_ptr->window_flags |= PW_MONSTER_LIST; + static constexpr auto flags = { + SubWindowRedrawingFlag::SIGHT_MONSTERS, + SubWindowRedrawingFlag::PETS, + }; + rfu.set_flags(flags); window_stuff(player_ptr); can_save = true; @@ -329,7 +335,7 @@ void process_player(PlayerType *player_ptr) } if (effects->hallucination()->is_hallucinated()) { - player_ptr->redraw |= (PR_MAP); + rfu.set_flag(MainWindowRedrawingFlag::MAP); } for (MONSTER_IDX m_idx = 1; m_idx < player_ptr->current_floor_ptr->m_max; m_idx++) { @@ -340,7 +346,7 @@ void process_player(PlayerType *player_ptr) continue; } - r_ptr = &monraces_info[m_ptr->ap_r_idx]; + r_ptr = &m_ptr->get_appearance_monrace(); // モンスターのシンボル/カラーの更新 if (m_ptr->ml && r_ptr->visual_flags.has_any_of({ MonsterVisualType::MULTI_COLOR, MonsterVisualType::SHAPECHANGER })) { @@ -367,10 +373,11 @@ void process_player(PlayerType *player_ptr) m_ptr->ml = false; update_monster(player_ptr, m_idx, false); if (player_ptr->health_who == m_idx) { - player_ptr->redraw |= (PR_HEALTH); + rfu.set_flag(MainWindowRedrawingFlag::HEALTH); } + if (player_ptr->riding == m_idx) { - player_ptr->redraw |= (PR_UHEALTH); + rfu.set_flag(MainWindowRedrawingFlag::UHEALTH); } lite_spot(player_ptr, m_ptr->fy, m_ptr->fx); @@ -386,20 +393,23 @@ void process_player(PlayerType *player_ptr) } mane_data->new_mane = false; - player_ptr->redraw |= (PR_IMITATION); + rfu.set_flag(MainWindowRedrawingFlag::IMITATION); } if (player_ptr->action == ACTION_LEARN) { auto mane_data = PlayerClass(player_ptr).get_specific_data(); mane_data->new_magic_learned = false; - player_ptr->redraw |= (PR_STATE); + rfu.set_flag(MainWindowRedrawingFlag::ACTION); } if (player_ptr->timewalk && (player_ptr->energy_need > -1000)) { - player_ptr->redraw |= (PR_MAP); - player_ptr->update |= (PU_MONSTERS); - player_ptr->window_flags |= (PW_OVERHEAD | PW_DUNGEON); - + rfu.set_flag(MainWindowRedrawingFlag::MAP); + rfu.set_flag(StatusRecalculatingFlag::MONSTER_STATUSES); + static constexpr auto flags_swrf = { + SubWindowRedrawingFlag::OVERHEAD, + SubWindowRedrawingFlag::DUNGEON, + }; + rfu.set_flags(flags_swrf); msg_print(_("「時は動きだす…」", "You feel time flowing around you once more.")); msg_print(nullptr); player_ptr->timewalk = false; @@ -414,7 +424,7 @@ void process_player(PlayerType *player_ptr) break; } - auto sniper_data = PlayerClass(player_ptr).get_specific_data(); + auto sniper_data = PlayerClass(player_ptr).get_specific_data(); if (player_ptr->energy_use && sniper_data && sniper_data->reset_concent) { reset_concentration(player_ptr, true); }