Capycore Engine  0.1.0
A simple and lightweight game engine written in C++ based on the Unity API architecture.
Loading...
Searching...
No Matches
navigation_graph.h
Go to the documentation of this file.
1#pragma once
2
7
8#include <unordered_map>
9
29class NavigationGraph : public Component {
30 public:
31 NavigationGraph(int grid_size = 16, int stride = 10);
32
35 void update(float dt) override{};
36
46
52
53 std::unordered_map<GraphPosition, std::reference_wrapper<NavigationNode>,
56
63 std::optional<std::reference_wrapper<NavigationNode>> get_node(
64 const GraphPosition& position) const;
65
66 std::optional<GraphPosition> get_position_of_node(
67 const NavigationNode& node) const;
68
69 GraphPosition world_to_graph_position(const Vector3& world_position) const;
70
78 NavigationNode& node);
79
86
92 std::optional<std::reference_wrapper<NavigationNode>> get_closest_node(
93 const GraphPosition& position) const;
94
95 std::optional<std::reference_wrapper<NavigationNode>> get_closest_node(
96 const Vector3& world_position) const;
97
98 int get_grid_size() const noexcept;
99 int get_grid_max_x() const noexcept;
100 int get_grid_max_y() const noexcept;
101
102 int get_stride() const noexcept;
104
105 int max_drop_distance() const noexcept;
106 NavigationGraph& max_drop_distance(int distance) noexcept;
107
108 int max_jump_distance() const noexcept;
109 NavigationGraph& max_jump_distance(int distance) noexcept;
110
111 std::string type_name() const override;
112
113 private:
115 std::unordered_map<GraphPosition, std::reference_wrapper<NavigationNode>,
117 nodes_;
118
121 std::unordered_map<GraphPosition, GameObject*, GraphPositionHash> tile_map_;
122
125 std::unordered_map<GraphPosition, NavigationNode*, GraphPositionHash>
126 node_tile_map_;
127
128 int stride_{10};
129 int max_drop_distance_{10};
130 int max_jump_distance_{4};
131 float node_vertical_offset_{16.0f};
132
133 int grid_size_{16};
134 int grid_max_x_{0};
135 int grid_max_y_{0};
136
137 void set_tile_maps(GameObject& parent);
138 void generate_nodes();
139 void link_nodes();
140
141 std::optional<std::reference_wrapper<NavigationNode>> find_node_in_children(
142 GameObject& parent) const noexcept;
143};
Base class for all components that can be attached to GameObjects.
Definition component.h:24
const std::optional< std::reference_wrapper< GameObject > > & parent() const noexcept
Gets the parent GameObject of this component.
Concept to constrain types to be derived from Component.
Definition gameObject.h:33
Component representing a navigation graph for AI pathfinding.
Definition navigation_graph.h:29
int max_drop_distance() const noexcept
NavigationGraph & generate_graph()
Generates the navigation graph by populating it with nodes.
std::optional< GraphPosition > get_position_of_node(const NavigationNode &node) const
void update(float dt) override
Update is left empty as the navigation graph does not require per-frame updates.
Definition navigation_graph.h:35
GraphPosition world_to_graph_position(const Vector3 &world_position) const
std::optional< std::reference_wrapper< NavigationNode > > get_node(const GraphPosition &position) const
Retrieves a navigation node at the specified position.
NavigationGraph & remove_node(const GraphPosition &position)
Removes a navigation node at the specified position.
std::optional< std::reference_wrapper< NavigationNode > > get_closest_node(const GraphPosition &position) const
Finds the closest navigation node to the specified position.
int max_jump_distance() const noexcept
NavigationGraph & add_node(const GraphPosition &position, NavigationNode &node)
Adds a navigation node at the specified position.
NavigationGraph & stride(int stride) noexcept
NavigationGraph(int grid_size=16, int stride=10)
int get_stride() const noexcept
std::optional< std::reference_wrapper< NavigationNode > > get_closest_node(const Vector3 &world_position) const
int get_grid_max_x() const noexcept
int get_grid_size() const noexcept
NavigationGraph & clear()
Clears all nodes from the navigation graph.
std::unordered_map< GraphPosition, std::reference_wrapper< NavigationNode >, GraphPositionHash > & get_nodes()
std::string type_name() const override
Provides a consistent type name for the component.
int get_grid_max_y() const noexcept
Component representing a navigation node in a navigation graph.
Definition navigation_node.h:25
Represents a 3D vector with x, y, and z components. This class provides basic vector operations such ...
Definition vector3.h:8
Hash function for GraphPosition to be used in unordered containers. Combines the hash values of the x...
Definition graph.h:41
Structure representing a position in the navigation graph.
Definition graph.h:29