|
@@ -888,10 +888,14 @@ void _pb_start_simulation(const Skeleton3D *p_skeleton, Node *p_node, const Vect
|
|
|
|
|
|
PhysicalBone3D *pb = Object::cast_to<PhysicalBone3D>(p_node);
|
|
PhysicalBone3D *pb = Object::cast_to<PhysicalBone3D>(p_node);
|
|
if (pb) {
|
|
if (pb) {
|
|
- for (int i = p_sim_bones.size() - 1; 0 <= i; --i) {
|
|
|
|
- if (p_sim_bones[i] == pb->get_bone_id() || p_skeleton->is_bone_parent_of(pb->get_bone_id(), p_sim_bones[i])) {
|
|
|
|
- pb->set_simulate_physics(true);
|
|
|
|
- break;
|
|
|
|
|
|
+ if (p_sim_bones.is_empty()) { // If no bones is specified, activate ragdoll on full body.
|
|
|
|
+ pb->set_simulate_physics(true);
|
|
|
|
+ } else {
|
|
|
|
+ for (int i = p_sim_bones.size() - 1; 0 <= i; --i) {
|
|
|
|
+ if (p_sim_bones[i] == pb->get_bone_id() || p_skeleton->is_bone_parent_of(pb->get_bone_id(), p_sim_bones[i])) {
|
|
|
|
+ pb->set_simulate_physics(true);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -901,9 +905,7 @@ void Skeleton3D::physical_bones_start_simulation_on(const TypedArray<StringName>
|
|
set_physics_process_internal(false);
|
|
set_physics_process_internal(false);
|
|
|
|
|
|
Vector<int> sim_bones;
|
|
Vector<int> sim_bones;
|
|
- if (p_bones.size() <= 0) {
|
|
|
|
- sim_bones.push_back(0); // If no bones is specified, activate ragdoll on full body.
|
|
|
|
- } else {
|
|
|
|
|
|
+ if (p_bones.size() > 0) {
|
|
sim_bones.resize(p_bones.size());
|
|
sim_bones.resize(p_bones.size());
|
|
int c = 0;
|
|
int c = 0;
|
|
for (int i = sim_bones.size() - 1; 0 <= i; --i) {
|
|
for (int i = sim_bones.size() - 1; 0 <= i; --i) {
|