mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	Changes to 2D physics engine
-=-=-=-=-=-=-=-=-=-=-=-=-=-= -Removed "density" property -Added instead more flexible "angular damp" and "linear damp" -Added ability to override angular and linear damp in rigidbody -Added gravity scale option rigidbody Test well and iron out bugs, when it works the same will be moved to 3D
This commit is contained in:
		
							parent
							
								
									1ff0d5c4e5
								
							
						
					
					
						commit
						b51f645711
					
				
					 13 changed files with 188 additions and 42 deletions
				
			
		|  | @ -73,14 +73,25 @@ real_t Area2D::get_gravity() const{ | ||||||
| 	return gravity; | 	return gravity; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Area2D::set_density(real_t p_density){ | void Area2D::set_linear_damp(real_t p_linear_damp){ | ||||||
| 
 | 
 | ||||||
| 	density=p_density; | 	linear_damp=p_linear_damp; | ||||||
| 	Physics2DServer::get_singleton()->area_set_param(get_rid(),Physics2DServer::AREA_PARAM_DENSITY,p_density); | 	Physics2DServer::get_singleton()->area_set_param(get_rid(),Physics2DServer::AREA_PARAM_LINEAR_DAMP,p_linear_damp); | ||||||
| } | } | ||||||
| real_t Area2D::get_density() const{ | real_t Area2D::get_linear_damp() const{ | ||||||
| 
 | 
 | ||||||
| 	return density; | 	return linear_damp; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Area2D::set_angular_damp(real_t p_angular_damp){ | ||||||
|  | 
 | ||||||
|  | 	angular_damp=p_angular_damp; | ||||||
|  | 	Physics2DServer::get_singleton()->area_set_param(get_rid(),Physics2DServer::AREA_PARAM_ANGULAR_DAMP,p_angular_damp); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | real_t Area2D::get_angular_damp() const{ | ||||||
|  | 
 | ||||||
|  | 	return angular_damp; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Area2D::set_priority(real_t p_priority){ | void Area2D::set_priority(real_t p_priority){ | ||||||
|  | @ -314,8 +325,11 @@ void Area2D::_bind_methods() { | ||||||
| 	ObjectTypeDB::bind_method(_MD("set_gravity","gravity"),&Area2D::set_gravity); | 	ObjectTypeDB::bind_method(_MD("set_gravity","gravity"),&Area2D::set_gravity); | ||||||
| 	ObjectTypeDB::bind_method(_MD("get_gravity"),&Area2D::get_gravity); | 	ObjectTypeDB::bind_method(_MD("get_gravity"),&Area2D::get_gravity); | ||||||
| 
 | 
 | ||||||
| 	ObjectTypeDB::bind_method(_MD("set_density","density"),&Area2D::set_density); | 	ObjectTypeDB::bind_method(_MD("set_linear_damp","linear_damp"),&Area2D::set_linear_damp); | ||||||
| 	ObjectTypeDB::bind_method(_MD("get_density"),&Area2D::get_density); | 	ObjectTypeDB::bind_method(_MD("get_linear_damp"),&Area2D::get_linear_damp); | ||||||
|  | 
 | ||||||
|  | 	ObjectTypeDB::bind_method(_MD("set_angular_damp","angular_damp"),&Area2D::set_angular_damp); | ||||||
|  | 	ObjectTypeDB::bind_method(_MD("get_angular_damp"),&Area2D::get_angular_damp); | ||||||
| 
 | 
 | ||||||
| 	ObjectTypeDB::bind_method(_MD("set_priority","priority"),&Area2D::set_priority); | 	ObjectTypeDB::bind_method(_MD("set_priority","priority"),&Area2D::set_priority); | ||||||
| 	ObjectTypeDB::bind_method(_MD("get_priority"),&Area2D::get_priority); | 	ObjectTypeDB::bind_method(_MD("get_priority"),&Area2D::get_priority); | ||||||
|  | @ -337,7 +351,8 @@ void Area2D::_bind_methods() { | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::BOOL,"gravity_point"),_SCS("set_gravity_is_point"),_SCS("is_gravity_a_point")); | 	ADD_PROPERTY( PropertyInfo(Variant::BOOL,"gravity_point"),_SCS("set_gravity_is_point"),_SCS("is_gravity_a_point")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"gravity_vec"),_SCS("set_gravity_vector"),_SCS("get_gravity_vector")); | 	ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"gravity_vec"),_SCS("set_gravity_vector"),_SCS("get_gravity_vector")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"gravity",PROPERTY_HINT_RANGE,"-1024,1024,0.01"),_SCS("set_gravity"),_SCS("get_gravity")); | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"gravity",PROPERTY_HINT_RANGE,"-1024,1024,0.01"),_SCS("set_gravity"),_SCS("get_gravity")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"density",PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_density"),_SCS("get_density")); | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"linear_damp",PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_linear_damp"),_SCS("get_linear_damp")); | ||||||
|  | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"angular_damp",PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_angular_damp"),_SCS("get_angular_damp")); | ||||||
| 	ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"priority",PROPERTY_HINT_RANGE,"0,128,1"),_SCS("set_priority"),_SCS("get_priority")); | 	ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"priority",PROPERTY_HINT_RANGE,"0,128,1"),_SCS("set_priority"),_SCS("get_priority")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::BOOL,"monitoring"),_SCS("set_enable_monitoring"),_SCS("is_monitoring_enabled")); | 	ADD_PROPERTY( PropertyInfo(Variant::BOOL,"monitoring"),_SCS("set_enable_monitoring"),_SCS("is_monitoring_enabled")); | ||||||
| 
 | 
 | ||||||
|  | @ -349,7 +364,8 @@ Area2D::Area2D() : CollisionObject2D(Physics2DServer::get_singleton()->area_crea | ||||||
| 	set_gravity(98);; | 	set_gravity(98);; | ||||||
| 	set_gravity_vector(Vector2(0,1)); | 	set_gravity_vector(Vector2(0,1)); | ||||||
| 	gravity_is_point=false; | 	gravity_is_point=false; | ||||||
| 	density=0.1; | 	linear_damp=0.1; | ||||||
|  | 	angular_damp=1; | ||||||
| 	locked=false; | 	locked=false; | ||||||
| 	priority=0; | 	priority=0; | ||||||
| 	monitoring=false; | 	monitoring=false; | ||||||
|  |  | ||||||
|  | @ -49,7 +49,8 @@ private: | ||||||
| 	Vector2 gravity_vec; | 	Vector2 gravity_vec; | ||||||
| 	real_t gravity; | 	real_t gravity; | ||||||
| 	bool gravity_is_point; | 	bool gravity_is_point; | ||||||
| 	real_t density; | 	real_t linear_damp; | ||||||
|  | 	real_t angular_damp; | ||||||
| 	int priority; | 	int priority; | ||||||
| 	bool monitoring; | 	bool monitoring; | ||||||
| 	bool locked; | 	bool locked; | ||||||
|  | @ -104,8 +105,11 @@ public: | ||||||
| 	void set_gravity(real_t p_gravity); | 	void set_gravity(real_t p_gravity); | ||||||
| 	real_t get_gravity() const; | 	real_t get_gravity() const; | ||||||
| 
 | 
 | ||||||
| 	void set_density(real_t p_density); | 	void set_linear_damp(real_t p_linear_damp); | ||||||
| 	real_t get_density() const; | 	real_t get_linear_damp() const; | ||||||
|  | 
 | ||||||
|  | 	void set_angular_damp(real_t p_angular_damp); | ||||||
|  | 	real_t get_angular_damp() const; | ||||||
| 
 | 
 | ||||||
| 	void set_priority(real_t p_priority); | 	void set_priority(real_t p_priority); | ||||||
| 	real_t get_priority() const; | 	real_t get_priority() const; | ||||||
|  |  | ||||||
|  | @ -496,6 +496,42 @@ real_t RigidBody2D::get_bounce() const{ | ||||||
| 	return bounce; | 	return bounce; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | void RigidBody2D::set_gravity_scale(real_t p_gravity_scale){ | ||||||
|  | 
 | ||||||
|  | 	gravity_scale=p_gravity_scale; | ||||||
|  | 	Physics2DServer::get_singleton()->body_set_param(get_rid(),Physics2DServer::BODY_PARAM_GRAVITY_SCALE,gravity_scale); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | real_t RigidBody2D::get_gravity_scale() const{ | ||||||
|  | 
 | ||||||
|  | 	return gravity_scale; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void RigidBody2D::set_linear_damp(real_t p_linear_damp){ | ||||||
|  | 
 | ||||||
|  | 	ERR_FAIL_COND(p_linear_damp<-1); | ||||||
|  | 	linear_damp=p_linear_damp; | ||||||
|  | 	Physics2DServer::get_singleton()->body_set_param(get_rid(),Physics2DServer::BODY_PARAM_LINEAR_DAMP,linear_damp); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | real_t RigidBody2D::get_linear_damp() const{ | ||||||
|  | 
 | ||||||
|  | 	return linear_damp; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void RigidBody2D::set_angular_damp(real_t p_angular_damp){ | ||||||
|  | 
 | ||||||
|  | 	ERR_FAIL_COND(p_angular_damp<-1); | ||||||
|  | 	angular_damp=p_angular_damp; | ||||||
|  | 	Physics2DServer::get_singleton()->body_set_param(get_rid(),Physics2DServer::BODY_PARAM_ANGULAR_DAMP,angular_damp); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | real_t RigidBody2D::get_angular_damp() const{ | ||||||
|  | 
 | ||||||
|  | 	return angular_damp; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void RigidBody2D::set_axis_velocity(const Vector2& p_axis) { | void RigidBody2D::set_axis_velocity(const Vector2& p_axis) { | ||||||
| 
 | 
 | ||||||
| 	Vector2 v = state? state->get_linear_velocity() : linear_velocity; | 	Vector2 v = state? state->get_linear_velocity() : linear_velocity; | ||||||
|  | @ -683,6 +719,15 @@ void RigidBody2D::_bind_methods() { | ||||||
| 	ObjectTypeDB::bind_method(_MD("set_bounce","bounce"),&RigidBody2D::set_bounce); | 	ObjectTypeDB::bind_method(_MD("set_bounce","bounce"),&RigidBody2D::set_bounce); | ||||||
| 	ObjectTypeDB::bind_method(_MD("get_bounce"),&RigidBody2D::get_bounce); | 	ObjectTypeDB::bind_method(_MD("get_bounce"),&RigidBody2D::get_bounce); | ||||||
| 
 | 
 | ||||||
|  | 	ObjectTypeDB::bind_method(_MD("set_gravity_scale","gravity_scale"),&RigidBody2D::set_gravity_scale); | ||||||
|  | 	ObjectTypeDB::bind_method(_MD("get_gravity_scale"),&RigidBody2D::get_gravity_scale); | ||||||
|  | 
 | ||||||
|  | 	ObjectTypeDB::bind_method(_MD("set_linear_damp","linear_damp"),&RigidBody2D::set_linear_damp); | ||||||
|  | 	ObjectTypeDB::bind_method(_MD("get_linear_damp"),&RigidBody2D::get_linear_damp); | ||||||
|  | 
 | ||||||
|  | 	ObjectTypeDB::bind_method(_MD("set_angular_damp","angular_damp"),&RigidBody2D::set_angular_damp); | ||||||
|  | 	ObjectTypeDB::bind_method(_MD("get_angular_damp"),&RigidBody2D::get_angular_damp); | ||||||
|  | 
 | ||||||
| 	ObjectTypeDB::bind_method(_MD("set_linear_velocity","linear_velocity"),&RigidBody2D::set_linear_velocity); | 	ObjectTypeDB::bind_method(_MD("set_linear_velocity","linear_velocity"),&RigidBody2D::set_linear_velocity); | ||||||
| 	ObjectTypeDB::bind_method(_MD("get_linear_velocity"),&RigidBody2D::get_linear_velocity); | 	ObjectTypeDB::bind_method(_MD("get_linear_velocity"),&RigidBody2D::get_linear_velocity); | ||||||
| 
 | 
 | ||||||
|  | @ -726,6 +771,7 @@ void RigidBody2D::_bind_methods() { | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"weight",PROPERTY_HINT_EXP_RANGE,"0.01,65535,0.01",PROPERTY_USAGE_EDITOR),_SCS("set_weight"),_SCS("get_weight")); | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"weight",PROPERTY_HINT_EXP_RANGE,"0.01,65535,0.01",PROPERTY_USAGE_EDITOR),_SCS("set_weight"),_SCS("get_weight")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"friction",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_friction"),_SCS("get_friction")); | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"friction",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_friction"),_SCS("get_friction")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"bounce",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_bounce"),_SCS("get_bounce")); | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"bounce",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_bounce"),_SCS("get_bounce")); | ||||||
|  | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"gravity_scale",PROPERTY_HINT_RANGE,"-128,128,0.01"),_SCS("set_gravity_scale"),_SCS("get_gravity_scale")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::BOOL,"custom_integrator"),_SCS("set_use_custom_integrator"),_SCS("is_using_custom_integrator")); | 	ADD_PROPERTY( PropertyInfo(Variant::BOOL,"custom_integrator"),_SCS("set_use_custom_integrator"),_SCS("is_using_custom_integrator")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::INT,"continuous_cd",PROPERTY_HINT_ENUM,"Disabled,Cast Ray,Cast Shape"),_SCS("set_continuous_collision_detection_mode"),_SCS("get_continuous_collision_detection_mode")); | 	ADD_PROPERTY( PropertyInfo(Variant::INT,"continuous_cd",PROPERTY_HINT_ENUM,"Disabled,Cast Ray,Cast Shape"),_SCS("set_continuous_collision_detection_mode"),_SCS("get_continuous_collision_detection_mode")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::INT,"contacts_reported"),_SCS("set_max_contacts_reported"),_SCS("get_max_contacts_reported")); | 	ADD_PROPERTY( PropertyInfo(Variant::INT,"contacts_reported"),_SCS("set_max_contacts_reported"),_SCS("get_max_contacts_reported")); | ||||||
|  | @ -734,6 +780,8 @@ void RigidBody2D::_bind_methods() { | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::BOOL,"can_sleep"),_SCS("set_can_sleep"),_SCS("is_able_to_sleep")); | 	ADD_PROPERTY( PropertyInfo(Variant::BOOL,"can_sleep"),_SCS("set_can_sleep"),_SCS("is_able_to_sleep")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"velocity/linear"),_SCS("set_linear_velocity"),_SCS("get_linear_velocity")); | 	ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"velocity/linear"),_SCS("set_linear_velocity"),_SCS("get_linear_velocity")); | ||||||
| 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"velocity/angular"),_SCS("set_angular_velocity"),_SCS("get_angular_velocity")); | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"velocity/angular"),_SCS("set_angular_velocity"),_SCS("get_angular_velocity")); | ||||||
|  | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"damp_override/linear",PROPERTY_HINT_RANGE,"-1,128,0.01"),_SCS("set_linear_damp"),_SCS("get_linear_damp")); | ||||||
|  | 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"damp_override/angular",PROPERTY_HINT_RANGE,"-1,128,0.01"),_SCS("set_angular_damp"),_SCS("get_angular_damp")); | ||||||
| 
 | 
 | ||||||
| 	ADD_SIGNAL( MethodInfo("body_enter_shape",PropertyInfo(Variant::INT,"body_id"),PropertyInfo(Variant::OBJECT,"body"),PropertyInfo(Variant::INT,"body_shape"),PropertyInfo(Variant::INT,"local_shape"))); | 	ADD_SIGNAL( MethodInfo("body_enter_shape",PropertyInfo(Variant::INT,"body_id"),PropertyInfo(Variant::OBJECT,"body"),PropertyInfo(Variant::INT,"body_shape"),PropertyInfo(Variant::INT,"local_shape"))); | ||||||
| 	ADD_SIGNAL( MethodInfo("body_exit_shape",PropertyInfo(Variant::INT,"body_id"),PropertyInfo(Variant::OBJECT,"body"),PropertyInfo(Variant::INT,"body_shape"),PropertyInfo(Variant::INT,"local_shape"))); | 	ADD_SIGNAL( MethodInfo("body_exit_shape",PropertyInfo(Variant::INT,"body_id"),PropertyInfo(Variant::OBJECT,"body"),PropertyInfo(Variant::INT,"body_shape"),PropertyInfo(Variant::INT,"local_shape"))); | ||||||
|  | @ -758,6 +806,11 @@ RigidBody2D::RigidBody2D() : PhysicsBody2D(Physics2DServer::BODY_MODE_RIGID) { | ||||||
| 	bounce=0; | 	bounce=0; | ||||||
| 	mass=1; | 	mass=1; | ||||||
| 	friction=1; | 	friction=1; | ||||||
|  | 
 | ||||||
|  | 	gravity_scale=1; | ||||||
|  | 	linear_damp=-1; | ||||||
|  | 	angular_damp=-1; | ||||||
|  | 
 | ||||||
| 	max_contacts_reported=0; | 	max_contacts_reported=0; | ||||||
| 	state=NULL; | 	state=NULL; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -119,6 +119,9 @@ private: | ||||||
| 	real_t bounce; | 	real_t bounce; | ||||||
| 	real_t mass; | 	real_t mass; | ||||||
| 	real_t friction; | 	real_t friction; | ||||||
|  | 	real_t gravity_scale; | ||||||
|  | 	real_t linear_damp; | ||||||
|  | 	real_t angular_damp; | ||||||
| 
 | 
 | ||||||
| 	Vector2 linear_velocity; | 	Vector2 linear_velocity; | ||||||
| 	real_t angular_velocity; | 	real_t angular_velocity; | ||||||
|  | @ -198,6 +201,15 @@ public: | ||||||
| 	void set_bounce(real_t p_bounce); | 	void set_bounce(real_t p_bounce); | ||||||
| 	real_t get_bounce() const; | 	real_t get_bounce() const; | ||||||
| 
 | 
 | ||||||
|  | 	void set_gravity_scale(real_t p_gravity_scale); | ||||||
|  | 	real_t get_gravity_scale() const; | ||||||
|  | 
 | ||||||
|  | 	void set_linear_damp(real_t p_linear_damp); | ||||||
|  | 	real_t get_linear_damp() const; | ||||||
|  | 
 | ||||||
|  | 	void set_angular_damp(real_t p_angular_damp); | ||||||
|  | 	real_t get_angular_damp() const; | ||||||
|  | 
 | ||||||
| 	void set_linear_velocity(const Vector2& p_velocity); | 	void set_linear_velocity(const Vector2& p_velocity); | ||||||
| 	Vector2 get_linear_velocity() const; | 	Vector2 get_linear_velocity() const; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -364,12 +364,12 @@ World2D::World2D() { | ||||||
| 	Physics2DServer::get_singleton()->space_set_active(space,true); | 	Physics2DServer::get_singleton()->space_set_active(space,true); | ||||||
| 	Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY,GLOBAL_DEF("physics_2d/default_gravity",98)); | 	Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY,GLOBAL_DEF("physics_2d/default_gravity",98)); | ||||||
| 	Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY_VECTOR,GLOBAL_DEF("physics_2d/default_gravity_vector",Vector2(0,1))); | 	Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY_VECTOR,GLOBAL_DEF("physics_2d/default_gravity_vector",Vector2(0,1))); | ||||||
| 	Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_DENSITY,GLOBAL_DEF("physics_2d/default_density",0.1)); | 	Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_LINEAR_DAMP,GLOBAL_DEF("physics_2d/default_density",0.1)); | ||||||
|  | 	Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_ANGULAR_DAMP,GLOBAL_DEF("physics_2d/default_density",1)); | ||||||
| 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONTACT_RECYCLE_RADIUS,1.0); | 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONTACT_RECYCLE_RADIUS,1.0); | ||||||
| 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONTACT_MAX_SEPARATION,1.5); | 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONTACT_MAX_SEPARATION,1.5); | ||||||
| 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION,0.3); | 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION,0.3); | ||||||
| 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_TRESHOLD,2); | 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_TRESHOLD,2); | ||||||
| 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_BODY_ANGULAR_VELOCITY_DAMP_RATIO,20); |  | ||||||
| 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS,0.2); | 	Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS,0.2); | ||||||
| 
 | 
 | ||||||
| 	indexer = memnew( SpatialIndexer2D ); | 	indexer = memnew( SpatialIndexer2D ); | ||||||
|  |  | ||||||
|  | @ -99,7 +99,8 @@ void Area2DSW::set_param(Physics2DServer::AreaParameter p_param, const Variant& | ||||||
| 		case Physics2DServer::AREA_PARAM_GRAVITY_VECTOR: gravity_vector=p_value; ; break; | 		case Physics2DServer::AREA_PARAM_GRAVITY_VECTOR: gravity_vector=p_value; ; break; | ||||||
| 		case Physics2DServer::AREA_PARAM_GRAVITY_IS_POINT: gravity_is_point=p_value; ; break; | 		case Physics2DServer::AREA_PARAM_GRAVITY_IS_POINT: gravity_is_point=p_value; ; break; | ||||||
| 		case Physics2DServer::AREA_PARAM_GRAVITY_POINT_ATTENUATION:  point_attenuation=p_value; ; break; | 		case Physics2DServer::AREA_PARAM_GRAVITY_POINT_ATTENUATION:  point_attenuation=p_value; ; break; | ||||||
| 		case Physics2DServer::AREA_PARAM_DENSITY: density=p_value; ; break; | 		case Physics2DServer::AREA_PARAM_LINEAR_DAMP: linear_damp=p_value; ; break; | ||||||
|  | 		case Physics2DServer::AREA_PARAM_ANGULAR_DAMP: angular_damp=p_value; ; break; | ||||||
| 		case Physics2DServer::AREA_PARAM_PRIORITY: priority=p_value; ; break; | 		case Physics2DServer::AREA_PARAM_PRIORITY: priority=p_value; ; break; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -114,7 +115,8 @@ Variant Area2DSW::get_param(Physics2DServer::AreaParameter p_param) const { | ||||||
| 		case Physics2DServer::AREA_PARAM_GRAVITY_VECTOR: return gravity_vector; | 		case Physics2DServer::AREA_PARAM_GRAVITY_VECTOR: return gravity_vector; | ||||||
| 		case Physics2DServer::AREA_PARAM_GRAVITY_IS_POINT: return gravity_is_point; | 		case Physics2DServer::AREA_PARAM_GRAVITY_IS_POINT: return gravity_is_point; | ||||||
| 		case Physics2DServer::AREA_PARAM_GRAVITY_POINT_ATTENUATION: return  point_attenuation; | 		case Physics2DServer::AREA_PARAM_GRAVITY_POINT_ATTENUATION: return  point_attenuation; | ||||||
| 		case Physics2DServer::AREA_PARAM_DENSITY: return density; | 		case Physics2DServer::AREA_PARAM_LINEAR_DAMP: return linear_damp; | ||||||
|  | 		case Physics2DServer::AREA_PARAM_ANGULAR_DAMP: return angular_damp; | ||||||
| 		case Physics2DServer::AREA_PARAM_PRIORITY: return priority; | 		case Physics2DServer::AREA_PARAM_PRIORITY: return priority; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -181,7 +183,8 @@ Area2DSW::Area2DSW() : CollisionObject2DSW(TYPE_AREA), monitor_query_list(this), | ||||||
| 	gravity_is_point=false; | 	gravity_is_point=false; | ||||||
| 	point_attenuation=1; | 	point_attenuation=1; | ||||||
| 
 | 
 | ||||||
| 	density=0.1; | 	angular_damp=1.0; | ||||||
|  | 	linear_damp=0.1; | ||||||
| 	priority=0; | 	priority=0; | ||||||
| 	monitor_callback_id=0; | 	monitor_callback_id=0; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -47,7 +47,8 @@ class Area2DSW : public CollisionObject2DSW{ | ||||||
| 	Vector2 gravity_vector; | 	Vector2 gravity_vector; | ||||||
| 	bool gravity_is_point; | 	bool gravity_is_point; | ||||||
| 	float point_attenuation; | 	float point_attenuation; | ||||||
| 	float density; | 	float linear_damp; | ||||||
|  | 	float angular_damp; | ||||||
| 	int priority; | 	int priority; | ||||||
| 
 | 
 | ||||||
| 	ObjectID monitor_callback_id; | 	ObjectID monitor_callback_id; | ||||||
|  | @ -128,8 +129,11 @@ public: | ||||||
| 	_FORCE_INLINE_ void set_point_attenuation(float p_point_attenuation) { point_attenuation=p_point_attenuation; } | 	_FORCE_INLINE_ void set_point_attenuation(float p_point_attenuation) { point_attenuation=p_point_attenuation; } | ||||||
| 	_FORCE_INLINE_ float get_point_attenuation() const { return point_attenuation; } | 	_FORCE_INLINE_ float get_point_attenuation() const { return point_attenuation; } | ||||||
| 
 | 
 | ||||||
| 	_FORCE_INLINE_ void set_density(float p_density) { density=p_density; } | 	_FORCE_INLINE_ void set_linear_damp(float p_linear_damp) { linear_damp=p_linear_damp; } | ||||||
| 	_FORCE_INLINE_ float get_density() const { return density; } | 	_FORCE_INLINE_ float get_linear_damp() const { return linear_damp; } | ||||||
|  | 
 | ||||||
|  | 	_FORCE_INLINE_ void set_angular_damp(float p_angular_damp) { angular_damp=p_angular_damp; } | ||||||
|  | 	_FORCE_INLINE_ float get_angular_damp() const { return angular_damp; } | ||||||
| 
 | 
 | ||||||
| 	_FORCE_INLINE_ void set_priority(int p_priority) { priority=p_priority; } | 	_FORCE_INLINE_ void set_priority(int p_priority) { priority=p_priority; } | ||||||
| 	_FORCE_INLINE_ int get_priority() const { return priority; } | 	_FORCE_INLINE_ int get_priority() const { return priority; } | ||||||
|  |  | ||||||
|  | @ -156,6 +156,17 @@ void Body2DSW::set_param(Physics2DServer::BodyParameter p_param, float p_value) | ||||||
| 			_update_inertia(); | 			_update_inertia(); | ||||||
| 
 | 
 | ||||||
| 		} break; | 		} break; | ||||||
|  | 		case Physics2DServer::BODY_PARAM_GRAVITY_SCALE: { | ||||||
|  | 			gravity_scale=p_value; | ||||||
|  | 		} break; | ||||||
|  | 		case Physics2DServer::BODY_PARAM_LINEAR_DAMP: { | ||||||
|  | 
 | ||||||
|  | 			linear_damp=p_value; | ||||||
|  | 		} break; | ||||||
|  | 		case Physics2DServer::BODY_PARAM_ANGULAR_DAMP: { | ||||||
|  | 
 | ||||||
|  | 			angular_damp=p_value; | ||||||
|  | 		} break; | ||||||
| 		default:{} | 		default:{} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -174,6 +185,17 @@ float Body2DSW::get_param(Physics2DServer::BodyParameter p_param) const { | ||||||
| 		case Physics2DServer::BODY_PARAM_MASS: { | 		case Physics2DServer::BODY_PARAM_MASS: { | ||||||
| 			return mass; | 			return mass; | ||||||
| 		} break; | 		} break; | ||||||
|  | 		case Physics2DServer::BODY_PARAM_GRAVITY_SCALE: { | ||||||
|  | 			return gravity_scale; | ||||||
|  | 		} break; | ||||||
|  | 		case Physics2DServer::BODY_PARAM_LINEAR_DAMP: { | ||||||
|  | 
 | ||||||
|  | 			return linear_damp; | ||||||
|  | 		} break; | ||||||
|  | 		case Physics2DServer::BODY_PARAM_ANGULAR_DAMP: { | ||||||
|  | 
 | ||||||
|  | 			return angular_damp; | ||||||
|  | 		} break; | ||||||
| 		default:{} | 		default:{} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -362,6 +384,8 @@ void Body2DSW::_compute_area_gravity(const Area2DSW *p_area) { | ||||||
| 	} else { | 	} else { | ||||||
| 		gravity = p_area->get_gravity_vector() * p_area->get_gravity(); | 		gravity = p_area->get_gravity_vector() * p_area->get_gravity(); | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	gravity*=gravity_scale; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Body2DSW::integrate_forces(real_t p_step) { | void Body2DSW::integrate_forces(real_t p_step) { | ||||||
|  | @ -385,7 +409,16 @@ void Body2DSW::integrate_forces(real_t p_step) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	_compute_area_gravity(current_area); | 	_compute_area_gravity(current_area); | ||||||
| 	density=current_area->get_density(); | 
 | ||||||
|  | 	if (angular_damp>=0) | ||||||
|  | 		area_angular_damp=angular_damp; | ||||||
|  | 	else | ||||||
|  | 		area_angular_damp=current_area->get_angular_damp(); | ||||||
|  | 
 | ||||||
|  | 	if (linear_damp>=0) | ||||||
|  | 		area_linear_damp=linear_damp; | ||||||
|  | 	else | ||||||
|  | 		area_linear_damp=current_area->get_linear_damp(); | ||||||
| 
 | 
 | ||||||
| 	Vector2 motion; | 	Vector2 motion; | ||||||
| 	bool do_motion=false; | 	bool do_motion=false; | ||||||
|  | @ -414,12 +447,12 @@ void Body2DSW::integrate_forces(real_t p_step) { | ||||||
| 			force+=applied_force; | 			force+=applied_force; | ||||||
| 			real_t torque=applied_torque; | 			real_t torque=applied_torque; | ||||||
| 
 | 
 | ||||||
| 			real_t damp = 1.0 - p_step * density; | 			real_t damp = 1.0 - p_step * area_linear_damp; | ||||||
| 
 | 
 | ||||||
| 			if (damp<0) // reached zero in the given time
 | 			if (damp<0) // reached zero in the given time
 | ||||||
| 				damp=0; | 				damp=0; | ||||||
| 
 | 
 | ||||||
| 			real_t angular_damp = 1.0 - p_step * density * get_space()->get_body_angular_velocity_damp_ratio(); | 			real_t angular_damp = 1.0 - p_step * area_angular_damp; | ||||||
| 
 | 
 | ||||||
| 			if (angular_damp<0) // reached zero in the given time
 | 			if (angular_damp<0) // reached zero in the given time
 | ||||||
| 				angular_damp=0; | 				angular_damp=0; | ||||||
|  | @ -608,8 +641,12 @@ Body2DSW::Body2DSW() : CollisionObject2DSW(TYPE_BODY), active_list(this), inerti | ||||||
| 	island_list_next=NULL; | 	island_list_next=NULL; | ||||||
| 	_set_static(false); | 	_set_static(false); | ||||||
| 	first_time_kinematic=false; | 	first_time_kinematic=false; | ||||||
| 	density=0; | 	linear_damp=-1; | ||||||
|  | 	angular_damp=-1; | ||||||
|  | 	area_angular_damp=0; | ||||||
|  | 	area_linear_damp=0; | ||||||
| 	contact_count=0; | 	contact_count=0; | ||||||
|  | 	gravity_scale=1.0; | ||||||
| 
 | 
 | ||||||
| 	still_time=0; | 	still_time=0; | ||||||
| 	continuous_cd_mode=Physics2DServer::CCD_MODE_DISABLED; | 	continuous_cd_mode=Physics2DServer::CCD_MODE_DISABLED; | ||||||
|  |  | ||||||
|  | @ -47,6 +47,10 @@ class Body2DSW : public CollisionObject2DSW { | ||||||
| 	Vector2 linear_velocity; | 	Vector2 linear_velocity; | ||||||
| 	real_t angular_velocity; | 	real_t angular_velocity; | ||||||
| 
 | 
 | ||||||
|  | 	real_t linear_damp; | ||||||
|  | 	real_t angular_damp; | ||||||
|  | 	real_t gravity_scale; | ||||||
|  | 
 | ||||||
| 	real_t mass; | 	real_t mass; | ||||||
| 	real_t bounce; | 	real_t bounce; | ||||||
| 	real_t friction; | 	real_t friction; | ||||||
|  | @ -55,7 +59,8 @@ class Body2DSW : public CollisionObject2DSW { | ||||||
| 	real_t _inv_inertia; | 	real_t _inv_inertia; | ||||||
| 
 | 
 | ||||||
| 	Vector2 gravity; | 	Vector2 gravity; | ||||||
| 	real_t density; | 	real_t area_linear_damp; | ||||||
|  | 	real_t area_angular_damp; | ||||||
| 
 | 
 | ||||||
| 	real_t still_time; | 	real_t still_time; | ||||||
| 
 | 
 | ||||||
|  | @ -219,8 +224,10 @@ public: | ||||||
| 	_FORCE_INLINE_ real_t get_inv_inertia() const { return _inv_inertia; } | 	_FORCE_INLINE_ real_t get_inv_inertia() const { return _inv_inertia; } | ||||||
| 	_FORCE_INLINE_ real_t get_friction() const { return friction; } | 	_FORCE_INLINE_ real_t get_friction() const { return friction; } | ||||||
| 	_FORCE_INLINE_ Vector2 get_gravity() const { return gravity; } | 	_FORCE_INLINE_ Vector2 get_gravity() const { return gravity; } | ||||||
| 	_FORCE_INLINE_ real_t get_density() const { return density; } |  | ||||||
| 	_FORCE_INLINE_ real_t get_bounce() const { return bounce; } | 	_FORCE_INLINE_ real_t get_bounce() const { return bounce; } | ||||||
|  | 	_FORCE_INLINE_ real_t get_linear_damp() const { return linear_damp; } | ||||||
|  | 	_FORCE_INLINE_ real_t get_angular_damp() const { return angular_damp; } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 	void integrate_forces(real_t p_step); | 	void integrate_forces(real_t p_step); | ||||||
| 	void integrate_velocities(real_t p_step); | 	void integrate_velocities(real_t p_step); | ||||||
|  | @ -306,7 +313,8 @@ public: | ||||||
| 	real_t step; | 	real_t step; | ||||||
| 
 | 
 | ||||||
| 	virtual Vector2 get_total_gravity() const {  return body->get_gravity();  } // get gravity vector working on this body space/area
 | 	virtual Vector2 get_total_gravity() const {  return body->get_gravity();  } // get gravity vector working on this body space/area
 | ||||||
| 	virtual float get_total_density() const {  return body->get_density();  } // get density of this body space/area
 | 	virtual float get_total_angular_damp() const {  return body->get_angular_damp();  } // get density of this body space/area
 | ||||||
|  | 	virtual float get_total_linear_damp() const {  return body->get_linear_damp();  } // get density of this body space/area
 | ||||||
| 
 | 
 | ||||||
| 	virtual float get_inverse_mass() const {  return body->get_inv_mass();  } // get the mass
 | 	virtual float get_inverse_mass() const {  return body->get_inv_mass();  } // get the mass
 | ||||||
| 	virtual real_t get_inverse_inertia() const { return body->get_inv_inertia();   } // get density of this body space
 | 	virtual real_t get_inverse_inertia() const { return body->get_inv_inertia();   } // get density of this body space
 | ||||||
|  |  | ||||||
|  | @ -606,8 +606,7 @@ void Space2DSW::set_param(Physics2DServer::SpaceParameter p_param, real_t p_valu | ||||||
| 		case Physics2DServer::SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION: contact_max_allowed_penetration=p_value; break; | 		case Physics2DServer::SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION: contact_max_allowed_penetration=p_value; break; | ||||||
| 		case Physics2DServer::SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_TRESHOLD: body_linear_velocity_sleep_treshold=p_value; break; | 		case Physics2DServer::SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_TRESHOLD: body_linear_velocity_sleep_treshold=p_value; break; | ||||||
| 		case Physics2DServer::SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_TRESHOLD: body_angular_velocity_sleep_treshold=p_value; break; | 		case Physics2DServer::SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_TRESHOLD: body_angular_velocity_sleep_treshold=p_value; break; | ||||||
| 		case Physics2DServer::SPACE_PARAM_BODY_TIME_TO_SLEEP: body_time_to_sleep=p_value; break; | 		case Physics2DServer::SPACE_PARAM_BODY_TIME_TO_SLEEP: body_time_to_sleep=p_value; break;		 | ||||||
| 		case Physics2DServer::SPACE_PARAM_BODY_ANGULAR_VELOCITY_DAMP_RATIO: body_angular_velocity_damp_ratio=p_value; break; |  | ||||||
| 		case Physics2DServer::SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS: constraint_bias=p_value; break; | 		case Physics2DServer::SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS: constraint_bias=p_value; break; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -622,7 +621,6 @@ real_t Space2DSW::get_param(Physics2DServer::SpaceParameter p_param) const { | ||||||
| 		case Physics2DServer::SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_TRESHOLD: return body_linear_velocity_sleep_treshold; | 		case Physics2DServer::SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_TRESHOLD: return body_linear_velocity_sleep_treshold; | ||||||
| 		case Physics2DServer::SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_TRESHOLD: return body_angular_velocity_sleep_treshold; | 		case Physics2DServer::SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_TRESHOLD: return body_angular_velocity_sleep_treshold; | ||||||
| 		case Physics2DServer::SPACE_PARAM_BODY_TIME_TO_SLEEP: return body_time_to_sleep; | 		case Physics2DServer::SPACE_PARAM_BODY_TIME_TO_SLEEP: return body_time_to_sleep; | ||||||
| 		case Physics2DServer::SPACE_PARAM_BODY_ANGULAR_VELOCITY_DAMP_RATIO: return body_angular_velocity_damp_ratio; |  | ||||||
| 		case Physics2DServer::SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS: return constraint_bias; | 		case Physics2DServer::SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS: return constraint_bias; | ||||||
| 	} | 	} | ||||||
| 	return 0; | 	return 0; | ||||||
|  | @ -664,7 +662,6 @@ Space2DSW::Space2DSW() { | ||||||
| 	body_linear_velocity_sleep_treshold=0.01; | 	body_linear_velocity_sleep_treshold=0.01; | ||||||
| 	body_angular_velocity_sleep_treshold=(8.0 / 180.0 * Math_PI); | 	body_angular_velocity_sleep_treshold=(8.0 / 180.0 * Math_PI); | ||||||
| 	body_time_to_sleep=0.5; | 	body_time_to_sleep=0.5; | ||||||
| 	body_angular_velocity_damp_ratio=15; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	broadphase = BroadPhase2DSW::create_func(); | 	broadphase = BroadPhase2DSW::create_func(); | ||||||
|  |  | ||||||
|  | @ -93,7 +93,6 @@ class Space2DSW { | ||||||
| 	float body_linear_velocity_sleep_treshold; | 	float body_linear_velocity_sleep_treshold; | ||||||
| 	float body_angular_velocity_sleep_treshold; | 	float body_angular_velocity_sleep_treshold; | ||||||
| 	float body_time_to_sleep; | 	float body_time_to_sleep; | ||||||
| 	float body_angular_velocity_damp_ratio; |  | ||||||
| 
 | 
 | ||||||
| 	bool locked; | 	bool locked; | ||||||
| 
 | 
 | ||||||
|  | @ -142,7 +141,7 @@ public: | ||||||
| 	_FORCE_INLINE_ real_t get_body_linear_velocity_sleep_treshold() const { return body_linear_velocity_sleep_treshold; } | 	_FORCE_INLINE_ real_t get_body_linear_velocity_sleep_treshold() const { return body_linear_velocity_sleep_treshold; } | ||||||
| 	_FORCE_INLINE_ real_t get_body_angular_velocity_sleep_treshold() const { return body_angular_velocity_sleep_treshold; } | 	_FORCE_INLINE_ real_t get_body_angular_velocity_sleep_treshold() const { return body_angular_velocity_sleep_treshold; } | ||||||
| 	_FORCE_INLINE_ real_t get_body_time_to_sleep() const { return body_time_to_sleep; } | 	_FORCE_INLINE_ real_t get_body_time_to_sleep() const { return body_time_to_sleep; } | ||||||
| 	_FORCE_INLINE_ real_t get_body_angular_velocity_damp_ratio() const { return body_angular_velocity_damp_ratio; } | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	void update(); | 	void update(); | ||||||
|  |  | ||||||
|  | @ -39,20 +39,24 @@ void Physics2DDirectBodyState::integrate_forces() { | ||||||
| 
 | 
 | ||||||
| 	real_t av = get_angular_velocity(); | 	real_t av = get_angular_velocity(); | ||||||
| 
 | 
 | ||||||
| 	float damp = 1.0 - step * get_total_density(); | 	float damp = 1.0 - step * get_total_linear_damp(); | ||||||
| 
 | 
 | ||||||
| 	if (damp<0) // reached zero in the given time
 | 	if (damp<0) // reached zero in the given time
 | ||||||
| 		damp=0; | 		damp=0; | ||||||
| 
 | 
 | ||||||
| 	lv*=damp; | 	lv*=damp; | ||||||
|  | 
 | ||||||
|  | 	damp = 1.0 - step * get_total_angular_damp(); | ||||||
|  | 
 | ||||||
|  | 	if (damp<0) // reached zero in the given time
 | ||||||
|  | 		damp=0; | ||||||
|  | 
 | ||||||
| 	av*=damp; | 	av*=damp; | ||||||
| 
 | 
 | ||||||
| 	set_linear_velocity(lv); | 	set_linear_velocity(lv); | ||||||
| 	set_angular_velocity(av); | 	set_angular_velocity(av); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Object* Physics2DDirectBodyState::get_contact_collider_object(int p_contact_idx) const { | Object* Physics2DDirectBodyState::get_contact_collider_object(int p_contact_idx) const { | ||||||
|  | @ -70,7 +74,8 @@ Physics2DServer * Physics2DServer::get_singleton() { | ||||||
| void Physics2DDirectBodyState::_bind_methods() { | void Physics2DDirectBodyState::_bind_methods() { | ||||||
| 
 | 
 | ||||||
| 	ObjectTypeDB::bind_method(_MD("get_total_gravity"),&Physics2DDirectBodyState::get_total_gravity); | 	ObjectTypeDB::bind_method(_MD("get_total_gravity"),&Physics2DDirectBodyState::get_total_gravity); | ||||||
| 	ObjectTypeDB::bind_method(_MD("get_total_density"),&Physics2DDirectBodyState::get_total_density); | 	ObjectTypeDB::bind_method(_MD("get_total_linear_damp"),&Physics2DDirectBodyState::get_total_linear_damp); | ||||||
|  | 	ObjectTypeDB::bind_method(_MD("get_total_angular_damp"),&Physics2DDirectBodyState::get_total_angular_damp); | ||||||
| 
 | 
 | ||||||
| 	ObjectTypeDB::bind_method(_MD("get_inverse_mass"),&Physics2DDirectBodyState::get_inverse_mass); | 	ObjectTypeDB::bind_method(_MD("get_inverse_mass"),&Physics2DDirectBodyState::get_inverse_mass); | ||||||
| 	ObjectTypeDB::bind_method(_MD("get_inverse_inertia"),&Physics2DDirectBodyState::get_inverse_inertia); | 	ObjectTypeDB::bind_method(_MD("get_inverse_inertia"),&Physics2DDirectBodyState::get_inverse_inertia); | ||||||
|  | @ -538,7 +543,8 @@ void Physics2DServer::_bind_methods() { | ||||||
| 	BIND_CONSTANT( AREA_PARAM_GRAVITY_VECTOR ); | 	BIND_CONSTANT( AREA_PARAM_GRAVITY_VECTOR ); | ||||||
| 	BIND_CONSTANT( AREA_PARAM_GRAVITY_IS_POINT ); | 	BIND_CONSTANT( AREA_PARAM_GRAVITY_IS_POINT ); | ||||||
| 	BIND_CONSTANT( AREA_PARAM_GRAVITY_POINT_ATTENUATION ); | 	BIND_CONSTANT( AREA_PARAM_GRAVITY_POINT_ATTENUATION ); | ||||||
| 	BIND_CONSTANT( AREA_PARAM_DENSITY ); | 	BIND_CONSTANT( AREA_PARAM_LINEAR_DAMP); | ||||||
|  | 	BIND_CONSTANT( AREA_PARAM_ANGULAR_DAMP); | ||||||
| 	BIND_CONSTANT( AREA_PARAM_PRIORITY ); | 	BIND_CONSTANT( AREA_PARAM_PRIORITY ); | ||||||
| 
 | 
 | ||||||
| 	BIND_CONSTANT( AREA_SPACE_OVERRIDE_COMBINE ); | 	BIND_CONSTANT( AREA_SPACE_OVERRIDE_COMBINE ); | ||||||
|  | @ -553,6 +559,9 @@ void Physics2DServer::_bind_methods() { | ||||||
| 	BIND_CONSTANT( BODY_PARAM_BOUNCE ); | 	BIND_CONSTANT( BODY_PARAM_BOUNCE ); | ||||||
| 	BIND_CONSTANT( BODY_PARAM_FRICTION ); | 	BIND_CONSTANT( BODY_PARAM_FRICTION ); | ||||||
| 	BIND_CONSTANT( BODY_PARAM_MASS ); | 	BIND_CONSTANT( BODY_PARAM_MASS ); | ||||||
|  | 	BIND_CONSTANT( BODY_PARAM_GRAVITY_SCALE ); | ||||||
|  | 	BIND_CONSTANT( BODY_PARAM_LINEAR_DAMP); | ||||||
|  | 	BIND_CONSTANT( BODY_PARAM_ANGULAR_DAMP); | ||||||
| 	BIND_CONSTANT( BODY_PARAM_MAX ); | 	BIND_CONSTANT( BODY_PARAM_MAX ); | ||||||
| 
 | 
 | ||||||
| 	BIND_CONSTANT( BODY_STATE_TRANSFORM ); | 	BIND_CONSTANT( BODY_STATE_TRANSFORM ); | ||||||
|  |  | ||||||
|  | @ -43,7 +43,8 @@ protected: | ||||||
| public: | public: | ||||||
| 
 | 
 | ||||||
| 	virtual Vector2 get_total_gravity() const=0; // get gravity vector working on this body space/area
 | 	virtual Vector2 get_total_gravity() const=0; // get gravity vector working on this body space/area
 | ||||||
| 	virtual float get_total_density() const=0; // get density of this body space/area
 | 	virtual float get_total_linear_damp() const=0; // get density of this body space/area
 | ||||||
|  | 	virtual float get_total_angular_damp() const=0; // get density of this body space/area
 | ||||||
| 
 | 
 | ||||||
| 	virtual float get_inverse_mass() const=0; // get the mass
 | 	virtual float get_inverse_mass() const=0; // get the mass
 | ||||||
| 	virtual real_t get_inverse_inertia() const=0; // get density of this body space
 | 	virtual real_t get_inverse_inertia() const=0; // get density of this body space
 | ||||||
|  | @ -277,7 +278,6 @@ public: | ||||||
| 		SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_TRESHOLD, | 		SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_TRESHOLD, | ||||||
| 		SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_TRESHOLD, | 		SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_TRESHOLD, | ||||||
| 		SPACE_PARAM_BODY_TIME_TO_SLEEP, | 		SPACE_PARAM_BODY_TIME_TO_SLEEP, | ||||||
| 		SPACE_PARAM_BODY_ANGULAR_VELOCITY_DAMP_RATIO, |  | ||||||
| 		SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS, | 		SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS, | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | @ -301,7 +301,8 @@ public: | ||||||
| 		AREA_PARAM_GRAVITY_VECTOR, | 		AREA_PARAM_GRAVITY_VECTOR, | ||||||
| 		AREA_PARAM_GRAVITY_IS_POINT, | 		AREA_PARAM_GRAVITY_IS_POINT, | ||||||
| 		AREA_PARAM_GRAVITY_POINT_ATTENUATION, | 		AREA_PARAM_GRAVITY_POINT_ATTENUATION, | ||||||
| 		AREA_PARAM_DENSITY, | 		AREA_PARAM_LINEAR_DAMP, | ||||||
|  | 		AREA_PARAM_ANGULAR_DAMP, | ||||||
| 		AREA_PARAM_PRIORITY | 		AREA_PARAM_PRIORITY | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | @ -401,6 +402,9 @@ public: | ||||||
| 		BODY_PARAM_BOUNCE, | 		BODY_PARAM_BOUNCE, | ||||||
| 		BODY_PARAM_FRICTION, | 		BODY_PARAM_FRICTION, | ||||||
| 		BODY_PARAM_MASS, ///< unused for static, always infinite
 | 		BODY_PARAM_MASS, ///< unused for static, always infinite
 | ||||||
|  | 		BODY_PARAM_GRAVITY_SCALE, | ||||||
|  | 		BODY_PARAM_LINEAR_DAMP, | ||||||
|  | 		BODY_PARAM_ANGULAR_DAMP, | ||||||
| 		BODY_PARAM_MAX, | 		BODY_PARAM_MAX, | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | @ -414,7 +418,7 @@ public: | ||||||
| 		BODY_STATE_LINEAR_VELOCITY, | 		BODY_STATE_LINEAR_VELOCITY, | ||||||
| 		BODY_STATE_ANGULAR_VELOCITY, | 		BODY_STATE_ANGULAR_VELOCITY, | ||||||
| 		BODY_STATE_SLEEPING, | 		BODY_STATE_SLEEPING, | ||||||
| 		BODY_STATE_CAN_SLEEP | 		BODY_STATE_CAN_SLEEP, | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	virtual void body_set_state(RID p_body, BodyState p_state, const Variant& p_variant)=0; | 	virtual void body_set_state(RID p_body, BodyState p_state, const Variant& p_variant)=0; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Juan Linietsky
						Juan Linietsky