Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/collision.c
| Show First 20 Lines • Show All 1,232 Lines • ▼ Show 20 Lines | static void hair_collision(void *__restrict userdata, | ||||
| } | } | ||||
| } | } | ||||
| static void add_collision_object(ListBase *relations, | static void add_collision_object(ListBase *relations, | ||||
| Object *ob, | Object *ob, | ||||
| int level, | int level, | ||||
| unsigned int modifier_type) | unsigned int modifier_type) | ||||
| { | { | ||||
| CollisionModifierData *cmd = NULL; | |||||
| /* only get objects with collision modifier */ | /* only get objects with collision modifier */ | ||||
| if (((modifier_type == eModifierType_Collision) && ob->pd && ob->pd->deflect) || | ModifierData *cmd = BKE_modifiers_findby_type(ob, modifier_type); | ||||
| (modifier_type != eModifierType_Collision)) { | |||||
| cmd = (CollisionModifierData *)BKE_modifiers_findby_type(ob, modifier_type); | |||||
| } | |||||
| if (cmd) { | if (cmd) { | ||||
| CollisionRelation *relation = MEM_callocN(sizeof(CollisionRelation), "CollisionRelation"); | CollisionRelation *relation = MEM_callocN(sizeof(CollisionRelation), "CollisionRelation"); | ||||
| relation->ob = ob; | relation->ob = ob; | ||||
| BLI_addtail(relations, relation); | BLI_addtail(relations, relation); | ||||
| } | } | ||||
| /* objects in dupli groups, one level only for now */ | /* objects in dupli groups, one level only for now */ | ||||
| ▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | Object **BKE_collision_objects_create(Depsgraph *depsgraph, | ||||
| int maxnum = BLI_listbase_count(relations); | int maxnum = BLI_listbase_count(relations); | ||||
| int num = 0; | int num = 0; | ||||
| Object **objects = MEM_callocN(sizeof(Object *) * maxnum, __func__); | Object **objects = MEM_callocN(sizeof(Object *) * maxnum, __func__); | ||||
| LISTBASE_FOREACH (CollisionRelation *, relation, relations) { | LISTBASE_FOREACH (CollisionRelation *, relation, relations) { | ||||
| /* Get evaluated object. */ | /* Get evaluated object. */ | ||||
| Object *ob = (Object *)DEG_get_evaluated_id(depsgraph, &relation->ob->id); | Object *ob = (Object *)DEG_get_evaluated_id(depsgraph, &relation->ob->id); | ||||
| if (modifier_type == eModifierType_Collision && !(ob->pd && ob->pd->deflect)) { | |||||
| continue; | |||||
| } | |||||
| if (ob != self) { | if (ob != self) { | ||||
| objects[num] = ob; | objects[num] = ob; | ||||
| num++; | num++; | ||||
| } | } | ||||
| } | } | ||||
| if (num == 0) { | if (num == 0) { | ||||
| MEM_freeN(objects); | MEM_freeN(objects); | ||||
| ▲ Show 20 Lines • Show All 436 Lines • Show Last 20 Lines | |||||