@ -33,13 +33,13 @@
# include "scene/scene_string_names.h"
# include "servers/audio_server.h"
void Area3D : : set_ space_override_mode( SpaceOverride p_mode ) {
space_override = p_mode ;
PhysicsServer3D : : get_singleton ( ) - > area_set_ space_override_mode ( get_rid ( ) , PhysicsServer3D : : A reaSpaceOverrideMode( p_mode ) ) ;
void Area3D : : set_ gravity_ space_override_mode( SpaceOverride p_mode ) {
gravity_ space_override = p_mode ;
PhysicsServer3D : : get_singleton ( ) - > area_set_ param ( get_rid ( ) , PhysicsServer3D : : A REA_PARAM_GRAVITY_OVERRIDE_MODE, p_mode ) ;
}
Area3D : : SpaceOverride Area3D : : get_ space_override_mode( ) const {
return space_override;
Area3D : : SpaceOverride Area3D : : get_ gravity_ space_override_mode( ) const {
return gravity_ space_override;
}
void Area3D : : set_gravity_is_point ( bool p_enabled ) {
@ -51,21 +51,30 @@ bool Area3D::is_gravity_a_point() const {
return gravity_is_point ;
}
void Area3D : : set_gravity_ distance_scale( real_t p_scale ) {
void Area3D : : set_gravity_ point_ distance_scale( real_t p_scale ) {
gravity_distance_scale = p_scale ;
PhysicsServer3D : : get_singleton ( ) - > area_set_param ( get_rid ( ) , PhysicsServer3D : : AREA_PARAM_GRAVITY_DISTANCE_SCALE , p_scale ) ;
}
real_t Area3D : : get_gravity_ distance_scale( ) const {
real_t Area3D : : get_gravity_ point_ distance_scale( ) const {
return gravity_distance_scale ;
}
void Area3D : : set_gravity_ vector( const Vector3 & p_vec ) {
gravity_vec = p_ vec ;
PhysicsServer3D : : get_singleton ( ) - > area_set_param ( get_rid ( ) , PhysicsServer3D : : AREA_PARAM_GRAVITY_VECTOR , p_ vec ) ;
void Area3D : : set_gravity_ point_center( const Vector3 & p_center ) {
gravity_vec = p_ center ;
PhysicsServer3D : : get_singleton ( ) - > area_set_param ( get_rid ( ) , PhysicsServer3D : : AREA_PARAM_GRAVITY_VECTOR , p_ center ) ;
}
Vector3 Area3D : : get_gravity_vector ( ) const {
const Vector3 & Area3D : : get_gravity_point_center ( ) const {
return gravity_vec ;
}
void Area3D : : set_gravity_direction ( const Vector3 & p_direction ) {
gravity_vec = p_direction ;
PhysicsServer3D : : get_singleton ( ) - > area_set_param ( get_rid ( ) , PhysicsServer3D : : AREA_PARAM_GRAVITY_VECTOR , p_direction ) ;
}
const Vector3 & Area3D : : get_gravity_direction ( ) const {
return gravity_vec ;
}
@ -78,6 +87,24 @@ real_t Area3D::get_gravity() const {
return gravity ;
}
void Area3D : : set_linear_damp_space_override_mode ( SpaceOverride p_mode ) {
linear_damp_space_override = p_mode ;
PhysicsServer3D : : get_singleton ( ) - > area_set_param ( get_rid ( ) , PhysicsServer3D : : AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE , p_mode ) ;
}
Area3D : : SpaceOverride Area3D : : get_linear_damp_space_override_mode ( ) const {
return linear_damp_space_override ;
}
void Area3D : : set_angular_damp_space_override_mode ( SpaceOverride p_mode ) {
angular_damp_space_override = p_mode ;
PhysicsServer3D : : get_singleton ( ) - > area_set_param ( get_rid ( ) , PhysicsServer3D : : AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE , p_mode ) ;
}
Area3D : : SpaceOverride Area3D : : get_angular_damp_space_override_mode ( ) const {
return angular_damp_space_override ;
}
void Area3D : : set_linear_damp ( real_t p_linear_damp ) {
linear_damp = p_linear_damp ;
PhysicsServer3D : : get_singleton ( ) - > area_set_param ( get_rid ( ) , PhysicsServer3D : : AREA_PARAM_LINEAR_DAMP , p_linear_damp ) ;
@ -579,27 +606,58 @@ void Area3D::_validate_property(PropertyInfo &property) const {
}
property . hint_string = options ;
} else if ( property . name . begins_with ( " gravity " ) & & property . name ! = " gravity_space_override " ) {
if ( gravity_space_override = = SPACE_OVERRIDE_DISABLED ) {
property . usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL ;
} else {
if ( gravity_is_point ) {
if ( property . name = = " gravity_direction " ) {
property . usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL ;
}
} else {
if ( property . name . begins_with ( " gravity_point_ " ) ) {
property . usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL ;
}
}
}
} else if ( property . name . begins_with ( " linear_damp " ) & & property . name ! = " linear_damp_space_override " ) {
if ( linear_damp_space_override = = SPACE_OVERRIDE_DISABLED ) {
property . usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL ;
}
} else if ( property . name . begins_with ( " angular_damp " ) & & property . name ! = " angular_damp_space_override " ) {
if ( angular_damp_space_override = = SPACE_OVERRIDE_DISABLED ) {
property . usage = PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL ;
}
}
CollisionObject3D : : _validate_property ( property ) ;
}
void Area3D : : _bind_methods ( ) {
ClassDB : : bind_method ( D_METHOD ( " set_space_override_mode " , " enable " ) , & Area3D : : set_space_override_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " get_space_override_mode " ) , & Area3D : : get_space_override_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " set_ gravity_ space_override_mode" , " space_override_mod e" ) , & Area3D : : set _gravity _space_override_mode) ;
ClassDB : : bind_method ( D_METHOD ( " get_ gravity_ space_override_mode" ) , & Area3D : : get _gravity _space_override_mode) ;
ClassDB : : bind_method ( D_METHOD ( " set_gravity_is_point " , " enable " ) , & Area3D : : set_gravity_is_point ) ;
ClassDB : : bind_method ( D_METHOD ( " is_gravity_a_point " ) , & Area3D : : is_gravity_a_point ) ;
ClassDB : : bind_method ( D_METHOD ( " set_gravity_distance_scale " , " distance_scale " ) , & Area3D : : set_gravity_distance_scale ) ;
ClassDB : : bind_method ( D_METHOD ( " get_gravity_distance_scale " ) , & Area3D : : get_gravity_distance_scale ) ;
ClassDB : : bind_method ( D_METHOD ( " set_gravity_ point_ distance_scale" , " distance_scale " ) , & Area3D : : set_gravity _point _distance_scale) ;
ClassDB : : bind_method ( D_METHOD ( " get_gravity_ point_ distance_scale" ) , & Area3D : : get_gravity _point _distance_scale) ;
ClassDB : : bind_method ( D_METHOD ( " set_gravity_vector " , " vector " ) , & Area3D : : set_gravity_vector ) ;
ClassDB : : bind_method ( D_METHOD ( " get_gravity_vector " ) , & Area3D : : get_gravity_vector ) ;
ClassDB : : bind_method ( D_METHOD ( " set_gravity_point_center " , " center " ) , & Area3D : : set_gravity_point_center ) ;
ClassDB : : bind_method ( D_METHOD ( " get_gravity_point_center " ) , & Area3D : : get_gravity_point_center ) ;
ClassDB : : bind_method ( D_METHOD ( " set_gravity_direction " , " direction " ) , & Area3D : : set_gravity_direction ) ;
ClassDB : : bind_method ( D_METHOD ( " get_gravity_direction " ) , & Area3D : : get_gravity_direction ) ;
ClassDB : : bind_method ( D_METHOD ( " set_gravity " , " gravity " ) , & Area3D : : set_gravity ) ;
ClassDB : : bind_method ( D_METHOD ( " get_gravity " ) , & Area3D : : get_gravity ) ;
ClassDB : : bind_method ( D_METHOD ( " set_linear_damp_space_override_mode " , " space_override_mode " ) , & Area3D : : set_linear_damp_space_override_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " get_linear_damp_space_override_mode " ) , & Area3D : : get_linear_damp_space_override_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " set_angular_damp_space_override_mode " , " space_override_mode " ) , & Area3D : : set_angular_damp_space_override_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " get_angular_damp_space_override_mode " ) , & Area3D : : get_angular_damp_space_override_mode ) ;
ClassDB : : bind_method ( D_METHOD ( " set_angular_damp " , " angular_damp " ) , & Area3D : : set_angular_damp ) ;
ClassDB : : bind_method ( D_METHOD ( " get_angular_damp " ) , & Area3D : : get_angular_damp ) ;
@ -662,14 +720,23 @@ void Area3D::_bind_methods() {
ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL , " monitorable " ) , " set_monitorable " , " is_monitorable " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " priority " , PROPERTY_HINT_RANGE , " 0,128,1 " ) , " set_priority " , " get_priority " ) ;
ADD_GROUP ( " Physics Overrides " , " " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " space_override " , PROPERTY_HINT_ENUM , " Disabled,Combine,Combine-Replace,Replace,Replace-Combine " ) , " set_space_override_mode " , " get_space_override_mode " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL , " gravity_point " ) , " set_gravity_is_point " , " is_gravity_a_point " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT , " gravity_distance_scale " , PROPERTY_HINT_RANGE , " 0,1024,0.001,or_greater,exp " ) , " set_gravity_distance_scale " , " get_gravity_distance_scale " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 , " gravity_vec " ) , " set_gravity_vector " , " get_gravity_vector " ) ;
ADD_GROUP ( " Gravity " , " gravity_ " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " gravity_space_override " , PROPERTY_HINT_ENUM , " Disabled,Combine,Combine-Replace,Replace,Replace-Combine " , PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED ) , " set_gravity_space_override_mode " , " get_gravity_space_override_mode " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL , " gravity_point " , PROPERTY_HINT_NONE , " " , PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED ) , " set_gravity_is_point " , " is_gravity_a_point " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT , " gravity_point_distance_scale " , PROPERTY_HINT_RANGE , " 0,1024,0.001,or_greater,exp " ) , " set_gravity_point_distance_scale " , " get_gravity_point_distance_scale " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 , " gravity_point_center " ) , " set_gravity_point_center " , " get_gravity_point_center " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 , " gravity_direction " ) , " set_gravity_direction " , " get_gravity_direction " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT , " gravity " , PROPERTY_HINT_RANGE , " -32,32,0.001,or_lesser,or_greater " ) , " set_gravity " , " get_gravity " ) ;
ADD_GROUP ( " Linear Damp " , " linear_damp_ " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " linear_damp_space_override " , PROPERTY_HINT_ENUM , " Disabled,Combine,Combine-Replace,Replace,Replace-Combine " , PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED ) , " set_linear_damp_space_override_mode " , " get_linear_damp_space_override_mode " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT , " linear_damp " , PROPERTY_HINT_RANGE , " 0,100,0.001,or_greater " ) , " set_linear_damp " , " get_linear_damp " ) ;
ADD_GROUP ( " Angular Damp " , " angular_damp_ " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : INT , " angular_damp_space_override " , PROPERTY_HINT_ENUM , " Disabled,Combine,Combine-Replace,Replace,Replace-Combine " , PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED ) , " set_angular_damp_space_override_mode " , " get_angular_damp_space_override_mode " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT , " angular_damp " , PROPERTY_HINT_RANGE , " 0,100,0.001,or_greater " ) , " set_angular_damp " , " get_angular_damp " ) ;
ADD_GROUP ( " Wind " , " wind_ " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT , " wind_force_magnitude " , PROPERTY_HINT_RANGE , " 0,10,0.001,or_greater " ) , " set_wind_force_magnitude " , " get_wind_force_magnitude " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT , " wind_attenuation_factor " , PROPERTY_HINT_RANGE , " 0.0,3.0,0.001,or_greater " ) , " set_wind_attenuation_factor " , " get_wind_attenuation_factor " ) ;
ADD_PROPERTY ( PropertyInfo ( Variant : : NODE_PATH , " wind_source_path " , PROPERTY_HINT_NODE_PATH_VALID_TYPES , " Node3D " ) , " set_wind_source_path " , " get_wind_source_path " ) ;
@ -694,7 +761,7 @@ void Area3D::_bind_methods() {
Area3D : : Area3D ( ) :
CollisionObject3D ( PhysicsServer3D : : get_singleton ( ) - > area_create ( ) , true ) {
set_gravity ( 9.8 ) ;
set_gravity_ vector ( Vector3 ( 0 , - 1 , 0 ) ) ;
set_gravity_ direction ( Vector3 ( 0 , - 1 , 0 ) ) ;
set_monitoring ( true ) ;
set_monitorable ( true ) ;
}