From de44fa849443436725eaf3383829349e07e3d9c4 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Sat, 25 May 2024 21:52:34 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#4155=20ang=5Fsort=5Fcomp=5Fimporta?= =?utf8?q?nce()=20=E3=81=AE=E4=B8=AD=E8=BA=AB=E3=82=92=E6=95=B4=E5=BD=A2?= =?utf8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/util/sort.cpp | 76 ++++++++++++++++++++++--------------------------------- 1 file changed, 30 insertions(+), 46 deletions(-) diff --git a/src/util/sort.cpp b/src/util/sort.cpp index ebcdc40f7..245ae8861 100644 --- a/src/util/sort.cpp +++ b/src/util/sort.cpp @@ -114,100 +114,85 @@ bool ang_sort_comp_distance(PlayerType *player_ptr, std::vector &ys, std::v bool ang_sort_comp_importance(PlayerType *player_ptr, std::vector &ys, std::vector &xs, int a, int b) { const auto &floor = *player_ptr->current_floor_ptr; - const auto &grid_a = floor.get_grid({ ys[a], xs[a] }); - const auto &grid_b = floor.get_grid({ ys[b], xs[b] }); - const auto &monster_a = floor.m_list[grid_a.m_idx]; - const auto &monster_b = floor.m_list[grid_b.m_idx]; - - /* The player grid */ - if (ys[a] == player_ptr->y && xs[a] == player_ptr->x) { + const auto &grid1 = floor.get_grid({ ys[a], xs[a] }); + const auto &grid2 = floor.get_grid({ ys[b], xs[b] }); + const auto &monster_a = floor.m_list[grid1.m_idx]; + const auto &monster_b = floor.m_list[grid2.m_idx]; + const auto p_pos = player_ptr->get_position(); + if (p_pos == Pos2D(ys[a], xs[a])) { return true; } - if (ys[b] == player_ptr->y && xs[b] == player_ptr->x) { + if (p_pos == Pos2D(ys[b], xs[b])) { return false; } - /* Extract monster race */ - MonsterRaceInfo *ap_r_ptr_a; - if (grid_a.has_monster() && monster_a.ml) { - ap_r_ptr_a = &monster_a.get_appearance_monrace(); - } else { - ap_r_ptr_a = nullptr; - } - - MonsterRaceInfo *ap_r_ptr_b; - if (grid_b.has_monster() && monster_b.ml) { - ap_r_ptr_b = &monster_b.get_appearance_monrace(); - } else { - ap_r_ptr_b = nullptr; - } - - if (ap_r_ptr_a && !ap_r_ptr_b) { + const auto can_see_grid1 = grid1.has_monster() && monster_a.ml; + const auto can_see_grid2 = grid2.has_monster() && monster_b.ml; + if (can_see_grid1 && !can_see_grid2) { return true; } - if (!ap_r_ptr_a && ap_r_ptr_b) { + if (!can_see_grid1 && can_see_grid2) { return false; } - /* Compare two monsters */ - if (ap_r_ptr_a && ap_r_ptr_b) { - /* Unique monsters first */ - if (ap_r_ptr_a->kind_flags.has(MonsterKindType::UNIQUE) && ap_r_ptr_b->kind_flags.has_not(MonsterKindType::UNIQUE)) { + if (can_see_grid1 && can_see_grid2) { + const auto &appearent_monrace1 = monster_a.get_appearance_monrace(); + const auto &appearent_monrace2 = monster_b.get_appearance_monrace(); + if (appearent_monrace1.kind_flags.has(MonsterKindType::UNIQUE) && appearent_monrace2.kind_flags.has_not(MonsterKindType::UNIQUE)) { return true; } - if (ap_r_ptr_a->kind_flags.has_not(MonsterKindType::UNIQUE) && ap_r_ptr_b->kind_flags.has(MonsterKindType::UNIQUE)) { + + if (appearent_monrace1.kind_flags.has_not(MonsterKindType::UNIQUE) && appearent_monrace2.kind_flags.has(MonsterKindType::UNIQUE)) { return false; } - /* Shadowers first (あやしい影) */ if (monster_a.mflag2.has(MonsterConstantFlagType::KAGE) && monster_b.mflag2.has_not(MonsterConstantFlagType::KAGE)) { return true; } + if (monster_a.mflag2.has_not(MonsterConstantFlagType::KAGE) && monster_b.mflag2.has(MonsterConstantFlagType::KAGE)) { return false; } - /* Unknown monsters first */ - if (!ap_r_ptr_a->r_tkills && ap_r_ptr_b->r_tkills) { + if (!appearent_monrace1.r_tkills && appearent_monrace2.r_tkills) { return true; } - if (ap_r_ptr_a->r_tkills && !ap_r_ptr_b->r_tkills) { + + if (appearent_monrace1.r_tkills && !appearent_monrace2.r_tkills) { return false; } - /* Higher level monsters first (if known) */ - if (ap_r_ptr_a->r_tkills && ap_r_ptr_b->r_tkills) { - if (ap_r_ptr_a->level > ap_r_ptr_b->level) { + if (appearent_monrace1.r_tkills && appearent_monrace2.r_tkills) { + if (appearent_monrace1.level > appearent_monrace2.level) { return true; } - if (ap_r_ptr_a->level < ap_r_ptr_b->level) { + + if (appearent_monrace1.level < appearent_monrace2.level) { return false; } } - /* Sort by index if all conditions are same */ if (monster_a.ap_r_idx > monster_b.ap_r_idx) { return true; } + if (monster_a.ap_r_idx < monster_b.ap_r_idx) { return false; } } - /* An object get higher priority */ - if (!grid_a.o_idx_list.empty() && grid_b.o_idx_list.empty()) { + if (!grid1.o_idx_list.empty() && grid2.o_idx_list.empty()) { return true; } - if (grid_a.o_idx_list.empty() && !grid_b.o_idx_list.empty()) { + if (grid1.o_idx_list.empty() && !grid2.o_idx_list.empty()) { return false; } - /* Priority from the terrain */ - const auto &terrain_a = grid_a.get_terrain(); - const auto &terrain_b = grid_b.get_terrain(); + const auto &terrain_a = grid1.get_terrain(); + const auto &terrain_b = grid2.get_terrain(); if (terrain_a.priority > terrain_b.priority) { return true; } @@ -216,6 +201,5 @@ bool ang_sort_comp_importance(PlayerType *player_ptr, std::vector &ys, std: return false; } - /* If all conditions are same, compare distance */ return ang_sort_comp_distance(player_ptr, ys, xs, a, b); } -- 2.11.0