mirror of
https://github.com/orange-cpp/omath.git
synced 2026-04-18 15:23:26 +00:00
added code
This commit is contained in:
20
include/omath/pathfinding/walk_bot.hpp
Normal file
20
include/omath/pathfinding/walk_bot.hpp
Normal file
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// Created by orange on 4/12/2026.
|
||||
//
|
||||
#pragma once
|
||||
#include "navigation_mesh.hpp"
|
||||
#include "omath/linear_algebra/vector3.hpp"
|
||||
#include <functional>
|
||||
namespace omath::pathfinding
|
||||
{
|
||||
class WalkBot
|
||||
{
|
||||
public:
|
||||
void update(const Vector3<float>& bot_position, const Vector3<float>& target_position, float min_node_distance) const;
|
||||
|
||||
private:
|
||||
std::weak_ptr<NavigationMesh> m_mav_mesh;
|
||||
float m_min_distance_to_path_point;
|
||||
std::optional<std::function<void(const Vector3<float>&)>> m_on_next_path_node = nullptr;
|
||||
};
|
||||
} // namespace omath::pathfinding
|
||||
31
source/pathfinding/walk_bot.cpp
Normal file
31
source/pathfinding/walk_bot.cpp
Normal file
@@ -0,0 +1,31 @@
|
||||
//
|
||||
// Created by orange on 4/12/2026.
|
||||
//
|
||||
#include "omath/pathfinding/walk_bot.hpp"
|
||||
#include "omath/pathfinding/a_star.hpp"
|
||||
|
||||
namespace omath::pathfinding
|
||||
{
|
||||
|
||||
void WalkBot::update(const Vector3<float>& bot_position, const Vector3<float>& target_position,
|
||||
const float min_node_distance) const
|
||||
{
|
||||
const auto nav_mesh = m_mav_mesh.lock();
|
||||
|
||||
if (!nav_mesh)
|
||||
return;
|
||||
|
||||
const auto path = Astar::find_path(bot_position, target_position, *nav_mesh);
|
||||
|
||||
if (path.empty())
|
||||
return;
|
||||
|
||||
if (!m_on_next_path_node.has_value())
|
||||
return;
|
||||
|
||||
if (path.size() > 1 && path.front().distance_to(bot_position) <= min_node_distance)
|
||||
m_on_next_path_node->operator()(path[1]);
|
||||
else
|
||||
m_on_next_path_node->operator()(path.front());
|
||||
}
|
||||
} // namespace omath::pathfinding
|
||||
Reference in New Issue
Block a user