Skip to content

Commit 3858112

Browse files
committed
Add argument p_reset to SpringBoneSimulator3D::_make_joints_dirty()
1 parent 68410ac commit 3858112

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

scene/3d/spring_bone_simulator_3d.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ int SpringBoneSimulator3D::get_end_bone(int p_index) const {
519519
void 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

543543
SkeletonModifier3D::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

561561
float SpringBoneSimulator3D::get_end_bone_length(int p_index) const {
@@ -874,7 +874,7 @@ void SpringBoneSimulator3D::clear_settings() {
874874
void 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

13981398
void SpringBoneSimulator3D::_make_all_joints_dirty() {
@@ -1534,7 +1534,7 @@ void SpringBoneSimulator3D::_make_collisions_dirty() {
15341534
}
15351535

15361536
void 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
}

scene/3d/spring_bone_simulator_3d.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,11 @@ class SpringBoneSimulator3D : public SkeletonModifier3D {
175175
void _init_joints(Skeleton3D *p_skeleton, SpringBone3DSetting *p_setting);
176176
void _process_joints(double p_delta, Skeleton3D *p_skeleton, LocalVector<SpringBone3DJointSetting *> &p_joints, const LocalVector<ObjectID> &p_collisions, const Transform3D &p_center_transform, const Transform3D &p_inverted_center_transform, const Quaternion &p_inverted_center_rotation);
177177

178-
void _make_joints_dirty(int p_index);
178+
void _make_joints_dirty(int p_index, bool p_reset = false);
179179
void _make_all_joints_dirty();
180180

181181
void _update_joint_array(int p_index);
182-
void _update_joints();
182+
void _update_joints(bool p_reset);
183183

184184
void _update_bone_axis(Skeleton3D *p_skeleton, SpringBone3DSetting *p_setting);
185185

0 commit comments

Comments
 (0)