summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-03-03 07:19:43 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-03-04 06:58:10 +0100
commit5de9069530520c5fd7e32c8ac6ad9cbbae049b99 (patch)
tree8e4bba94857d9c8ce9ada7bf37223b7e2ac0ffc9
parent06c0defb8b63ba7cdb43ed674beb1cd97847479e (diff)
src/point: a
-rw-r--r--src/point.inl23
-rw-r--r--src/search-astar.cpp23
2 files changed, 27 insertions, 19 deletions
diff --git a/src/point.inl b/src/point.inl
new file mode 100644
index 00000000..dbcfd124
--- /dev/null
+++ b/src/point.inl
@@ -0,0 +1,23 @@
+#pragma once
+#include "point.hpp"
+#include <mg/Functions.h>
+
+namespace floormat {
+
+constexpr uint32_t point::distance(point a, point b)
+{
+ Vector2i dist;
+ dist += (a.coord() - b.coord())*iTILE_SIZE2;
+ dist += Vector2i(a.offset()) - Vector2i(b.offset());
+ return (uint32_t)Math::ceil(Math::sqrt(Vector2(dist).dot()));
+}
+
+constexpr uint32_t point::distance_l2(point a, point b)
+{
+ Vector2i dist;
+ dist += (a.coord() - b.coord())*iTILE_SIZE2;
+ dist += Vector2i(a.offset()) - Vector2i(b.offset());
+ return (uint32_t)Math::abs(dist).sum();
+}
+
+} // namespace floormat
diff --git a/src/search-astar.cpp b/src/search-astar.cpp
index 76172840..34c2aad2 100644
--- a/src/search-astar.cpp
+++ b/src/search-astar.cpp
@@ -9,6 +9,7 @@
#include "object.hpp"
#include "world.hpp"
#include "point.hpp"
+#include "point.inl"
#include <cstdio>
#include <Corrade/Containers/GrowableArray.h>
#include <Corrade/Containers/StaticArray.h> // todo remove
@@ -97,22 +98,6 @@ struct heap_comparator
inline bool operator()(uint32_t a, uint32_t b) const { return nodes[b].dist < nodes[a].dist; }
};
-inline uint32_t distance(point a, point b)
-{
- Vector2i dist;
- dist += (a.coord() - b.coord())*iTILE_SIZE2;
- dist += Vector2i(a.offset()) - Vector2i(b.offset());
- return (uint32_t)Math::ceil(Math::sqrt(Vector2(dist).dot()));
-}
-
-inline uint32_t distance_l2(point a, point b)
-{
- Vector2i dist;
- dist += (a.coord() - b.coord())*iTILE_SIZE2;
- dist += Vector2i(a.offset()) - Vector2i(b.offset());
- return (uint32_t)Math::abs(dist).sum();
-}
-
void set_result_from_idx(path_search_result& result, const Array<visited>& nodes,
point to, const uint32_t idx)
{
@@ -212,7 +197,7 @@ path_search_result astar::Dijkstra(world& w, const point from, const point to,
auto off = Vector2i(x, y) * div_size;
auto pt = object::normalize_coords({from.coord(), {}}, off);
auto bb = bbox<float>(bbox_from_pos2(from, pt, own_size));
- auto dist = distance(from, pt) + min_dist;
+ auto dist = point::distance(from, pt) + min_dist;
if (path_search::is_passable(w, cache, from.chunk3(), bb, own_id, p))
{
@@ -240,7 +225,7 @@ path_search_result astar::Dijkstra(world& w, const point from, const point to,
if (cur_dist >= max_dist) [[unlikely]]
continue;
- if (auto d = distance(cur_pt, to); d < closest_dist) [[unlikely]]
+ if (auto d = point::distance(cur_pt, to); d < closest_dist) [[unlikely]]
{
closest_dist = d;
closest_idx = cur_idx;
@@ -253,7 +238,7 @@ path_search_result astar::Dijkstra(world& w, const point from, const point to,
#endif
}
- if (auto dist_to_goal = distance_l2(cur_pt, to); dist_to_goal < goal_thres) [[unlikely]]
+ if (auto dist_to_goal = point::distance_l2(cur_pt, to); dist_to_goal < goal_thres) [[unlikely]]
{
auto dist = cur_dist + dist_to_goal;
if (auto bb = bbox<float>(bbox_from_pos2(to, cur_pt, own_size));