@ -32,7 +32,7 @@
# include "core/math/math_funcs.h"
void ProximityGroup : : clear_groups( ) {
void ProximityGroup : : _ clear_groups( ) {
Map < StringName , uint32_t > : : Element * E ;
@ -45,22 +45,22 @@ void ProximityGroup::clear_groups() {
if ( E - > get ( ) ! = group_version ) {
remove_list [ num + + ] = E - > key ( ) ;
} ;
}
E = E - > next ( ) ;
} ;
}
for ( int i = 0 ; i < num ; i + + ) {
groups . erase ( remove_list [ i ] ) ;
} ;
} ;
}
}
if ( E ) {
clear_groups( ) ; // call until we go through the whole list
} ;
} ;
_ clear_groups( ) ; // call until we go through the whole list
}
}
void ProximityGroup : : update_groups( ) {
void ProximityGroup : : _ update_groups( ) {
if ( grid_radius = = Vector3 ( 0 , 0 , 0 ) )
return ;
@ -71,12 +71,12 @@ void ProximityGroup::update_groups() {
Vector3 vcell = pos / cell_size ;
int cell [ 3 ] = { Math : : fast_ftoi ( vcell . x ) , Math : : fast_ftoi ( vcell . y ) , Math : : fast_ftoi ( vcell . z ) } ;
add_groups( cell , group_name , 0 ) ;
_ add_groups( cell , group_name , 0 ) ;
clear_groups( ) ;
} ;
_ clear_groups( ) ;
}
void ProximityGroup : : add_groups( int * p_cell , String p_base , int p_depth ) {
void ProximityGroup : : _ add_groups( int * p_cell , String p_base , int p_depth ) {
p_base = p_base + " | " ;
if ( grid_radius [ p_depth ] = = 0 ) {
@ -84,9 +84,9 @@ void ProximityGroup::add_groups(int *p_cell, String p_base, int p_depth) {
if ( p_depth = = 2 ) {
_new_group ( p_base ) ;
} else {
add_groups( p_cell , p_base , p_depth + 1 ) ;
} ;
} ;
_ add_groups( p_cell , p_base , p_depth + 1 ) ;
}
}
int start = p_cell [ p_depth ] - grid_radius [ p_depth ] ;
int end = p_cell [ p_depth ] + grid_radius [ p_depth ] ;
@ -97,20 +97,20 @@ void ProximityGroup::add_groups(int *p_cell, String p_base, int p_depth) {
if ( p_depth = = 2 ) {
_new_group ( gname ) ;
} else {
add_groups( p_cell , gname , p_depth + 1 ) ;
} ;
} ;
} ;
_ add_groups( p_cell , gname , p_depth + 1 ) ;
}
}
}
void ProximityGroup : : _new_group ( StringName p_name ) {
const Map < StringName , uint32_t > : : Element * E = groups . find ( p_name ) ;
if ( ! E ) {
add_to_group ( p_name ) ;
} ;
}
groups [ p_name ] = group_version ;
} ;
}
void ProximityGroup : : _notification ( int p_what ) {
@ -118,65 +118,65 @@ void ProximityGroup::_notification(int p_what) {
case NOTIFICATION_EXIT_TREE :
+ + group_version ;
clear_groups( ) ;
_ clear_groups( ) ;
break ;
case NOTIFICATION_TRANSFORM_CHANGED :
update_groups( ) ;
_ update_groups( ) ;
break ;
} ;
} ;
}
}
void ProximityGroup : : broadcast ( String p_ na me, Variant p_param s) {
void ProximityGroup : : broadcast ( String p_ method , Variant p_param eter s) {
Map < StringName , uint32_t > : : Element * E ;
E = groups . front ( ) ;
while ( E ) {
get_tree ( ) - > call_group_flags ( SceneTree : : GROUP_CALL_DEFAULT , E - > key ( ) , " _proximity_group_broadcast " , p_ na me, p_param s) ;
get_tree ( ) - > call_group_flags ( SceneTree : : GROUP_CALL_DEFAULT , E - > key ( ) , " _proximity_group_broadcast " , p_ method , p_param eter s) ;
E = E - > next ( ) ;
} ;
} ;
}
}
void ProximityGroup : : _proximity_group_broadcast ( String p_ na me, Variant p_param s) {
void ProximityGroup : : _proximity_group_broadcast ( String p_ method , Variant p_param eter s) {
if ( dispatch_mode = = MODE_PROXY ) {
get_parent ( ) - > call ( p_ na me, p_param s) ;
get_parent ( ) - > call ( p_ method , p_param eter s) ;
} else {
emit_signal ( " broadcast " , p_ na me, p_param s) ;
} ;
} ;
emit_signal ( " broadcast " , p_ method , p_param eter s) ;
}
}
void ProximityGroup : : set_group_name ( const String & p_group_name ) {
group_name = p_group_name ;
} ;
}
String ProximityGroup : : get_group_name ( ) const {
return group_name ;
} ;
}
void ProximityGroup : : set_dispatch_mode ( DispatchMode p_mode ) {
dispatch_mode = p_mode ;
} ;
}
ProximityGroup : : DispatchMode ProximityGroup : : get_dispatch_mode ( ) const {
return dispatch_mode ;
} ;
}
void ProximityGroup : : set_grid_radius ( const Vector3 & p_radius ) {
grid_radius = p_radius ;
} ;
}
Vector3 ProximityGroup : : get_grid_radius ( ) const {
return grid_radius ;
} ;
}
void ProximityGroup : : _bind_methods ( ) {
@ -186,18 +186,20 @@ void ProximityGroup::_bind_methods() {
ClassDB : : bind_method ( D_METHOD ( " get_dispatch_mode " ) , & ProximityGroup : : get_dispatch_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " set_grid_radius " , " radius " ) , & ProximityGroup : : set_grid_radius ) ;
ClassDB : : bind_method ( D_METHOD ( " get_grid_radius " ) , & ProximityGroup : : get_grid_radius ) ;
ClassDB : : bind_method ( D_METHOD ( " broadcast " , " name " , " parameters " ) , & ProximityGroup : : broadcast ) ;
ClassDB : : bind_method ( D_METHOD ( " _proximity_group_broadcast " , " name " , " params " ) , & ProximityGroup : : _proximity_group_broadcast ) ;
ClassDB : : bind_method ( D_METHOD ( " broadcast " , " method " , " parameters " ) , & ProximityGroup : : broadcast ) ;
ClassDB : : bind_method ( D_METHOD ( " _proximity_group_broadcast " , " method " , " parameters " ) , & ProximityGroup : : _proximity_group_broadcast ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : STRING , " group_name " ) , " set_group_name " , " get_group_name " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " dispatch_mode " , PROPERTY_HINT_ENUM , " Proxy,Signal " ) , " set_dispatch_mode " , " get_dispatch_mode " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 , " grid_radius " ) , " set_grid_radius " , " get_grid_radius " ) ;
ADD_SIGNAL ( MethodInfo ( " broadcast " , PropertyInfo ( Variant : : STRING , " group_na me" ) , PropertyInfo ( Variant : : ARRAY , " parameters " ) ) ) ;
ADD_SIGNAL ( MethodInfo ( " broadcast " , PropertyInfo ( Variant : : STRING , " method " ) , PropertyInfo ( Variant : : ARRAY , " parameters " ) ) ) ;
BIND_ENUM_CONSTANT ( MODE_PROXY ) ;
BIND_ENUM_CONSTANT ( MODE_SIGNAL ) ;
} ;
}
ProximityGroup : : ProximityGroup ( ) {
@ -207,8 +209,4 @@ ProximityGroup::ProximityGroup() {
cell_size = 1.0 ;
grid_radius = Vector3 ( 1 , 1 , 1 ) ;
set_notify_transform ( true ) ;
} ;
ProximityGroup : : ~ ProximityGroup ( ) {
} ;
}