From da2f4c7f7eac1298f1ed6681eaa024ed83853d83 Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Mon, 18 Jul 2022 10:20:52 +0800 Subject: [PATCH 1/9] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E5=AF=BC=E8=87=B4=E8=82=89=E9=B8=BD=20crash?= =?UTF-8?q?=20=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index 6085647c62..7f61566ebc 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -653,8 +653,6 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction if (m_cur_home_index < m_homes.size()) { home_loc = m_homes.at(m_cur_home_index); } - Point home_point = m_side_tile_info.at(home_loc).pos; - Rect home_rect(home_point.x, home_point.y, 1, 1); int dx = 0; if (loc.x > home_loc.x) dx = 1; From b83bfd80c4b408e96137d1c02513777d11c1425c Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Mon, 18 Jul 2022 10:23:30 +0800 Subject: [PATCH 2/9] =?UTF-8?q?style:=20=E5=AF=B9=E9=BD=90=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index 7f61566ebc..58ac6d2a7f 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -702,7 +702,7 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction switch (role) { case BattleRole::Support: attack_range = { - Point(-1, -1), Point(0, -1),Point(1, -1),Point(2, -1), + Point(-1, -1),Point(0, -1),Point(1, -1),Point(2, -1), Point(-1, 0), Point(0, 0), Point(1, 0), Point(2, 0), Point(-1, 1), Point(0, 1), Point(1, 1), Point(2, 1), }; From a380775ef53c0bdffd55e743d1a12ce2f96f2b8e Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Mon, 18 Jul 2022 14:06:25 +0800 Subject: [PATCH 3/9] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/AsstTypes.h | 2 +- .../RoguelikeBattleTaskPlugin.cpp | 72 ++++++++----------- 2 files changed, 29 insertions(+), 45 deletions(-) diff --git a/src/MeoAssistant/AsstTypes.h b/src/MeoAssistant/AsstTypes.h index 417afee185..004804d680 100644 --- a/src/MeoAssistant/AsstTypes.h +++ b/src/MeoAssistant/AsstTypes.h @@ -29,7 +29,7 @@ namespace asst Point() = default; Point(const Point&) noexcept = default; Point(Point&&) noexcept = default; - Point(int x, int y) : x(x), y(y) {} + constexpr Point(int x, int y) : x(x), y(y) {} Point& operator=(const Point&) noexcept = default; Point& operator=(Point&&) noexcept = default; bool operator==(const Point& rhs) const noexcept { return x == rhs.x && y == rhs.y; } diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index 58ac6d2a7f..76d6886707 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -697,18 +697,18 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction } // 按朝右算,后面根据方向做转换 - std::vector attack_range = { Point(0, 0) }; + std::vector right_attack_range = { Point(0, 0) }; switch (role) { case BattleRole::Support: - attack_range = { + right_attack_range = { Point(-1, -1),Point(0, -1),Point(1, -1),Point(2, -1), Point(-1, 0), Point(0, 0), Point(1, 0), Point(2, 0), Point(-1, 1), Point(0, 1), Point(1, 1), Point(2, 1), }; break; case BattleRole::Caster: - attack_range = { + right_attack_range = { Point(0, -1),Point(1, -1),Point(2, -1), Point(0, 0), Point(1, 0), Point(2, 0), Point(3, 0), Point(0, 1), Point(1, 1), Point(2, 1), @@ -716,14 +716,14 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction break; case BattleRole::Medic: case BattleRole::Sniper: - attack_range = { + right_attack_range = { Point(0, -1),Point(1, -1),Point(2, -1),Point(3, -1), Point(0, 0), Point(1, 0), Point(2, 0), Point(3, 0), Point(0, 1), Point(1, 1), Point(2, 1), Point(3, 1), }; break; case BattleRole::Warrior: - attack_range = { + right_attack_range = { Point(0, 0), Point(1, 0), Point(2, 0) }; break; @@ -731,54 +731,38 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction case BattleRole::Tank: case BattleRole::Pioneer: case BattleRole::Drone: - attack_range = { + right_attack_range = { Point(0, 0), Point(1, 0) }; break; } - static const Point RightDirection(1, 0); - static const Point DownDirection(0, 1); - static const Point LeftDirection(-1, 0); - static const Point UpDirection(0, -1); + // 对余下三个方向分别计算攻击范围 + std::vector down_attack_range; + std::vector left_attack_range; + std::vector up_attack_range; - std::vector>> DirectionAttackRangeMap = { - { UpDirection, std::vector() }, - { RightDirection, std::vector() }, - { LeftDirection, std::vector() }, - { DownDirection, std::vector() }, - }; + down_attack_range.reserve(right_attack_range.size()); + left_attack_range.reserve(right_attack_range.size()); + up_attack_range.reserve(right_attack_range.size()); - for (auto& [direction, cor_attack_range] : DirectionAttackRangeMap) { - if (direction == RightDirection) { - cor_attack_range = attack_range; - } - else if (direction == DownDirection) { - for (const Point& attack_point : attack_range) { - Point cor_point; - cor_point.x = -attack_point.y; - cor_point.y = attack_point.x; - cor_attack_range.emplace_back(cor_point); - } - } - else if (direction == LeftDirection) { - for (const Point& attack_point : attack_range) { - Point cor_point; - cor_point.x = -attack_point.x; - cor_point.y = -attack_point.y; - cor_attack_range.emplace_back(cor_point); - } - } - else if (direction == UpDirection) { - for (const Point& attack_point : attack_range) { - Point cor_point; - cor_point.x = attack_point.y; - cor_point.y = -attack_point.x; - cor_attack_range.emplace_back(cor_point); - } - } + for (const auto& [x, y] : right_attack_range) { + down_attack_range.emplace_back(-y, x); + left_attack_range.emplace_back(-x, -y); + up_attack_range.emplace_back(y, -x); } + static const constexpr Point RightDirection(1, 0); + static const constexpr Point DownDirection(0, 1); + static const constexpr Point LeftDirection(-1, 0); + static const constexpr Point UpDirection(0, -1); + std::vector>> DirectionAttackRangeMap; + DirectionAttackRangeMap.reserve(4); + DirectionAttackRangeMap.emplace_back(std::move(RightDirection), std::move(right_attack_range)); + DirectionAttackRangeMap.emplace_back(std::move(DownDirection), std::move(down_attack_range)); + DirectionAttackRangeMap.emplace_back(std::move(LeftDirection), std::move(left_attack_range)); + DirectionAttackRangeMap.emplace_back(std::move(UpDirection), std::move(up_attack_range)); + int max_score = 0; Point opt_direction; From e57cedde4e2709f17c3e606359885f167dd98436 Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Mon, 18 Jul 2022 14:07:11 +0800 Subject: [PATCH 4/9] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=82=89=E9=B8=BD?= =?UTF-8?q?=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index 76d6886707..e4c216b338 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -633,7 +633,7 @@ asst::RoguelikeBattleTaskPlugin::DeployInfo asst::RoguelikeBattleTaskPlugin::cal } if (cur_result.second + extra_dist_score > max_score) { - max_score = cur_result.second; + max_score = cur_result.second + extra_dist_score; best_location = loc; best_direction = cur_result.first; } From ec59c36b6d05c4387d9175398fc461f05317e9fd Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Mon, 18 Jul 2022 15:33:09 +0800 Subject: [PATCH 5/9] =?UTF-8?q?perf:=20=E5=B0=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index e4c216b338..143f2ca375 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -657,12 +657,10 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction int dx = 0; if (loc.x > home_loc.x) dx = 1; else if (loc.x < home_loc.x) dx = -1; - else dx = 0; int dy = 0; if (loc.y > home_loc.y) dy = 1; else if (loc.y < home_loc.y) dy = -1; - else dy = 0; Point base_direction(0, 0); switch (role) { From e878f5fc2d7c418ac39f2b28fc77cbb15c9c077d Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Mon, 18 Jul 2022 16:06:40 +0800 Subject: [PATCH 6/9] =?UTF-8?q?perf:=20=E7=AE=80=E5=8C=96=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E5=B9=B2=E5=91=98=E5=9F=BA=E5=87=86=E6=96=B9=E5=90=91?= =?UTF-8?q?=E7=9A=84=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/AsstTypes.h | 1 + .../RoguelikeBattleTaskPlugin.cpp | 46 +++++-------------- 2 files changed, 13 insertions(+), 34 deletions(-) diff --git a/src/MeoAssistant/AsstTypes.h b/src/MeoAssistant/AsstTypes.h index 004804d680..99c2a2a95e 100644 --- a/src/MeoAssistant/AsstTypes.h +++ b/src/MeoAssistant/AsstTypes.h @@ -32,6 +32,7 @@ namespace asst constexpr Point(int x, int y) : x(x), y(y) {} Point& operator=(const Point&) noexcept = default; Point& operator=(Point&&) noexcept = default; + Point operator-() noexcept { return Point(-x, -y); } bool operator==(const Point& rhs) const noexcept { return x == rhs.x && y == rhs.y; } std::string to_string() const { diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index 143f2ca375..ba521f1e8d 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -654,44 +654,22 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction home_loc = m_homes.at(m_cur_home_index); } - int dx = 0; - if (loc.x > home_loc.x) dx = 1; - else if (loc.x < home_loc.x) dx = -1; - - int dy = 0; - if (loc.y > home_loc.y) dy = 1; - else if (loc.y < home_loc.y) dy = -1; + static constexpr auto sgn = [](const int &x) -> int { + if (x > 0) return 1; + if (x < 0) return -1; + return 0; + }; Point base_direction(0, 0); - switch (role) { - case BattleRole::Medic: - { - if (std::abs(dx) < std::abs(dy)) { - base_direction.y = -dy; - } - else { - base_direction.x = -dx; - } + if (loc.x == home_loc.x) { + base_direction.y = sgn(loc.y - home_loc.y); } - break; - case BattleRole::Support: - case BattleRole::Warrior: - case BattleRole::Sniper: - case BattleRole::Special: - case BattleRole::Tank: - case BattleRole::Pioneer: - case BattleRole::Caster: - case BattleRole::Drone: - default: - { - if (std::abs(dx) < std::abs(dy)) { - base_direction.y = dy; - } - else { - base_direction.x = dx; - } + else { + base_direction.x = sgn(loc.x - home_loc.x); } - break; + // 医疗反着算 + if (role == BattleRole::Medic) { + base_direction = -base_direction; } // 按朝右算,后面根据方向做转换 From 3e4e993afdd4c4676188027ff383526052b78ea8 Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Mon, 18 Jul 2022 18:08:16 +0800 Subject: [PATCH 7/9] =?UTF-8?q?style:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index ba521f1e8d..cb571ce5a3 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -654,7 +654,7 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction home_loc = m_homes.at(m_cur_home_index); } - static constexpr auto sgn = [](const int &x) -> int { + auto sgn = [](const int &x) -> int { if (x > 0) return 1; if (x < 0) return -1; return 0; @@ -732,12 +732,12 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction static const constexpr Point DownDirection(0, 1); static const constexpr Point LeftDirection(-1, 0); static const constexpr Point UpDirection(0, -1); - std::vector>> DirectionAttackRangeMap; + std::vector>> DirectionAttackRangeMap; DirectionAttackRangeMap.reserve(4); - DirectionAttackRangeMap.emplace_back(std::move(RightDirection), std::move(right_attack_range)); - DirectionAttackRangeMap.emplace_back(std::move(DownDirection), std::move(down_attack_range)); - DirectionAttackRangeMap.emplace_back(std::move(LeftDirection), std::move(left_attack_range)); - DirectionAttackRangeMap.emplace_back(std::move(UpDirection), std::move(up_attack_range)); + DirectionAttackRangeMap.emplace_back(RightDirection, std::move(right_attack_range)); + DirectionAttackRangeMap.emplace_back(DownDirection, std::move(down_attack_range)); + DirectionAttackRangeMap.emplace_back(LeftDirection, std::move(left_attack_range)); + DirectionAttackRangeMap.emplace_back(UpDirection, std::move(up_attack_range)); int max_score = 0; Point opt_direction; From b5df52c8f0d27da6c95e09e0eda6956826c5d6ef Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Mon, 18 Jul 2022 18:22:02 +0800 Subject: [PATCH 8/9] =?UTF-8?q?feat:=20=E5=B0=86=E6=96=B9=E5=90=91?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E9=9D=99=E6=80=81=E6=88=90=E5=91=98=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/AsstTypes.h | 4 ++++ src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp | 13 ++++--------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/MeoAssistant/AsstTypes.h b/src/MeoAssistant/AsstTypes.h index 99c2a2a95e..c8371c8bb3 100644 --- a/src/MeoAssistant/AsstTypes.h +++ b/src/MeoAssistant/AsstTypes.h @@ -38,6 +38,10 @@ namespace asst { return "[ " + std::to_string(x) + ", " + std::to_string(y) + " ]"; } + static constexpr Point RightDirection() { return Point(1, 0); } + static constexpr Point DownDirection() { return Point(0, 1); } + static constexpr Point LeftDirection() { return Point(-1, 0); } + static constexpr Point UpDirection() { return Point(0, -1); } int x = 0; int y = 0; }; diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index cb571ce5a3..4436527213 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -727,17 +727,12 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction left_attack_range.emplace_back(-x, -y); up_attack_range.emplace_back(y, -x); } - - static const constexpr Point RightDirection(1, 0); - static const constexpr Point DownDirection(0, 1); - static const constexpr Point LeftDirection(-1, 0); - static const constexpr Point UpDirection(0, -1); std::vector>> DirectionAttackRangeMap; DirectionAttackRangeMap.reserve(4); - DirectionAttackRangeMap.emplace_back(RightDirection, std::move(right_attack_range)); - DirectionAttackRangeMap.emplace_back(DownDirection, std::move(down_attack_range)); - DirectionAttackRangeMap.emplace_back(LeftDirection, std::move(left_attack_range)); - DirectionAttackRangeMap.emplace_back(UpDirection, std::move(up_attack_range)); + DirectionAttackRangeMap.emplace_back(Point::RightDirection(), std::move(right_attack_range)); + DirectionAttackRangeMap.emplace_back(Point::DownDirection(), std::move(down_attack_range)); + DirectionAttackRangeMap.emplace_back(Point::LeftDirection(), std::move(left_attack_range)); + DirectionAttackRangeMap.emplace_back(Point::UpDirection(), std::move(up_attack_range)); int max_score = 0; Point opt_direction; From d659fadcf7fea92421c97438c46cba1ca02e3279 Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Tue, 19 Jul 2022 11:07:02 +0800 Subject: [PATCH 9/9] =?UTF-8?q?style:=20=E4=BB=A3=E7=A0=81=E8=A7=84?= =?UTF-8?q?=E8=8C=83=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/AsstTypes.h | 8 ++++---- src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/MeoAssistant/AsstTypes.h b/src/MeoAssistant/AsstTypes.h index c8371c8bb3..151138f328 100644 --- a/src/MeoAssistant/AsstTypes.h +++ b/src/MeoAssistant/AsstTypes.h @@ -38,10 +38,10 @@ namespace asst { return "[ " + std::to_string(x) + ", " + std::to_string(y) + " ]"; } - static constexpr Point RightDirection() { return Point(1, 0); } - static constexpr Point DownDirection() { return Point(0, 1); } - static constexpr Point LeftDirection() { return Point(-1, 0); } - static constexpr Point UpDirection() { return Point(0, -1); } + static constexpr Point right() { return Point(1, 0); } + static constexpr Point down() { return Point(0, 1); } + static constexpr Point left() { return Point(-1, 0); } + static constexpr Point up() { return Point(0, -1); } int x = 0; int y = 0; }; diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index 4436527213..1a98d13150 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -729,10 +729,10 @@ std::pair asst::RoguelikeBattleTaskPlugin::calc_best_direction } std::vector>> DirectionAttackRangeMap; DirectionAttackRangeMap.reserve(4); - DirectionAttackRangeMap.emplace_back(Point::RightDirection(), std::move(right_attack_range)); - DirectionAttackRangeMap.emplace_back(Point::DownDirection(), std::move(down_attack_range)); - DirectionAttackRangeMap.emplace_back(Point::LeftDirection(), std::move(left_attack_range)); - DirectionAttackRangeMap.emplace_back(Point::UpDirection(), std::move(up_attack_range)); + DirectionAttackRangeMap.emplace_back(Point::right(), std::move(right_attack_range)); + DirectionAttackRangeMap.emplace_back(Point::down(), std::move(down_attack_range)); + DirectionAttackRangeMap.emplace_back(Point::left(), std::move(left_attack_range)); + DirectionAttackRangeMap.emplace_back(Point::up(), std::move(up_attack_range)); int max_score = 0; Point opt_direction;