mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 15:21:56 -05:00
Add function to get navigation link iteration id from NavigationServer
Adds function to get navigation link iteration id from NavigationServer.
This commit is contained in:
@@ -344,6 +344,14 @@
|
||||
Returns the enter cost of this [param link].
|
||||
</description>
|
||||
</method>
|
||||
<method name="link_get_iteration_id" qualifiers="const">
|
||||
<return type="int" />
|
||||
<param index="0" name="link" type="RID" />
|
||||
<description>
|
||||
Returns the current iteration ID of the navigation link. Every time the navigation link changes and synchronizes, the iteration ID increases. An iteration ID of [code]0[/code] means the navigation link has never synchronized.
|
||||
[b]Note:[/b] The iteration ID will wrap around to [code]1[/code] after reaching its range limit.
|
||||
</description>
|
||||
</method>
|
||||
<method name="link_get_map" qualifiers="const">
|
||||
<return type="RID" />
|
||||
<param index="0" name="link" type="RID" />
|
||||
|
||||
@@ -376,6 +376,14 @@
|
||||
Returns the enter cost of this [param link].
|
||||
</description>
|
||||
</method>
|
||||
<method name="link_get_iteration_id" qualifiers="const">
|
||||
<return type="int" />
|
||||
<param index="0" name="link" type="RID" />
|
||||
<description>
|
||||
Returns the current iteration ID of the navigation link. Every time the navigation link changes and synchronizes, the iteration ID increases. An iteration ID of [code]0[/code] means the navigation link has never synchronized.
|
||||
[b]Note:[/b] The iteration ID will wrap around to [code]1[/code] after reaching its range limit.
|
||||
</description>
|
||||
</method>
|
||||
<method name="link_get_map" qualifiers="const">
|
||||
<return type="RID" />
|
||||
<param index="0" name="link" type="RID" />
|
||||
|
||||
@@ -644,6 +644,13 @@ RID GodotNavigationServer2D::link_create() {
|
||||
return rid;
|
||||
}
|
||||
|
||||
uint32_t GodotNavigationServer2D::link_get_iteration_id(RID p_link) const {
|
||||
NavLink2D *link = link_owner.get_or_null(p_link);
|
||||
ERR_FAIL_NULL_V(link, 0);
|
||||
|
||||
return link->get_iteration_id();
|
||||
}
|
||||
|
||||
COMMAND_2(link_set_map, RID, p_link, RID, p_map) {
|
||||
NavLink2D *link = link_owner.get_or_null(p_link);
|
||||
ERR_FAIL_NULL(link);
|
||||
|
||||
@@ -177,6 +177,7 @@ public:
|
||||
virtual Rect2 region_get_bounds(RID p_region) const override;
|
||||
|
||||
virtual RID link_create() override;
|
||||
virtual uint32_t link_get_iteration_id(RID p_link) const override;
|
||||
|
||||
/// Set the map of this link.
|
||||
COMMAND_2(link_set_map, RID, p_link, RID, p_map);
|
||||
|
||||
@@ -141,6 +141,10 @@ bool NavLink2D::is_dirty() const {
|
||||
}
|
||||
|
||||
void NavLink2D::sync() {
|
||||
if (link_dirty) {
|
||||
iteration_id = iteration_id % UINT32_MAX + 1;
|
||||
}
|
||||
|
||||
link_dirty = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,10 +57,14 @@ class NavLink2D : public NavBase2D {
|
||||
|
||||
SelfList<NavLink2D> sync_dirty_request_list_element;
|
||||
|
||||
uint32_t iteration_id = 0;
|
||||
|
||||
public:
|
||||
NavLink2D();
|
||||
~NavLink2D();
|
||||
|
||||
uint32_t get_iteration_id() const { return iteration_id; }
|
||||
|
||||
void set_map(NavMap2D *p_map);
|
||||
NavMap2D *get_map() const {
|
||||
return map;
|
||||
|
||||
@@ -613,6 +613,13 @@ RID GodotNavigationServer3D::link_create() {
|
||||
return rid;
|
||||
}
|
||||
|
||||
uint32_t GodotNavigationServer3D::link_get_iteration_id(RID p_link) const {
|
||||
NavLink3D *link = link_owner.get_or_null(p_link);
|
||||
ERR_FAIL_NULL_V(link, 0);
|
||||
|
||||
return link->get_iteration_id();
|
||||
}
|
||||
|
||||
COMMAND_2(link_set_map, RID, p_link, RID, p_map) {
|
||||
NavLink3D *link = link_owner.get_or_null(p_link);
|
||||
ERR_FAIL_NULL(link);
|
||||
|
||||
@@ -185,6 +185,7 @@ public:
|
||||
virtual AABB region_get_bounds(RID p_region) const override;
|
||||
|
||||
virtual RID link_create() override;
|
||||
virtual uint32_t link_get_iteration_id(RID p_link) const override;
|
||||
COMMAND_2(link_set_map, RID, p_link, RID, p_map);
|
||||
virtual RID link_get_map(RID p_link) const override;
|
||||
COMMAND_2(link_set_enabled, RID, p_link, bool, p_enabled);
|
||||
|
||||
@@ -141,6 +141,10 @@ bool NavLink3D::is_dirty() const {
|
||||
}
|
||||
|
||||
void NavLink3D::sync() {
|
||||
if (link_dirty) {
|
||||
iteration_id = iteration_id % UINT32_MAX + 1;
|
||||
}
|
||||
|
||||
link_dirty = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,10 +57,14 @@ class NavLink3D : public NavBase3D {
|
||||
|
||||
SelfList<NavLink3D> sync_dirty_request_list_element;
|
||||
|
||||
uint32_t iteration_id = 0;
|
||||
|
||||
public:
|
||||
NavLink3D();
|
||||
~NavLink3D();
|
||||
|
||||
uint32_t get_iteration_id() const { return iteration_id; }
|
||||
|
||||
void set_map(NavMap3D *p_map);
|
||||
NavMap3D *get_map() const {
|
||||
return map;
|
||||
|
||||
@@ -102,6 +102,7 @@ void NavigationServer2D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("region_get_bounds", "region"), &NavigationServer2D::region_get_bounds);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("link_create"), &NavigationServer2D::link_create);
|
||||
ClassDB::bind_method(D_METHOD("link_get_iteration_id", "link"), &NavigationServer2D::link_get_iteration_id);
|
||||
ClassDB::bind_method(D_METHOD("link_set_map", "link", "map"), &NavigationServer2D::link_set_map);
|
||||
ClassDB::bind_method(D_METHOD("link_get_map", "link"), &NavigationServer2D::link_get_map);
|
||||
ClassDB::bind_method(D_METHOD("link_set_enabled", "link", "enabled"), &NavigationServer2D::link_set_enabled);
|
||||
|
||||
@@ -161,6 +161,7 @@ public:
|
||||
|
||||
/// Creates a new link between positions in the nav map.
|
||||
virtual RID link_create() = 0;
|
||||
virtual uint32_t link_get_iteration_id(RID p_link) const = 0;
|
||||
|
||||
/// Set the map of this link.
|
||||
virtual void link_set_map(RID p_link, RID p_map) = 0;
|
||||
|
||||
@@ -90,6 +90,7 @@ public:
|
||||
Rect2 region_get_bounds(RID p_region) const override { return Rect2(); }
|
||||
|
||||
RID link_create() override { return RID(); }
|
||||
uint32_t link_get_iteration_id(RID p_link) const override { return 0; }
|
||||
void link_set_map(RID p_link, RID p_map) override {}
|
||||
RID link_get_map(RID p_link) const override { return RID(); }
|
||||
void link_set_enabled(RID p_link, bool p_enabled) override {}
|
||||
|
||||
@@ -115,6 +115,7 @@ void NavigationServer3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("region_get_bounds", "region"), &NavigationServer3D::region_get_bounds);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("link_create"), &NavigationServer3D::link_create);
|
||||
ClassDB::bind_method(D_METHOD("link_get_iteration_id", "link"), &NavigationServer3D::link_get_iteration_id);
|
||||
ClassDB::bind_method(D_METHOD("link_set_map", "link", "map"), &NavigationServer3D::link_set_map);
|
||||
ClassDB::bind_method(D_METHOD("link_get_map", "link"), &NavigationServer3D::link_get_map);
|
||||
ClassDB::bind_method(D_METHOD("link_set_enabled", "link", "enabled"), &NavigationServer3D::link_set_enabled);
|
||||
|
||||
@@ -185,6 +185,7 @@ public:
|
||||
|
||||
/// Creates a new link between positions in the nav map.
|
||||
virtual RID link_create() = 0;
|
||||
virtual uint32_t link_get_iteration_id(RID p_link) const = 0;
|
||||
|
||||
/// Set the map of this link.
|
||||
virtual void link_set_map(RID p_link, RID p_map) = 0;
|
||||
|
||||
@@ -102,6 +102,7 @@ public:
|
||||
AABB region_get_bounds(RID p_region) const override { return AABB(); }
|
||||
|
||||
RID link_create() override { return RID(); }
|
||||
uint32_t link_get_iteration_id(RID p_link) const override { return 0; }
|
||||
void link_set_map(RID p_link, RID p_map) override {}
|
||||
RID link_get_map(RID p_link) const override { return RID(); }
|
||||
void link_set_enabled(RID p_link, bool p_enabled) override {}
|
||||
|
||||
Reference in New Issue
Block a user