@@ -519,7 +519,7 @@ int SpringBoneSimulator3D::get_end_bone(int p_index) const {
519519void SpringBoneSimulator3D::set_extend_end_bone (int p_index, bool p_enabled) {
520520 ERR_FAIL_INDEX (p_index, (int )settings.size ());
521521 settings[p_index]->extend_end_bone = p_enabled;
522- _make_joints_dirty (p_index);
522+ _make_joints_dirty (p_index, true );
523523 notify_property_list_changed ();
524524}
525525
@@ -537,7 +537,7 @@ void SpringBoneSimulator3D::set_end_bone_direction(int p_index, BoneDirection p_
537537 if (mutable_bone_axes) {
538538 return ; // Chain dir will be recaluclated in _update_bone_axis().
539539 }
540- _make_joints_dirty (p_index);
540+ _make_joints_dirty (p_index, true );
541541}
542542
543543SkeletonModifier3D::BoneDirection SpringBoneSimulator3D::get_end_bone_direction (int p_index) const {
@@ -555,7 +555,7 @@ void SpringBoneSimulator3D::set_end_bone_length(int p_index, float p_length) {
555555 if (mutable_bone_axes && Math::is_zero_approx (old) == Math::is_zero_approx (p_length)) {
556556 return ; // If chain size is not changed, length will be recaluclated in _update_bone_axis().
557557 }
558- _make_joints_dirty (p_index);
558+ _make_joints_dirty (p_index, true );
559559}
560560
561561float SpringBoneSimulator3D::get_end_bone_length (int p_index) const {
@@ -874,7 +874,7 @@ void SpringBoneSimulator3D::clear_settings() {
874874void SpringBoneSimulator3D::set_individual_config (int p_index, bool p_enabled) {
875875 ERR_FAIL_INDEX (p_index, (int )settings.size ());
876876 settings[p_index]->individual_config = p_enabled;
877- _make_joints_dirty (p_index);
877+ _make_joints_dirty (p_index, true );
878878 notify_property_list_changed ();
879879}
880880
@@ -1385,14 +1385,14 @@ void SpringBoneSimulator3D::_validate_bone_names() {
13851385 }
13861386}
13871387
1388- void SpringBoneSimulator3D::_make_joints_dirty (int p_index) {
1388+ void SpringBoneSimulator3D::_make_joints_dirty (int p_index, bool p_reset ) {
13891389 ERR_FAIL_INDEX (p_index, (int )settings.size ());
13901390 settings[p_index]->joints_dirty = true ;
13911391 if (joints_dirty) {
13921392 return ;
13931393 }
13941394 joints_dirty = true ;
1395- callable_mp (this , &SpringBoneSimulator3D::_update_joints).call_deferred ();
1395+ callable_mp (this , &SpringBoneSimulator3D::_update_joints).call_deferred (p_reset );
13961396}
13971397
13981398void SpringBoneSimulator3D::_make_all_joints_dirty () {
@@ -1534,7 +1534,7 @@ void SpringBoneSimulator3D::_make_collisions_dirty() {
15341534}
15351535
15361536void SpringBoneSimulator3D::_update_joint_array (int p_index) {
1537- _make_joints_dirty (p_index);
1537+ _make_joints_dirty (p_index, true );
15381538
15391539 Skeleton3D *sk = get_skeleton ();
15401540 int current_bone = settings[p_index]->end_bone ;
@@ -1574,7 +1574,7 @@ void SpringBoneSimulator3D::_update_joint_array(int p_index) {
15741574 }
15751575}
15761576
1577- void SpringBoneSimulator3D::_update_joints () {
1577+ void SpringBoneSimulator3D::_update_joints (bool p_reset ) {
15781578 if (!joints_dirty) {
15791579 return ;
15801580 }
@@ -1583,7 +1583,7 @@ void SpringBoneSimulator3D::_update_joints() {
15831583 continue ;
15841584 }
15851585 if (settings[i]->individual_config ) {
1586- settings[i]->simulation_dirty = true ;
1586+ settings[i]->simulation_dirty = p_reset ;
15871587 settings[i]->joints_dirty = false ;
15881588 continue ; // Abort.
15891589 }
@@ -1620,7 +1620,7 @@ void SpringBoneSimulator3D::_update_joints() {
16201620 joints[j]->rotation_axis = settings[i]->rotation_axis ;
16211621 joints[j]->rotation_axis_vector = settings[i]->rotation_axis_vector ;
16221622 }
1623- settings[i]->simulation_dirty = true ;
1623+ settings[i]->simulation_dirty = p_reset ;
16241624 settings[i]->joints_dirty = false ;
16251625 }
16261626 joints_dirty = false ;
@@ -1754,7 +1754,7 @@ void SpringBoneSimulator3D::reset() {
17541754 _find_collisions ();
17551755 _process_collisions ();
17561756 for (uint32_t i = 0 ; i < settings.size (); i++) {
1757- settings[i]-> simulation_dirty = true ;
1757+ _make_joints_dirty (i, true ) ;
17581758 _init_joints (skeleton, settings[i]);
17591759 }
17601760}
0 commit comments