OSDN Git Service

[Refactor] #40030 process_monsters() からsweep_monster_process() を分離 / Separated sweep_...
authorHourier <hourier@users.sourceforge.jp>
Mon, 17 Feb 2020 13:15:22 +0000 (22:15 +0900)
committerHourier <hourier@users.sourceforge.jp>
Mon, 17 Feb 2020 13:15:22 +0000 (22:15 +0900)
src/monster-process.c

index 6108032..f177a1f 100644 (file)
@@ -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 プレーヤーへの参照ポインタ