@ -108,6 +108,24 @@ bool NavigationMesh::get_collision_mask_bit(int p_bit) const {
return get_collision_mask ( ) & ( 1 < < p_bit ) ;
}
void NavigationMesh : : set_source_geometry_mode ( int p_geometry_mode ) {
ERR_FAIL_INDEX ( p_geometry_mode , SOURCE_GEOMETRY_MAX ) ;
source_geometry_mode = static_cast < SourceGeometryMode > ( p_geometry_mode ) ;
_change_notify ( ) ;
}
int NavigationMesh : : get_source_geometry_mode ( ) const {
return source_geometry_mode ;
}
void NavigationMesh : : set_source_group_name ( StringName p_group_name ) {
source_group_name = p_group_name ;
}
StringName NavigationMesh : : get_source_group_name ( ) const {
return source_group_name ;
}
void NavigationMesh : : set_cell_size ( float p_value ) {
cell_size = p_value ;
}
@ -387,6 +405,12 @@ void NavigationMesh::_bind_methods() {
ClassDB : : bind_method ( D_METHOD ( " set_collision_mask_bit " , " bit " , " value " ) , & NavigationMesh : : set_collision_mask_bit ) ;
ClassDB : : bind_method ( D_METHOD ( " get_collision_mask_bit " , " bit " ) , & NavigationMesh : : get_collision_mask_bit ) ;
ClassDB : : bind_method ( D_METHOD ( " set_source_geometry_mode " , " mask " ) , & NavigationMesh : : set_source_geometry_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " get_source_geometry_mode " ) , & NavigationMesh : : get_source_geometry_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " set_source_group_name " , " mask " ) , & NavigationMesh : : set_source_group_name ) ;
ClassDB : : bind_method ( D_METHOD ( " get_source_group_name " ) , & NavigationMesh : : get_source_group_name ) ;
ClassDB : : bind_method ( D_METHOD ( " set_cell_size " , " cell_size " ) , & NavigationMesh : : set_cell_size ) ;
ClassDB : : bind_method ( D_METHOD ( " get_cell_size " ) , & NavigationMesh : : get_cell_size ) ;
@ -462,6 +486,8 @@ void NavigationMesh::_bind_methods() {
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " sample_partition_type/sample_partition_type " , PROPERTY_HINT_ENUM , " Watershed,Monotone,Layers " ) , " set_sample_partition_type " , " get_sample_partition_type " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " geometry/parsed_geometry_type " , PROPERTY_HINT_ENUM , " Mesh Instances,Static Colliders,Both " ) , " set_parsed_geometry_type " , " get_parsed_geometry_type " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " geometry/collision_mask " , PROPERTY_HINT_LAYERS_3D_PHYSICS ) , " set_collision_mask " , " get_collision_mask " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " geometry/source_geometry_mode " , PROPERTY_HINT_ENUM , " Navmesh Children, Group With Children, Group Explicit " ) , " set_source_geometry_mode " , " get_source_geometry_mode " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : STRING , " geometry/source_group_name " ) , " set_source_group_name " , " get_source_group_name " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : REAL , " cell/size " , PROPERTY_HINT_RANGE , " 0.1,1.0,0.01,or_greater " ) , " set_cell_size " , " get_cell_size " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : REAL , " cell/height " , PROPERTY_HINT_RANGE , " 0.1,1.0,0.01,or_greater " ) , " set_cell_height " , " get_cell_height " ) ;
@ -489,6 +515,13 @@ void NavigationMesh::_validate_property(PropertyInfo &property) const {
return ;
}
}
if ( property . name = = " geometry/source_group_name " ) {
if ( source_geometry_mode = = SOURCE_GEOMETRY_NAVMESH_CHILDREN ) {
property . usage = 0 ;
return ;
}
}
}
NavigationMesh : : NavigationMesh ( ) {
@ -509,6 +542,8 @@ NavigationMesh::NavigationMesh() {
partition_type = SAMPLE_PARTITION_WATERSHED ;
parsed_geometry_type = PARSED_GEOMETRY_MESH_INSTANCES ;
collision_mask = 0xFFFFFFFF ;
source_geometry_mode = SOURCE_GEOMETRY_NAVMESH_CHILDREN ;
source_group_name = " navmesh " ;
filter_low_hanging_obstacles = false ;
filter_ledge_spans = false ;
filter_walkable_low_height_spans = false ;