summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--editor/tests-private.hpp1
-rw-r--r--editor/tests.cpp2
-rw-r--r--images/wall.json4
-rw-r--r--src/dijkstra.cpp (renamed from src/path-search-dijkstra.cpp)5
-rw-r--r--src/path-search-result.cpp3
-rw-r--r--src/path-search-result.hpp3
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;
};