Skip to content

Commit b2a5b55

Browse files
committed
Merge pull request godotengine#67749 from JonqsGames/clean_physical_bone_instancing
Test joint type on _set for PhysicalBone joints
2 parents 778684f + 4e0103f commit b2a5b55

File tree

1 file changed

+50
-46
lines changed

1 file changed

+50
-46
lines changed

scene/3d/physics_body_3d.cpp

+50-46
Original file line numberDiff line numberDiff line change
@@ -2226,21 +2226,22 @@ bool PhysicalBone3D::PinJointData::_set(const StringName &p_name, const Variant
22262226
return true;
22272227
}
22282228

2229+
bool is_valid_pin = j.is_valid() && PhysicsServer3D::get_singleton()->joint_get_type(j) == PhysicsServer3D::JOINT_TYPE_PIN;
22292230
if ("joint_constraints/bias" == p_name) {
22302231
bias = p_value;
2231-
if (j.is_valid()) {
2232+
if (is_valid_pin) {
22322233
PhysicsServer3D::get_singleton()->pin_joint_set_param(j, PhysicsServer3D::PIN_JOINT_BIAS, bias);
22332234
}
22342235

22352236
} else if ("joint_constraints/damping" == p_name) {
22362237
damping = p_value;
2237-
if (j.is_valid()) {
2238+
if (is_valid_pin) {
22382239
PhysicsServer3D::get_singleton()->pin_joint_set_param(j, PhysicsServer3D::PIN_JOINT_DAMPING, damping);
22392240
}
22402241

22412242
} else if ("joint_constraints/impulse_clamp" == p_name) {
22422243
impulse_clamp = p_value;
2243-
if (j.is_valid()) {
2244+
if (is_valid_pin) {
22442245
PhysicsServer3D::get_singleton()->pin_joint_set_param(j, PhysicsServer3D::PIN_JOINT_IMPULSE_CLAMP, impulse_clamp);
22452246
}
22462247

@@ -2282,33 +2283,34 @@ bool PhysicalBone3D::ConeJointData::_set(const StringName &p_name, const Variant
22822283
return true;
22832284
}
22842285

2286+
bool is_valid_cone = j.is_valid() && PhysicsServer3D::get_singleton()->joint_get_type(j) == PhysicsServer3D::JOINT_TYPE_CONE_TWIST;
22852287
if ("joint_constraints/swing_span" == p_name) {
22862288
swing_span = Math::deg_to_rad(real_t(p_value));
2287-
if (j.is_valid()) {
2289+
if (is_valid_cone) {
22882290
PhysicsServer3D::get_singleton()->cone_twist_joint_set_param(j, PhysicsServer3D::CONE_TWIST_JOINT_SWING_SPAN, swing_span);
22892291
}
22902292

22912293
} else if ("joint_constraints/twist_span" == p_name) {
22922294
twist_span = Math::deg_to_rad(real_t(p_value));
2293-
if (j.is_valid()) {
2295+
if (is_valid_cone) {
22942296
PhysicsServer3D::get_singleton()->cone_twist_joint_set_param(j, PhysicsServer3D::CONE_TWIST_JOINT_TWIST_SPAN, twist_span);
22952297
}
22962298

22972299
} else if ("joint_constraints/bias" == p_name) {
22982300
bias = p_value;
2299-
if (j.is_valid()) {
2301+
if (is_valid_cone) {
23002302
PhysicsServer3D::get_singleton()->cone_twist_joint_set_param(j, PhysicsServer3D::CONE_TWIST_JOINT_BIAS, bias);
23012303
}
23022304

23032305
} else if ("joint_constraints/softness" == p_name) {
23042306
softness = p_value;
2305-
if (j.is_valid()) {
2307+
if (is_valid_cone) {
23062308
PhysicsServer3D::get_singleton()->cone_twist_joint_set_param(j, PhysicsServer3D::CONE_TWIST_JOINT_SOFTNESS, softness);
23072309
}
23082310

23092311
} else if ("joint_constraints/relaxation" == p_name) {
23102312
relaxation = p_value;
2311-
if (j.is_valid()) {
2313+
if (is_valid_cone) {
23122314
PhysicsServer3D::get_singleton()->cone_twist_joint_set_param(j, PhysicsServer3D::CONE_TWIST_JOINT_RELAXATION, relaxation);
23132315
}
23142316

@@ -2356,39 +2358,40 @@ bool PhysicalBone3D::HingeJointData::_set(const StringName &p_name, const Varian
23562358
return true;
23572359
}
23582360

2361+
bool is_valid_hinge = j.is_valid() && PhysicsServer3D::get_singleton()->joint_get_type(j) == PhysicsServer3D::JOINT_TYPE_HINGE;
23592362
if ("joint_constraints/angular_limit_enabled" == p_name) {
23602363
angular_limit_enabled = p_value;
2361-
if (j.is_valid()) {
2364+
if (is_valid_hinge) {
23622365
PhysicsServer3D::get_singleton()->hinge_joint_set_flag(j, PhysicsServer3D::HINGE_JOINT_FLAG_USE_LIMIT, angular_limit_enabled);
23632366
}
23642367

23652368
} else if ("joint_constraints/angular_limit_upper" == p_name) {
23662369
angular_limit_upper = Math::deg_to_rad(real_t(p_value));
2367-
if (j.is_valid()) {
2370+
if (is_valid_hinge) {
23682371
PhysicsServer3D::get_singleton()->hinge_joint_set_param(j, PhysicsServer3D::HINGE_JOINT_LIMIT_UPPER, angular_limit_upper);
23692372
}
23702373

23712374
} else if ("joint_constraints/angular_limit_lower" == p_name) {
23722375
angular_limit_lower = Math::deg_to_rad(real_t(p_value));
2373-
if (j.is_valid()) {
2376+
if (is_valid_hinge) {
23742377
PhysicsServer3D::get_singleton()->hinge_joint_set_param(j, PhysicsServer3D::HINGE_JOINT_LIMIT_LOWER, angular_limit_lower);
23752378
}
23762379

23772380
} else if ("joint_constraints/angular_limit_bias" == p_name) {
23782381
angular_limit_bias = p_value;
2379-
if (j.is_valid()) {
2382+
if (is_valid_hinge) {
23802383
PhysicsServer3D::get_singleton()->hinge_joint_set_param(j, PhysicsServer3D::HINGE_JOINT_LIMIT_BIAS, angular_limit_bias);
23812384
}
23822385

23832386
} else if ("joint_constraints/angular_limit_softness" == p_name) {
23842387
angular_limit_softness = p_value;
2385-
if (j.is_valid()) {
2388+
if (is_valid_hinge) {
23862389
PhysicsServer3D::get_singleton()->hinge_joint_set_param(j, PhysicsServer3D::HINGE_JOINT_LIMIT_SOFTNESS, angular_limit_softness);
23872390
}
23882391

23892392
} else if ("joint_constraints/angular_limit_relaxation" == p_name) {
23902393
angular_limit_relaxation = p_value;
2391-
if (j.is_valid()) {
2394+
if (is_valid_hinge) {
23922395
PhysicsServer3D::get_singleton()->hinge_joint_set_param(j, PhysicsServer3D::HINGE_JOINT_LIMIT_RELAXATION, angular_limit_relaxation);
23932396
}
23942397

@@ -2439,63 +2442,64 @@ bool PhysicalBone3D::SliderJointData::_set(const StringName &p_name, const Varia
24392442
return true;
24402443
}
24412444

2445+
bool is_valid_slider = j.is_valid() && PhysicsServer3D::get_singleton()->joint_get_type(j) == PhysicsServer3D::JOINT_TYPE_SLIDER;
24422446
if ("joint_constraints/linear_limit_upper" == p_name) {
24432447
linear_limit_upper = p_value;
2444-
if (j.is_valid()) {
2448+
if (is_valid_slider) {
24452449
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_LINEAR_LIMIT_UPPER, linear_limit_upper);
24462450
}
24472451

24482452
} else if ("joint_constraints/linear_limit_lower" == p_name) {
24492453
linear_limit_lower = p_value;
2450-
if (j.is_valid()) {
2454+
if (is_valid_slider) {
24512455
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_LINEAR_LIMIT_LOWER, linear_limit_lower);
24522456
}
24532457

24542458
} else if ("joint_constraints/linear_limit_softness" == p_name) {
24552459
linear_limit_softness = p_value;
2456-
if (j.is_valid()) {
2460+
if (is_valid_slider) {
24572461
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_LINEAR_LIMIT_SOFTNESS, linear_limit_softness);
24582462
}
24592463

24602464
} else if ("joint_constraints/linear_limit_restitution" == p_name) {
24612465
linear_limit_restitution = p_value;
2462-
if (j.is_valid()) {
2466+
if (is_valid_slider) {
24632467
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_LINEAR_LIMIT_RESTITUTION, linear_limit_restitution);
24642468
}
24652469

24662470
} else if ("joint_constraints/linear_limit_damping" == p_name) {
24672471
linear_limit_damping = p_value;
2468-
if (j.is_valid()) {
2472+
if (is_valid_slider) {
24692473
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_LINEAR_LIMIT_DAMPING, linear_limit_restitution);
24702474
}
24712475

24722476
} else if ("joint_constraints/angular_limit_upper" == p_name) {
24732477
angular_limit_upper = Math::deg_to_rad(real_t(p_value));
2474-
if (j.is_valid()) {
2478+
if (is_valid_slider) {
24752479
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_ANGULAR_LIMIT_UPPER, angular_limit_upper);
24762480
}
24772481

24782482
} else if ("joint_constraints/angular_limit_lower" == p_name) {
24792483
angular_limit_lower = Math::deg_to_rad(real_t(p_value));
2480-
if (j.is_valid()) {
2484+
if (is_valid_slider) {
24812485
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_ANGULAR_LIMIT_LOWER, angular_limit_lower);
24822486
}
24832487

24842488
} else if ("joint_constraints/angular_limit_softness" == p_name) {
24852489
angular_limit_softness = p_value;
2486-
if (j.is_valid()) {
2490+
if (is_valid_slider) {
24872491
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_ANGULAR_LIMIT_SOFTNESS, angular_limit_softness);
24882492
}
24892493

24902494
} else if ("joint_constraints/angular_limit_restitution" == p_name) {
24912495
angular_limit_restitution = p_value;
2492-
if (j.is_valid()) {
2496+
if (is_valid_slider) {
24932497
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_ANGULAR_LIMIT_SOFTNESS, angular_limit_softness);
24942498
}
24952499

24962500
} else if ("joint_constraints/angular_limit_damping" == p_name) {
24972501
angular_limit_damping = p_value;
2498-
if (j.is_valid()) {
2502+
if (is_valid_slider) {
24992503
PhysicsServer3D::get_singleton()->slider_joint_set_param(j, PhysicsServer3D::SLIDER_JOINT_ANGULAR_LIMIT_DAMPING, angular_limit_damping);
25002504
}
25012505

@@ -2580,130 +2584,130 @@ bool PhysicalBone3D::SixDOFJointData::_set(const StringName &p_name, const Varia
25802584
}
25812585

25822586
String var_name = path.get_slicec('/', 2);
2583-
2587+
bool is_valid_6dof = j.is_valid() && PhysicsServer3D::get_singleton()->joint_get_type(j) == PhysicsServer3D::JOINT_TYPE_6DOF;
25842588
if ("linear_limit_enabled" == var_name) {
25852589
axis_data[axis].linear_limit_enabled = p_value;
2586-
if (j.is_valid()) {
2590+
if (is_valid_6dof) {
25872591
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(j, axis, PhysicsServer3D::G6DOF_JOINT_FLAG_ENABLE_LINEAR_LIMIT, axis_data[axis].linear_limit_enabled);
25882592
}
25892593

25902594
} else if ("linear_limit_upper" == var_name) {
25912595
axis_data[axis].linear_limit_upper = p_value;
2592-
if (j.is_valid()) {
2596+
if (is_valid_6dof) {
25932597
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_LINEAR_UPPER_LIMIT, axis_data[axis].linear_limit_upper);
25942598
}
25952599

25962600
} else if ("linear_limit_lower" == var_name) {
25972601
axis_data[axis].linear_limit_lower = p_value;
2598-
if (j.is_valid()) {
2602+
if (is_valid_6dof) {
25992603
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_LINEAR_LOWER_LIMIT, axis_data[axis].linear_limit_lower);
26002604
}
26012605

26022606
} else if ("linear_limit_softness" == var_name) {
26032607
axis_data[axis].linear_limit_softness = p_value;
2604-
if (j.is_valid()) {
2608+
if (is_valid_6dof) {
26052609
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS, axis_data[axis].linear_limit_softness);
26062610
}
26072611

26082612
} else if ("linear_spring_enabled" == var_name) {
26092613
axis_data[axis].linear_spring_enabled = p_value;
2610-
if (j.is_valid()) {
2614+
if (is_valid_6dof) {
26112615
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(j, axis, PhysicsServer3D::G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING, axis_data[axis].linear_spring_enabled);
26122616
}
26132617

26142618
} else if ("linear_spring_stiffness" == var_name) {
26152619
axis_data[axis].linear_spring_stiffness = p_value;
2616-
if (j.is_valid()) {
2620+
if (is_valid_6dof) {
26172621
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS, axis_data[axis].linear_spring_stiffness);
26182622
}
26192623

26202624
} else if ("linear_spring_damping" == var_name) {
26212625
axis_data[axis].linear_spring_damping = p_value;
2622-
if (j.is_valid()) {
2626+
if (is_valid_6dof) {
26232627
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_LINEAR_SPRING_DAMPING, axis_data[axis].linear_spring_damping);
26242628
}
26252629

26262630
} else if ("linear_equilibrium_point" == var_name) {
26272631
axis_data[axis].linear_equilibrium_point = p_value;
2628-
if (j.is_valid()) {
2632+
if (is_valid_6dof) {
26292633
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT, axis_data[axis].linear_equilibrium_point);
26302634
}
26312635

26322636
} else if ("linear_restitution" == var_name) {
26332637
axis_data[axis].linear_restitution = p_value;
2634-
if (j.is_valid()) {
2638+
if (is_valid_6dof) {
26352639
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_LINEAR_RESTITUTION, axis_data[axis].linear_restitution);
26362640
}
26372641

26382642
} else if ("linear_damping" == var_name) {
26392643
axis_data[axis].linear_damping = p_value;
2640-
if (j.is_valid()) {
2644+
if (is_valid_6dof) {
26412645
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_LINEAR_DAMPING, axis_data[axis].linear_damping);
26422646
}
26432647

26442648
} else if ("angular_limit_enabled" == var_name) {
26452649
axis_data[axis].angular_limit_enabled = p_value;
2646-
if (j.is_valid()) {
2650+
if (is_valid_6dof) {
26472651
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(j, axis, PhysicsServer3D::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT, axis_data[axis].angular_limit_enabled);
26482652
}
26492653

26502654
} else if ("angular_limit_upper" == var_name) {
26512655
axis_data[axis].angular_limit_upper = Math::deg_to_rad(real_t(p_value));
2652-
if (j.is_valid()) {
2656+
if (is_valid_6dof) {
26532657
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_ANGULAR_UPPER_LIMIT, axis_data[axis].angular_limit_upper);
26542658
}
26552659

26562660
} else if ("angular_limit_lower" == var_name) {
26572661
axis_data[axis].angular_limit_lower = Math::deg_to_rad(real_t(p_value));
2658-
if (j.is_valid()) {
2662+
if (is_valid_6dof) {
26592663
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_ANGULAR_LOWER_LIMIT, axis_data[axis].angular_limit_lower);
26602664
}
26612665

26622666
} else if ("angular_limit_softness" == var_name) {
26632667
axis_data[axis].angular_limit_softness = p_value;
2664-
if (j.is_valid()) {
2668+
if (is_valid_6dof) {
26652669
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_ANGULAR_LIMIT_SOFTNESS, axis_data[axis].angular_limit_softness);
26662670
}
26672671

26682672
} else if ("angular_restitution" == var_name) {
26692673
axis_data[axis].angular_restitution = p_value;
2670-
if (j.is_valid()) {
2674+
if (is_valid_6dof) {
26712675
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_ANGULAR_RESTITUTION, axis_data[axis].angular_restitution);
26722676
}
26732677

26742678
} else if ("angular_damping" == var_name) {
26752679
axis_data[axis].angular_damping = p_value;
2676-
if (j.is_valid()) {
2680+
if (is_valid_6dof) {
26772681
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_ANGULAR_DAMPING, axis_data[axis].angular_damping);
26782682
}
26792683

26802684
} else if ("erp" == var_name) {
26812685
axis_data[axis].erp = p_value;
2682-
if (j.is_valid()) {
2686+
if (is_valid_6dof) {
26832687
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_ANGULAR_ERP, axis_data[axis].erp);
26842688
}
26852689

26862690
} else if ("angular_spring_enabled" == var_name) {
26872691
axis_data[axis].angular_spring_enabled = p_value;
2688-
if (j.is_valid()) {
2692+
if (is_valid_6dof) {
26892693
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(j, axis, PhysicsServer3D::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING, axis_data[axis].angular_spring_enabled);
26902694
}
26912695

26922696
} else if ("angular_spring_stiffness" == var_name) {
26932697
axis_data[axis].angular_spring_stiffness = p_value;
2694-
if (j.is_valid()) {
2698+
if (is_valid_6dof) {
26952699
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS, axis_data[axis].angular_spring_stiffness);
26962700
}
26972701

26982702
} else if ("angular_spring_damping" == var_name) {
26992703
axis_data[axis].angular_spring_damping = p_value;
2700-
if (j.is_valid()) {
2704+
if (is_valid_6dof) {
27012705
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_ANGULAR_SPRING_DAMPING, axis_data[axis].angular_spring_damping);
27022706
}
27032707

27042708
} else if ("angular_equilibrium_point" == var_name) {
27052709
axis_data[axis].angular_equilibrium_point = p_value;
2706-
if (j.is_valid()) {
2710+
if (is_valid_6dof) {
27072711
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer3D::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT, axis_data[axis].angular_equilibrium_point);
27082712
}
27092713

0 commit comments

Comments
 (0)