Merge pull request #54134 from nekomatata/body-center-of-mass-local
Expose local center of mass in physics servers
This commit is contained in:
commit
c6062cd93e
@ -150,7 +150,10 @@
|
|||||||
The body's rotational velocity.
|
The body's rotational velocity.
|
||||||
</member>
|
</member>
|
||||||
<member name="center_of_mass" type="Vector2" setter="" getter="get_center_of_mass">
|
<member name="center_of_mass" type="Vector2" setter="" getter="get_center_of_mass">
|
||||||
The body's center of mass.
|
The body's center of mass position relative to the body's center in the global coordinate system.
|
||||||
|
</member>
|
||||||
|
<member name="center_of_mass_local" type="Vector2" setter="" getter="get_center_of_mass_local">
|
||||||
|
The body's center of mass position in the body's local coordinate system.
|
||||||
</member>
|
</member>
|
||||||
<member name="inverse_inertia" type="float" setter="" getter="get_inverse_inertia">
|
<member name="inverse_inertia" type="float" setter="" getter="get_inverse_inertia">
|
||||||
The inverse of the inertia of the body.
|
The inverse of the inertia of the body.
|
||||||
|
@ -159,7 +159,10 @@
|
|||||||
The body's rotational velocity.
|
The body's rotational velocity.
|
||||||
</member>
|
</member>
|
||||||
<member name="center_of_mass" type="Vector3" setter="" getter="get_center_of_mass">
|
<member name="center_of_mass" type="Vector3" setter="" getter="get_center_of_mass">
|
||||||
The body's center of mass.
|
The body's center of mass position relative to the body's center in the global coordinate system.
|
||||||
|
</member>
|
||||||
|
<member name="center_of_mass_local" type="Vector3" setter="" getter="get_center_of_mass_local">
|
||||||
|
The body's center of mass position in the body's local coordinate system.
|
||||||
</member>
|
</member>
|
||||||
<member name="inverse_inertia" type="Vector3" setter="" getter="get_inverse_inertia">
|
<member name="inverse_inertia" type="Vector3" setter="" getter="get_inverse_inertia">
|
||||||
The inverse of the inertia of the body.
|
The inverse of the inertia of the body.
|
||||||
|
@ -919,7 +919,7 @@
|
|||||||
Constant to set/get a body's inertia.
|
Constant to set/get a body's inertia.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="BODY_PARAM_CENTER_OF_MASS" value="4" enum="BodyParameter">
|
<constant name="BODY_PARAM_CENTER_OF_MASS" value="4" enum="BodyParameter">
|
||||||
Constant to set/get a body's center of mass.
|
Constant to set/get a body's center of mass position in the body's local coordinate system.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="BODY_PARAM_GRAVITY_SCALE" value="5" enum="BodyParameter">
|
<constant name="BODY_PARAM_GRAVITY_SCALE" value="5" enum="BodyParameter">
|
||||||
Constant to set/get a body's gravity multiplier.
|
Constant to set/get a body's gravity multiplier.
|
||||||
|
@ -1287,7 +1287,7 @@
|
|||||||
Constant to set/get a body's inertia.
|
Constant to set/get a body's inertia.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="BODY_PARAM_CENTER_OF_MASS" value="4" enum="BodyParameter">
|
<constant name="BODY_PARAM_CENTER_OF_MASS" value="4" enum="BodyParameter">
|
||||||
Constant to set/get a body's center of mass.
|
Constant to set/get a body's center of mass position in the body's local coordinate system.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="BODY_PARAM_GRAVITY_SCALE" value="5" enum="BodyParameter">
|
<constant name="BODY_PARAM_GRAVITY_SCALE" value="5" enum="BodyParameter">
|
||||||
Constant to set/get a body's gravity multiplier.
|
Constant to set/get a body's gravity multiplier.
|
||||||
|
@ -221,7 +221,7 @@ Variant GodotBody2D::get_param(PhysicsServer2D::BodyParameter p_param) const {
|
|||||||
return inertia;
|
return inertia;
|
||||||
}
|
}
|
||||||
case PhysicsServer2D::BODY_PARAM_CENTER_OF_MASS: {
|
case PhysicsServer2D::BODY_PARAM_CENTER_OF_MASS: {
|
||||||
return center_of_mass;
|
return center_of_mass_local;
|
||||||
}
|
}
|
||||||
case PhysicsServer2D::BODY_PARAM_GRAVITY_SCALE: {
|
case PhysicsServer2D::BODY_PARAM_GRAVITY_SCALE: {
|
||||||
return gravity_scale;
|
return gravity_scale;
|
||||||
|
@ -282,6 +282,7 @@ public:
|
|||||||
void reset_mass_properties();
|
void reset_mass_properties();
|
||||||
|
|
||||||
_FORCE_INLINE_ const Vector2 &get_center_of_mass() const { return center_of_mass; }
|
_FORCE_INLINE_ const Vector2 &get_center_of_mass() const { return center_of_mass; }
|
||||||
|
_FORCE_INLINE_ const Vector2 &get_center_of_mass_local() const { return center_of_mass_local; }
|
||||||
_FORCE_INLINE_ real_t get_inv_mass() const { return _inv_mass; }
|
_FORCE_INLINE_ real_t get_inv_mass() const { return _inv_mass; }
|
||||||
_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; }
|
||||||
|
@ -50,6 +50,10 @@ Vector2 GodotPhysicsDirectBodyState2D::get_center_of_mass() const {
|
|||||||
return body->get_center_of_mass();
|
return body->get_center_of_mass();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector2 GodotPhysicsDirectBodyState2D::get_center_of_mass_local() const {
|
||||||
|
return body->get_center_of_mass_local();
|
||||||
|
}
|
||||||
|
|
||||||
real_t GodotPhysicsDirectBodyState2D::get_inverse_mass() const {
|
real_t GodotPhysicsDirectBodyState2D::get_inverse_mass() const {
|
||||||
return body->get_inv_mass();
|
return body->get_inv_mass();
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ public:
|
|||||||
virtual real_t get_total_linear_damp() const override;
|
virtual real_t get_total_linear_damp() const override;
|
||||||
|
|
||||||
virtual Vector2 get_center_of_mass() const override;
|
virtual Vector2 get_center_of_mass() const override;
|
||||||
|
virtual Vector2 get_center_of_mass_local() const override;
|
||||||
virtual real_t get_inverse_mass() const override;
|
virtual real_t get_inverse_mass() const override;
|
||||||
virtual real_t get_inverse_inertia() const override;
|
virtual real_t get_inverse_inertia() const override;
|
||||||
|
|
||||||
|
@ -267,7 +267,7 @@ Variant GodotBody3D::get_param(PhysicsServer3D::BodyParameter p_param) const {
|
|||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case PhysicsServer3D::BODY_PARAM_CENTER_OF_MASS: {
|
case PhysicsServer3D::BODY_PARAM_CENTER_OF_MASS: {
|
||||||
return center_of_mass;
|
return center_of_mass_local;
|
||||||
} break;
|
} break;
|
||||||
case PhysicsServer3D::BODY_PARAM_GRAVITY_SCALE: {
|
case PhysicsServer3D::BODY_PARAM_GRAVITY_SCALE: {
|
||||||
return gravity_scale;
|
return gravity_scale;
|
||||||
|
@ -200,6 +200,7 @@ public:
|
|||||||
|
|
||||||
_FORCE_INLINE_ Basis get_principal_inertia_axes() const { return principal_inertia_axes; }
|
_FORCE_INLINE_ Basis get_principal_inertia_axes() const { return principal_inertia_axes; }
|
||||||
_FORCE_INLINE_ Vector3 get_center_of_mass() const { return center_of_mass; }
|
_FORCE_INLINE_ Vector3 get_center_of_mass() const { return center_of_mass; }
|
||||||
|
_FORCE_INLINE_ Vector3 get_center_of_mass_local() const { return center_of_mass_local; }
|
||||||
_FORCE_INLINE_ Vector3 xform_local_to_principal(const Vector3 &p_pos) const { return principal_inertia_axes_local.xform(p_pos - center_of_mass_local); }
|
_FORCE_INLINE_ Vector3 xform_local_to_principal(const Vector3 &p_pos) const { return principal_inertia_axes_local.xform(p_pos - center_of_mass_local); }
|
||||||
|
|
||||||
_FORCE_INLINE_ void set_linear_velocity(const Vector3 &p_velocity) { linear_velocity = p_velocity; }
|
_FORCE_INLINE_ void set_linear_velocity(const Vector3 &p_velocity) { linear_velocity = p_velocity; }
|
||||||
|
@ -49,6 +49,10 @@ Vector3 GodotPhysicsDirectBodyState3D::get_center_of_mass() const {
|
|||||||
return body->get_center_of_mass();
|
return body->get_center_of_mass();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector3 GodotPhysicsDirectBodyState3D::get_center_of_mass_local() const {
|
||||||
|
return body->get_center_of_mass_local();
|
||||||
|
}
|
||||||
|
|
||||||
Basis GodotPhysicsDirectBodyState3D::get_principal_inertia_axes() const {
|
Basis GodotPhysicsDirectBodyState3D::get_principal_inertia_axes() const {
|
||||||
return body->get_principal_inertia_axes();
|
return body->get_principal_inertia_axes();
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ public:
|
|||||||
virtual real_t get_total_linear_damp() const override;
|
virtual real_t get_total_linear_damp() const override;
|
||||||
|
|
||||||
virtual Vector3 get_center_of_mass() const override;
|
virtual Vector3 get_center_of_mass() const override;
|
||||||
|
virtual Vector3 get_center_of_mass_local() const override;
|
||||||
virtual Basis get_principal_inertia_axes() const override;
|
virtual Basis get_principal_inertia_axes() const override;
|
||||||
|
|
||||||
virtual real_t get_inverse_mass() const override;
|
virtual real_t get_inverse_mass() const override;
|
||||||
|
@ -78,6 +78,7 @@ void PhysicsDirectBodyState2D::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("get_total_angular_damp"), &PhysicsDirectBodyState2D::get_total_angular_damp);
|
ClassDB::bind_method(D_METHOD("get_total_angular_damp"), &PhysicsDirectBodyState2D::get_total_angular_damp);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_center_of_mass"), &PhysicsDirectBodyState2D::get_center_of_mass);
|
ClassDB::bind_method(D_METHOD("get_center_of_mass"), &PhysicsDirectBodyState2D::get_center_of_mass);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_center_of_mass_local"), &PhysicsDirectBodyState2D::get_center_of_mass_local);
|
||||||
ClassDB::bind_method(D_METHOD("get_inverse_mass"), &PhysicsDirectBodyState2D::get_inverse_mass);
|
ClassDB::bind_method(D_METHOD("get_inverse_mass"), &PhysicsDirectBodyState2D::get_inverse_mass);
|
||||||
ClassDB::bind_method(D_METHOD("get_inverse_inertia"), &PhysicsDirectBodyState2D::get_inverse_inertia);
|
ClassDB::bind_method(D_METHOD("get_inverse_inertia"), &PhysicsDirectBodyState2D::get_inverse_inertia);
|
||||||
|
|
||||||
@ -124,6 +125,7 @@ void PhysicsDirectBodyState2D::_bind_methods() {
|
|||||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "total_linear_damp"), "", "get_total_linear_damp");
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "total_linear_damp"), "", "get_total_linear_damp");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "total_gravity"), "", "get_total_gravity");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "total_gravity"), "", "get_total_gravity");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "center_of_mass"), "", "get_center_of_mass");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "center_of_mass"), "", "get_center_of_mass");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "center_of_mass_local"), "", "get_center_of_mass_local");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sleeping"), "set_sleep_state", "is_sleeping");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sleeping"), "set_sleep_state", "is_sleeping");
|
||||||
|
@ -49,6 +49,7 @@ public:
|
|||||||
virtual real_t get_total_angular_damp() const = 0; // get density of this body space/area
|
virtual real_t get_total_angular_damp() const = 0; // get density of this body space/area
|
||||||
|
|
||||||
virtual Vector2 get_center_of_mass() const = 0;
|
virtual Vector2 get_center_of_mass() const = 0;
|
||||||
|
virtual Vector2 get_center_of_mass_local() const = 0;
|
||||||
virtual real_t get_inverse_mass() const = 0; // get the mass
|
virtual real_t 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
|
||||||
|
|
||||||
|
@ -77,6 +77,7 @@ void PhysicsDirectBodyState3D::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("get_total_angular_damp"), &PhysicsDirectBodyState3D::get_total_angular_damp);
|
ClassDB::bind_method(D_METHOD("get_total_angular_damp"), &PhysicsDirectBodyState3D::get_total_angular_damp);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_center_of_mass"), &PhysicsDirectBodyState3D::get_center_of_mass);
|
ClassDB::bind_method(D_METHOD("get_center_of_mass"), &PhysicsDirectBodyState3D::get_center_of_mass);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_center_of_mass_local"), &PhysicsDirectBodyState3D::get_center_of_mass_local);
|
||||||
ClassDB::bind_method(D_METHOD("get_principal_inertia_axes"), &PhysicsDirectBodyState3D::get_principal_inertia_axes);
|
ClassDB::bind_method(D_METHOD("get_principal_inertia_axes"), &PhysicsDirectBodyState3D::get_principal_inertia_axes);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_inverse_mass"), &PhysicsDirectBodyState3D::get_inverse_mass);
|
ClassDB::bind_method(D_METHOD("get_inverse_mass"), &PhysicsDirectBodyState3D::get_inverse_mass);
|
||||||
@ -126,6 +127,7 @@ void PhysicsDirectBodyState3D::_bind_methods() {
|
|||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "inverse_inertia"), "", "get_inverse_inertia");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "inverse_inertia"), "", "get_inverse_inertia");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "total_gravity"), "", "get_total_gravity");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "total_gravity"), "", "get_total_gravity");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_of_mass"), "", "get_center_of_mass");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_of_mass"), "", "get_center_of_mass");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_of_mass_local"), "", "get_center_of_mass_local");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BASIS, "principal_inertia_axes"), "", "get_principal_inertia_axes");
|
ADD_PROPERTY(PropertyInfo(Variant::BASIS, "principal_inertia_axes"), "", "get_principal_inertia_axes");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
|
||||||
|
@ -48,6 +48,7 @@ public:
|
|||||||
virtual real_t get_total_linear_damp() const = 0;
|
virtual real_t get_total_linear_damp() const = 0;
|
||||||
|
|
||||||
virtual Vector3 get_center_of_mass() const = 0;
|
virtual Vector3 get_center_of_mass() const = 0;
|
||||||
|
virtual Vector3 get_center_of_mass_local() const = 0;
|
||||||
virtual Basis get_principal_inertia_axes() const = 0;
|
virtual Basis get_principal_inertia_axes() const = 0;
|
||||||
virtual real_t get_inverse_mass() const = 0; // get the mass
|
virtual real_t get_inverse_mass() const = 0; // get the mass
|
||||||
virtual Vector3 get_inverse_inertia() const = 0; // get density of this body space
|
virtual Vector3 get_inverse_inertia() const = 0; // get density of this body space
|
||||||
|
Loading…
Reference in New Issue
Block a user