Skip to content

Commit

Permalink
Merge pull request #40512 from yrk06/ExposeInertiaTensorMaster
Browse files Browse the repository at this point in the history
Add Method get_inverse_inertia_tensor
  • Loading branch information
akien-mga authored Jul 21, 2020
2 parents 103b467 + a91103a commit 01fb1f1
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
7 changes: 7 additions & 0 deletions doc/classes/RigidBody3D.xml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,13 @@
[b]Note:[/b] The result of this test is not immediate after moving objects. For performance, list of collisions is updated once per frame and before the physics step. Consider using signals instead.
</description>
</method>
<method name="get_inverse_inertia_tensor">
<return type="Basis">
</return>
<description>
Returns the inverse inertia tensor basis. This is used to calculate the angular acceleration resulting from a torque applied to the [RigidBody3D].
</description>
</method>
<method name="set_axis_lock">
<return type="void">
</return>
Expand Down
7 changes: 7 additions & 0 deletions scene/3d/physics_body_3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,7 @@ void RigidBody3D::_direct_state_changed(Object *p_state) {
set_global_transform(state->get_transform());
linear_velocity = state->get_linear_velocity();
angular_velocity = state->get_angular_velocity();
inverse_inertia_tensor = state->get_inverse_inertia_tensor();
if (sleeping != state->is_sleeping()) {
sleeping = state->is_sleeping();
emit_signal(SceneStringNames::get_singleton()->sleeping_state_changed);
Expand Down Expand Up @@ -594,6 +595,10 @@ Vector3 RigidBody3D::get_angular_velocity() const {
return angular_velocity;
}

Basis RigidBody3D::get_inverse_inertia_tensor() {
return inverse_inertia_tensor;
}

void RigidBody3D::set_use_custom_integrator(bool p_enable) {
if (custom_integrator == p_enable) {
return;
Expand Down Expand Up @@ -760,6 +765,8 @@ void RigidBody3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_angular_velocity", "angular_velocity"), &RigidBody3D::set_angular_velocity);
ClassDB::bind_method(D_METHOD("get_angular_velocity"), &RigidBody3D::get_angular_velocity);

ClassDB::bind_method(D_METHOD("get_inverse_inertia_tensor"), &RigidBody3D::get_inverse_inertia_tensor);

ClassDB::bind_method(D_METHOD("set_gravity_scale", "gravity_scale"), &RigidBody3D::set_gravity_scale);
ClassDB::bind_method(D_METHOD("get_gravity_scale"), &RigidBody3D::get_gravity_scale);

Expand Down
3 changes: 3 additions & 0 deletions scene/3d/physics_body_3d.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ class RigidBody3D : public PhysicsBody3D {

Vector3 linear_velocity;
Vector3 angular_velocity;
Basis inverse_inertia_tensor;
real_t gravity_scale;
real_t linear_damp;
real_t angular_damp;
Expand Down Expand Up @@ -201,6 +202,8 @@ class RigidBody3D : public PhysicsBody3D {
void set_angular_velocity(const Vector3 &p_velocity);
Vector3 get_angular_velocity() const override;

Basis get_inverse_inertia_tensor();

void set_gravity_scale(real_t p_gravity_scale);
real_t get_gravity_scale() const;

Expand Down

0 comments on commit 01fb1f1

Please sign in to comment.