diff options
-rw-r--r-- | editor/tests-private.hpp | 1 | ||||
-rw-r--r-- | editor/tests.cpp | 2 | ||||
-rw-r--r-- | images/wall.json | 4 | ||||
-rw-r--r-- | src/dijkstra.cpp (renamed from src/path-search-dijkstra.cpp) | 5 | ||||
-rw-r--r-- | src/path-search-result.cpp | 3 | ||||
-rw-r--r-- | src/path-search-result.hpp | 3 |
6 files changed, 18 insertions, 0 deletions
diff --git a/editor/tests-private.hpp b/editor/tests-private.hpp index 0300c8a5..0b38b8a5 100644 --- a/editor/tests-private.hpp +++ b/editor/tests-private.hpp @@ -75,6 +75,7 @@ struct tests_data final : tests_data_, tests::variant struct pair { StringView str; size_t index; }; static constexpr inline pair fields[] = { + { "None"_s, 0 }, { "Path"_s, 1 }, }; diff --git a/editor/tests.cpp b/editor/tests.cpp index a7e86a3f..2b3b7ce2 100644 --- a/editor/tests.cpp +++ b/editor/tests.cpp @@ -97,6 +97,8 @@ void app::tests_reset_mode() void app::draw_tests_pane() { + ImGui::SeparatorText("Functional tests"); + constexpr int selectable_flags = ImGuiSelectableFlags_SpanAvailWidth; for (auto [str, i] : tests_data::fields) if (ImGui::Selectable(str.data(), i == tests().index(), selectable_flags)) diff --git a/images/wall.json b/images/wall.json index e8c40752..897ae1de 100644 --- a/images/wall.json +++ b/images/wall.json @@ -18,5 +18,9 @@ { "name": "concrete7", "size": "4 x 4" + }, + { + "name": "wall1", + "size": "4 x 1" } ] diff --git a/src/path-search-dijkstra.cpp b/src/dijkstra.cpp index 995229af..ab654660 100644 --- a/src/path-search-dijkstra.cpp +++ b/src/dijkstra.cpp @@ -4,6 +4,7 @@ #include <Corrade/Containers/StaticArray.h> #include <Magnum/Math/Vector2.h> #include <Magnum/Math/Functions.h> +#include <Magnum/Timeline.h> namespace floormat { @@ -120,6 +121,8 @@ path_search_result astar::Dijkstra(world& w, const point from_, const point to_, (void)debug; #endif + Timeline timeline; timeline.start(); + clear(); cache.allocate(from_, max_dist); @@ -314,6 +317,8 @@ path_search_result astar::Dijkstra(world& w, const point from_, const point to_, result.set_cost(nodes[goal_idx].dist); } + result.set_time(timeline.currentFrameTime()); + return result; } diff --git a/src/path-search-result.cpp b/src/path-search-result.cpp index 202a8457..ea2cc3db 100644 --- a/src/path-search-result.cpp +++ b/src/path-search-result.cpp @@ -59,6 +59,9 @@ path_search_result::node::node() noexcept = default; size_t path_search_result::size() const { return _node->vec.size(); } uint32_t path_search_result::cost() const { return _cost; } void path_search_result::set_cost(uint32_t value) { _cost = value; } +float path_search_result::time() const { return _time; } +void path_search_result::set_time(float time) { _time = time; } + auto path_search_result::data() const -> const point* { return _node->vec.data(); } path_search_result::operator bool() const { return !_node->vec.empty(); } diff --git a/src/path-search-result.hpp b/src/path-search-result.hpp index e6e2d7fd..6ae9b5be 100644 --- a/src/path-search-result.hpp +++ b/src/path-search-result.hpp @@ -17,6 +17,8 @@ struct path_search_result final size_t size() const; uint32_t cost() const; void set_cost(uint32_t value); + float time() const; + void set_time(float time); std::vector<point>& path(); const std::vector<point>& path() const; @@ -50,6 +52,7 @@ private: static std::unique_ptr<node> _pool; // NOLINT(*-avoid-non-const-global-variables) std::unique_ptr<node> _node; + float _time = 0; uint32_t _cost = 0; }; |