From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Sun, 26 May 2024 01:10:26 +0000 (+0900) Subject: [Refactor] #4158 ang_sort() をTargetSorter::sort() にクラス化した X-Git-Tag: 3.0.1.13-Beta~18^2~7 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=c84ba880bc339e3e949570751f5cdd449d50801b;p=hengbandforosx%2Fhengbandosx.git [Refactor] #4158 ang_sort() をTargetSorter::sort() にクラス化した --- diff --git a/src/target/grid-selector.cpp b/src/target/grid-selector.cpp index d88d17844..bd4d84f67 100644 --- a/src/target/grid-selector.cpp +++ b/src/target/grid-selector.cpp @@ -82,7 +82,7 @@ static void tgt_pt_prepare(PlayerType *player_ptr, std::vector &ys, st } } - ang_sort(*player_ptr->current_floor_ptr, player_ptr->get_position(), ys, xs, SortKind::DISTANCE); + TargetSorter().sort(*player_ptr->current_floor_ptr, player_ptr->get_position(), ys, xs, SortKind::DISTANCE); } /*! diff --git a/src/target/target-preparation.cpp b/src/target/target-preparation.cpp index 92a525fd5..83edba369 100644 --- a/src/target/target-preparation.cpp +++ b/src/target/target-preparation.cpp @@ -162,13 +162,12 @@ void target_set_prepare(PlayerType *player_ptr, std::vector &ys, std:: } if (mode & (TARGET_KILL)) { - ang_sort(*player_ptr->current_floor_ptr, player_ptr->get_position(), ys, xs, SortKind::DISTANCE); + TargetSorter().sort(*player_ptr->current_floor_ptr, player_ptr->get_position(), ys, xs, SortKind::DISTANCE); } else { - ang_sort(*player_ptr->current_floor_ptr, player_ptr->get_position(), ys, xs, SortKind::IMPORTANCE); + TargetSorter().sort(*player_ptr->current_floor_ptr, player_ptr->get_position(), ys, xs, SortKind::IMPORTANCE); } // 乗っているモンスターがターゲットリストの先頭にならないようにする調整。 - if (player_ptr->riding == 0 || !target_pet || (size(ys) <= 1) || !(mode & (TARGET_KILL))) { return; } diff --git a/src/target/target-sorter.cpp b/src/target/target-sorter.cpp index c8abb9c94..8bc95ac7d 100644 --- a/src/target/target-sorter.cpp +++ b/src/target/target-sorter.cpp @@ -216,15 +216,14 @@ void exe_ang_sort(const FloorType &floor, const Pos2D &p_pos, std::vector & } /* - * @brief クイックソートの受け付け / Accepting auick sort in place - * @param u アイテムやモンスター等への配列 - * @param v 条件基準IDへの参照ポインタ - * @param a 比較対象のID1 - * @param b 比較対象のID2 - * @param ang_sort_comp 比較用の関数ポインタ - * @param ang_sort_swap スワップ用の関数ポインタ + * @brief クイックソートの受け付け + * @param floor フロアへの参照 + * @param p_pos プレイヤーの現在位置 + * @param ys マップのY座標群 (歴史的経緯によりPos2D化されていない) + * @param xs マップのX座標群 (同上) + * @param kind ソート種別 */ -void ang_sort(const FloorType &floor, const Pos2D &p_pos, std::vector &ys, std::vector &xs, SortKind kind) +void TargetSorter::sort(const FloorType &floor, const Pos2D &p_pos, std::vector &ys, std::vector &xs, SortKind kind) { exe_ang_sort(floor, p_pos, ys, xs, 0, std::ssize(ys) - 1, kind); } diff --git a/src/target/target-sorter.h b/src/target/target-sorter.h index a6e6ea0b9..8ab1b57ff 100644 --- a/src/target/target-sorter.h +++ b/src/target/target-sorter.h @@ -9,4 +9,8 @@ enum class SortKind { }; class FloorType; -void ang_sort(const FloorType &floor, const Pos2D &p_pos, std::vector &ys, std::vector &xs, SortKind kind); +class TargetSorter { +public: + TargetSorter() = default; + void sort(const FloorType &floor, const Pos2D &p_pos, std::vector &ys, std::vector &xs, SortKind kind); +};