summaryrefslogtreecommitdiffhomepage
path: root/editor/tests
diff options
context:
space:
mode:
Diffstat (limited to 'editor/tests')
-rw-r--r--editor/tests/walk-test.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/editor/tests/walk-test.cpp b/editor/tests/walk-test.cpp
index 0032dda2..a317928f 100644
--- a/editor/tests/walk-test.cpp
+++ b/editor/tests/walk-test.cpp
@@ -4,8 +4,11 @@
#include "src/critter.hpp"
#include "src/critter-script.hpp"
#include "src/search-result.hpp"
+#include "src/point.inl"
#include "floormat/main.hpp"
#include "../imgui-raii.hpp"
+#include "src/search-astar.hpp"
+#include <mg/Functions.h>
namespace floormat::tests {
@@ -42,8 +45,19 @@ bool pf_test::handle_mouse_click(app& a, const mouse_button_event& e, bool is_do
{
auto C = a.ensure_player_character(m.world()).ptr;
fm_assert(C->is_dynamic());
- auto S = critter_script::make_walk_script(*ptʹ);
- C->script.do_reassign(move(S), move(C));
+
+ constexpr auto chunk_size = iTILE_SIZE2 * TILE_MAX_DIM;
+ auto pt0 = C->position();
+ auto vec = Math::abs(*ptʹ - pt0) * 2 + chunk_size * 1;
+ auto dist = (uint32_t)vec.length();
+ constexpr auto bb_const = Vector2ui{tile_size_xy / 8};
+ auto bb = Vector2ui{C->bbox_size} + bb_const;
+ auto res = m.astar().Dijkstra(m.world(), C->position(), *ptʹ, C->id, dist, bb, 0);
+ if (!res.empty())
+ {
+ auto S = critter_script::make_walk_script(move(res));
+ C->script.do_reassign(move(S), move(C));
+ }
return true;
}
}