diff options
-rw-r--r-- | source/blender/blenkernel/intern/rigidbody.c | 5 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_280.c | 52 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_rigidbody_types.h | 22 |
3 files changed, 55 insertions, 24 deletions
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c index f08de835a9d..4d37c2ea931 100644 --- a/source/blender/blenkernel/intern/rigidbody.c +++ b/source/blender/blenkernel/intern/rigidbody.c @@ -1027,6 +1027,11 @@ static void rigidbody_validate_sim_constraint(RigidBodyWorld *rbw, Object *ob, b return; } + /* When 'rbc->type' is unknown. */ + if (rbc->physics_constraint == NULL) { + return; + } + RB_constraint_set_enabled(rbc->physics_constraint, rbc->flag & RBC_FLAG_ENABLED); if (rbc->flag & RBC_FLAG_USE_BREAKING) { diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index b90413aa5ca..329767ef202 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -4998,19 +4998,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) } } - /** - * Versioning code until next subversion bump goes here. - * - * \note Be sure to check when bumping the version: - * - #do_versions_after_linking_280 in this file. - * - "versioning_userdef.c", #BLO_version_defaults_userpref_blend - * - "versioning_userdef.c", #do_versions_theme - * - * \note Keep this message at the bottom of the function. - */ - { - /* Keep this block, even when empty. */ - + if (!MAIN_VERSION_ATLEAST(bmain, 283, 14)) { /* Solidify modifier merge tolerance. */ if (!DNA_struct_elem_find(fd->filesdna, "SolidifyModifierData", "float", "merge_tolerance")) { for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) { @@ -5023,5 +5011,43 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) } } } + + /* Enumerator was incorrect for a time in 2.83 development. + * Note that this only corrects values known to be invalid. */ + for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) { + RigidBodyCon *rbc = ob->rigidbody_constraint; + if (rbc != NULL) { + enum { + INVALID_RBC_TYPE_SLIDER = 2, + INVALID_RBC_TYPE_6DOF_SPRING = 4, + INVALID_RBC_TYPE_MOTOR = 7, + }; + switch (rbc->type) { + case INVALID_RBC_TYPE_SLIDER: + rbc->type = RBC_TYPE_SLIDER; + break; + case INVALID_RBC_TYPE_6DOF_SPRING: + rbc->type = RBC_TYPE_6DOF_SPRING; + break; + case INVALID_RBC_TYPE_MOTOR: + rbc->type = RBC_TYPE_MOTOR; + break; + } + } + } + } + + /** + * Versioning code until next subversion bump goes here. + * + * \note Be sure to check when bumping the version: + * - #do_versions_after_linking_280 in this file. + * - "versioning_userdef.c", #BLO_version_defaults_userpref_blend + * - "versioning_userdef.c", #do_versions_theme + * + * \note Keep this message at the bottom of the function. + */ + { + /* Keep this block, even when empty. */ } } diff --git a/source/blender/makesdna/DNA_rigidbody_types.h b/source/blender/makesdna/DNA_rigidbody_types.h index 5c514ef04e1..7ae97187c25 100644 --- a/source/blender/makesdna/DNA_rigidbody_types.h +++ b/source/blender/makesdna/DNA_rigidbody_types.h @@ -306,28 +306,28 @@ typedef enum eRigidBodyCon_Type { /** lets bodies rotate around a specified point */ RBC_TYPE_POINT = 0, /** lets bodies rotate around a specified axis */ - RBC_TYPE_HINGE, + RBC_TYPE_HINGE = 1, /** simulates wheel suspension */ - /* RBC_TYPE_HINGE2, */ /* UNUSED */ + /* RBC_TYPE_HINGE2 = 2, */ /* UNUSED */ /** restricts movent to a specified axis */ - RBC_TYPE_SLIDER, + RBC_TYPE_SLIDER = 3, /** lets object rotate within a specified cone */ - /* RBC_TYPE_CONE_TWIST, */ /* UNUSED */ + /* RBC_TYPE_CONE_TWIST = 4, */ /* UNUSED */ /** allows user to specify constraint axes */ - RBC_TYPE_6DOF, + RBC_TYPE_6DOF = 5, /** like 6DOF but has springs */ - RBC_TYPE_6DOF_SPRING, + RBC_TYPE_6DOF_SPRING = 6, /** simulates a universal joint */ - /* RBC_TYPE_UNIVERSAL, */ /* UNUSED */ + /* RBC_TYPE_UNIVERSAL = 7, */ /* UNUSED */ /** glues two bodies together */ - RBC_TYPE_FIXED, + RBC_TYPE_FIXED = 8, /** similar to slider but also allows rotation around slider axis */ - RBC_TYPE_PISTON, + RBC_TYPE_PISTON = 9, /** Simplified spring constraint with only once axis that's * automatically placed between the connected bodies */ - /* RBC_TYPE_SPRING, */ /* UNUSED */ + /* RBC_TYPE_SPRING = 10, */ /* UNUSED */ /** dirves bodies by applying linear and angular forces */ - RBC_TYPE_MOTOR, + RBC_TYPE_MOTOR = 11, } eRigidBodyCon_Type; /* Spring implementation type for RigidBodyOb */ |