From: Hourier Date: Mon, 17 Feb 2020 14:09:53 +0000 (+0900) Subject: [Refactor] #40030 decide_monster_movement_direction() からdecide_pet_movement_direction... X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=013f02850cda51c1d1136e9aba9ac6600acabc41;p=hengband%2Fhengband.git [Refactor] #40030 decide_monster_movement_direction() からdecide_pet_movement_direction() を分離 / Separated decide_pet_movement_direction() from decide_monster_movement_direction() --- diff --git a/src/monster-process.c b/src/monster-process.c index f177a1f58..fb5df04ab 100644 --- a/src/monster-process.c +++ b/src/monster-process.c @@ -90,6 +90,7 @@ void produce_quantum_effect(player_type *target_ptr, MONSTER_IDX m_idx, bool see bool explode_monster(player_type *target_ptr, MONSTER_IDX m_idx); bool decide_monster_multiplication(player_type *target_ptr, MONSTER_IDX m_idx, POSITION oy, POSITION ox); bool decide_monster_movement_direction(player_type *target_ptr, DIRECTION *mm, MONSTER_IDX m_idx, bool aware); +bool decide_pet_movement_direction(player_type *target_ptr, DIRECTION *mm, MONSTER_IDX m_idx); bool runaway_monster(player_type *target_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx); void escape_monster(player_type *target_ptr, turn_flags *turn_flags_ptr, monster_type *m_ptr, GAME_TEXT *m_name); void process_special(player_type *target_ptr, MONSTER_IDX m_idx); @@ -1451,7 +1452,6 @@ void produce_quantum_effect(player_type *target_ptr, MONSTER_IDX m_idx, bool see if (target) { (void)monspell_to_monster(target_ptr, blink, m_ptr->fy, m_ptr->fx, m_idx, m_idx); - } else { @@ -1655,29 +1655,7 @@ bool decide_monster_movement_direction(player_type *target_ptr, DIRECTION *mm, M return TRUE; } - if (is_pet(m_ptr)) - { - bool avoid = ((target_ptr->pet_follow_distance < 0) && (m_ptr->cdis <= (0 - target_ptr->pet_follow_distance))); - bool lonely = (!avoid && (m_ptr->cdis > target_ptr->pet_follow_distance)); - bool distant = (m_ptr->cdis > PET_SEEK_DIST); - mm[0] = mm[1] = mm[2] = mm[3] = 5; - if (!get_enemy_dir(target_ptr, m_idx, mm)) - { - if (avoid || lonely || distant) - { - POSITION dis = target_ptr->pet_follow_distance; - if (target_ptr->pet_follow_distance > PET_SEEK_DIST) - { - target_ptr->pet_follow_distance = PET_SEEK_DIST; - } - - (void)get_moves(target_ptr, m_idx, mm); - target_ptr->pet_follow_distance = (s16b)dis; - } - } - - return TRUE; - } + if (decide_pet_movement_direction(target_ptr, mm, m_idx)) return TRUE; if (!is_hostile(m_ptr)) { @@ -1695,6 +1673,37 @@ bool decide_monster_movement_direction(player_type *target_ptr, DIRECTION *mm, M /*! * @brief ペットや友好的なモンスターがフロアから逃げる処理を行う * @param target_ptr プレーヤーへの参照ポインタ + * @param mm 移動方向 + * @param m_idx モンスターID + * @return モンスターがペットであればTRUE + */ +bool decide_pet_movement_direction(player_type *target_ptr, DIRECTION *mm, MONSTER_IDX m_idx) +{ + monster_type *m_ptr = &target_ptr->current_floor_ptr->m_list[m_idx]; + if (!is_pet(m_ptr)) return FALSE; + + bool avoid = ((target_ptr->pet_follow_distance < 0) && (m_ptr->cdis <= (0 - target_ptr->pet_follow_distance))); + bool lonely = (!avoid && (m_ptr->cdis > target_ptr->pet_follow_distance)); + bool distant = (m_ptr->cdis > PET_SEEK_DIST); + mm[0] = mm[1] = mm[2] = mm[3] = 5; + if (get_enemy_dir(target_ptr, m_idx, mm)) return TRUE; + if (!avoid && !lonely && !distant) return TRUE; + + POSITION dis = target_ptr->pet_follow_distance; + if (target_ptr->pet_follow_distance > PET_SEEK_DIST) + { + target_ptr->pet_follow_distance = PET_SEEK_DIST; + } + + (void)get_moves(target_ptr, m_idx, mm); + target_ptr->pet_follow_distance = (s16b)dis; + return TRUE; +} + + +/*! + * @brief ペットや友好的なモンスターがフロアから逃げる処理を行う + * @param target_ptr プレーヤーへの参照ポインタ * @param m_idx モンスターID * @param is_riding_mon 騎乗状態ならばTRUE * @param see_m モンスターが視界内にいたらTRUE @@ -1930,7 +1939,6 @@ bool process_monster_movement(player_type *target_ptr, turn_flags *turn_flags_pt } update_object_by_monster_movement(target_ptr, turn_flags_ptr, m_idx, ny, nx); - if (turn_flags_ptr->do_turn) break; *count++;