summaryrefslogtreecommitdiffstats
path: root/scene/3d
diff options
context:
space:
mode:
authorSilc Lizard (Tokage) Renew <61938263+TokageItLab@users.noreply.github.com>2024-09-15 01:41:39 +0900
committerSilc Lizard (Tokage) Renew <61938263+TokageItLab@users.noreply.github.com>2024-09-15 01:46:12 +0900
commit2b3cf2451f1dae92d98b7ba05c895d31f6ad3bcb (patch)
treef1792ccabcba21fc4ee4c6e3f768bce576c74fdc /scene/3d
parente2dd56bea7a1aa13fe74fd6eac049e4cbde0434c (diff)
downloadredot-engine-2b3cf2451f1dae92d98b7ba05c895d31f6ad3bcb.tar.gz
Fix syncing PhysicalBone internal poses individually
Diffstat (limited to 'scene/3d')
-rw-r--r--scene/3d/physical_bone_simulator_3d.cpp8
-rw-r--r--scene/3d/physical_bone_simulator_3d.h1
2 files changed, 8 insertions, 1 deletions
diff --git a/scene/3d/physical_bone_simulator_3d.cpp b/scene/3d/physical_bone_simulator_3d.cpp
index 510d887c83..8874c9cfc6 100644
--- a/scene/3d/physical_bone_simulator_3d.cpp
+++ b/scene/3d/physical_bone_simulator_3d.cpp
@@ -73,10 +73,15 @@ void PhysicalBoneSimulator3D::_pose_updated() {
}
ERR_FAIL_COND(skeleton->get_bone_count() != bones.size());
for (int i = 0; i < skeleton->get_bone_count(); i++) {
- bones.write[i].global_pose = skeleton->get_bone_global_pose(i);
+ _bone_pose_updated(skeleton, i);
}
}
+void PhysicalBoneSimulator3D::_bone_pose_updated(Skeleton3D *p_skeleton, int p_bone_id) {
+ ERR_FAIL_INDEX(p_bone_id, bones.size());
+ bones.write[p_bone_id].global_pose = p_skeleton->get_bone_global_pose(p_bone_id);
+}
+
void PhysicalBoneSimulator3D::_set_active(bool p_active) {
if (!Engine::get_singleton()->is_editor_hint()) {
_reset_physical_bones_state();
@@ -363,6 +368,7 @@ void PhysicalBoneSimulator3D::_process_modification() {
continue;
}
if (bones[i].physical_bone->is_simulating_physics() == false) {
+ _bone_pose_updated(skeleton, i);
bones[i].physical_bone->reset_to_rest_position();
} else if (simulating) {
skeleton->set_bone_global_pose(i, bones[i].global_pose);
diff --git a/scene/3d/physical_bone_simulator_3d.h b/scene/3d/physical_bone_simulator_3d.h
index ddc9cd569a..24136be2b8 100644
--- a/scene/3d/physical_bone_simulator_3d.h
+++ b/scene/3d/physical_bone_simulator_3d.h
@@ -73,6 +73,7 @@ protected:
void _bone_list_changed();
void _pose_updated();
+ void _bone_pose_updated(Skeleton3D *skeleton, int p_bone_id);
virtual void _process_modification() override;