From 64d4d6b134d5b36c43aa55e09ad92d8593a18269 Mon Sep 17 00:00:00 2001 From: Alexander Gavrilov Date: Sun, 31 Jul 2016 18:56:44 +1000 Subject: Support limiting collisions by group for softbody and particles This feature is extremely useful for layering multiple cloth objects, and there is no reason there shouldn't be the same kind of feature for softbody. --- source/blender/blenloader/intern/readfile.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'source/blender/blenloader') diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 50e5eb195db..f6d371ee2d3 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4040,6 +4040,7 @@ static void lib_link_particlesettings(FileData *fd, Main *main) part->dup_group = newlibadr(fd, part->id.lib, part->dup_group); part->eff_group = newlibadr(fd, part->id.lib, part->eff_group); part->bb_ob = newlibadr(fd, part->id.lib, part->bb_ob); + part->collision_group = newlibadr(fd, part->id.lib, part->collision_group); lib_link_partdeflect(fd, &part->id, part->pd); lib_link_partdeflect(fd, &part->id, part->pd2); @@ -4891,8 +4892,11 @@ static void lib_link_object(FileData *fd, Main *main) if (ob->pd) lib_link_partdeflect(fd, &ob->id, ob->pd); - if (ob->soft) + if (ob->soft) { + ob->soft->collision_group = newlibadr(fd, ob->id.lib, ob->soft->collision_group); + ob->soft->effector_weights->group = newlibadr(fd, ob->id.lib, ob->soft->effector_weights->group); + } lib_link_particlesystems(fd, ob, &ob->id, &ob->particlesystem); lib_link_modifiers(fd, ob); @@ -8840,6 +8844,7 @@ static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSetting expand_doit(fd, mainvar, part->dup_group); expand_doit(fd, mainvar, part->eff_group); expand_doit(fd, mainvar, part->bb_ob); + expand_doit(fd, mainvar, part->collision_group); if (part->adt) expand_animdata(fd, mainvar, part->adt); @@ -9329,6 +9334,8 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob) } if (ob->soft) { + expand_doit(fd, mainvar, ob->soft->collision_group); + if (ob->soft->effector_weights) { expand_doit(fd, mainvar, ob->soft->effector_weights->group); } -- cgit v1.2.3