From 37e39def1535880ec5054ca9b481721860f66212 Mon Sep 17 00:00:00 2001 From: Hourier Date: Mon, 17 Feb 2020 22:15:22 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#40030=20process=5Fmonsters()=20?= =?utf8?q?=E3=81=8B=E3=82=89sweep=5Fmonster=5Fprocess()=20=E3=82=92?= =?utf8?q?=E5=88=86=E9=9B=A2=20/=20Separated=20sweep=5Fmonster=5Fprocess()?= =?utf8?q?=20from=20process=5Fmonsters()?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/monster-process.c | 83 +++++++++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/src/monster-process.c b/src/monster-process.c index 61080323a..f177a1f58 100644 --- a/src/monster-process.c +++ b/src/monster-process.c @@ -120,6 +120,7 @@ void monster_pickup_object(player_type *target_ptr, turn_flags *turn_flags_ptr, bool process_monster_fear(player_type *target_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx); void save_old_race_flags(player_type *target_ptr, old_race_flags *old_race_flags_ptr); +void sweep_monster_process(player_type *target_ptr); bool decide_process_continue(player_type *target_ptr, monster_type *m_ptr); SPEED decide_monster_speed(player_type *target_ptr, monster_type *m_ptr, int monster_number); void update_player_window(player_type *target_ptr, old_race_flags *old_race_flags_ptr); @@ -2644,42 +2645,7 @@ void process_monsters(player_type *target_ptr) MONRACE_IDX old_monster_race_idx = target_ptr->monster_race_idx; save_old_race_flags(target_ptr, old_race_flags_ptr); - - for (MONSTER_IDX i = floor_ptr->m_max - 1; i >= 1; i--) - { - monster_type *m_ptr; - monster_race *r_ptr; - m_ptr = &floor_ptr->m_list[i]; - r_ptr = &r_info[m_ptr->r_idx]; - - if (target_ptr->leaving) break; - if (!monster_is_valid(m_ptr)) continue; - if (target_ptr->wild_mode) continue; - - if (m_ptr->mflag & MFLAG_BORN) - { - m_ptr->mflag &= ~(MFLAG_BORN); - continue; - } - - if (m_ptr->cdis >= AAF_LIMIT) continue; - if (!decide_process_continue(target_ptr, m_ptr)) continue; - - SPEED speed = decide_monster_speed(target_ptr, m_ptr, i); - m_ptr->energy_need -= SPEED_TO_ENERGY(speed); - if (m_ptr->energy_need > 0) continue; - - m_ptr->energy_need += ENERGY_NEED(); - hack_m_idx = i; - process_monster(target_ptr, i); - reset_target(m_ptr); - - if (target_ptr->no_flowed && one_in_(3)) - m_ptr->mflag2 |= MFLAG2_NOFLOW; - - if (!target_ptr->playing || target_ptr->is_dead) break; - if (target_ptr->leaving) break; - } + sweep_monster_process(target_ptr); hack_m_idx = 0; if (!target_ptr->monster_race_idx || (target_ptr->monster_race_idx != old_monster_race_idx)) @@ -2743,6 +2709,51 @@ void save_old_race_flags(player_type *target_ptr, old_race_flags *old_race_flags /*! + * @brief フロア内のモンスターについてターン終了時の処理を繰り返す + * @param target_ptr プレーヤーへの参照ポインタ + */ +void sweep_monster_process(player_type *target_ptr) +{ + floor_type *floor_ptr = target_ptr->current_floor_ptr; + for (MONSTER_IDX i = floor_ptr->m_max - 1; i >= 1; i--) + { + monster_type *m_ptr; + monster_race *r_ptr; + m_ptr = &floor_ptr->m_list[i]; + r_ptr = &r_info[m_ptr->r_idx]; + + if (target_ptr->leaving) return; + if (!monster_is_valid(m_ptr)) continue; + if (target_ptr->wild_mode) continue; + + if (m_ptr->mflag & MFLAG_BORN) + { + m_ptr->mflag &= ~(MFLAG_BORN); + continue; + } + + if (m_ptr->cdis >= AAF_LIMIT) continue; + if (!decide_process_continue(target_ptr, m_ptr)) continue; + + SPEED speed = decide_monster_speed(target_ptr, m_ptr, i); + m_ptr->energy_need -= SPEED_TO_ENERGY(speed); + if (m_ptr->energy_need > 0) continue; + + m_ptr->energy_need += ENERGY_NEED(); + hack_m_idx = i; + process_monster(target_ptr, i); + reset_target(m_ptr); + + if (target_ptr->no_flowed && one_in_(3)) + m_ptr->mflag2 |= MFLAG2_NOFLOW; + + if (!target_ptr->playing || target_ptr->is_dead) return; + if (target_ptr->leaving) return; + } +} + + +/*! * todo fy/fxへの代入は有効活用されていないはず * @brief 後続のモンスター処理が必要かどうか判定する (要調査) * @param target_ptr プレーヤーへの参照ポインタ -- 2.11.0