From 8186c5e429304e7dbca8bcfc45a712bcbe00adc0 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Tue, 20 Mar 2012 17:51:14 +0000 Subject: Smoke bugfix: Fix copy paste + bad "if's" resulting in missing releation in depsgraph (smoke collision groups not working, collision object relations wrong). --- source/blender/modifiers/intern/MOD_smoke.c | 38 ++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 12 deletions(-) (limited to 'source/blender/modifiers/intern/MOD_smoke.c') diff --git a/source/blender/modifiers/intern/MOD_smoke.c b/source/blender/modifiers/intern/MOD_smoke.c index 1472639739e..8e045aba030 100644 --- a/source/blender/modifiers/intern/MOD_smoke.c +++ b/source/blender/modifiers/intern/MOD_smoke.c @@ -110,20 +110,34 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, SmokeModifierData *smd = (SmokeModifierData *) md; if (smd && (smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) { - if (smd->domain->fluid_group) { + if (smd->domain->fluid_group || smd->domain->coll_group) { GroupObject *go = NULL; - for (go = smd->domain->fluid_group->gobject.first; go; go = go->next) { - if (go->ob) { - SmokeModifierData *smd2 = (SmokeModifierData *)modifiers_findByType(go->ob, eModifierType_Smoke); - - // check for initialized smoke object - if (smd2 && (((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) || ((smd->type & MOD_SMOKE_TYPE_COLL) && smd2->coll))) { - DagNode *curNode = dag_get_node(forest, go->ob); - dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Smoke Flow"); + if(smd->domain->fluid_group) + for (go = smd->domain->fluid_group->gobject.first; go; go = go->next) { + if (go->ob) { + SmokeModifierData *smd2 = (SmokeModifierData *)modifiers_findByType(go->ob, eModifierType_Smoke); + + // check for initialized smoke object + if (smd2 && (smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) { + DagNode *curNode = dag_get_node(forest, go->ob); + dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Smoke Flow"); + } + } + } + + if(smd->domain->coll_group) + for (go = smd->domain->coll_group->gobject.first; go; go = go->next) { + if (go->ob) { + SmokeModifierData *smd2 = (SmokeModifierData *)modifiers_findByType(go->ob, eModifierType_Smoke); + + // check for initialized smoke object + if (smd2 && (smd2->type & MOD_SMOKE_TYPE_COLL) && smd2->coll) { + DagNode *curNode = dag_get_node(forest, go->ob); + dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Smoke Coll"); + } } } - } } else { Base *base = scene->base.first; @@ -131,9 +145,9 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, for ( ; base; base = base->next) { SmokeModifierData *smd2 = (SmokeModifierData *)modifiers_findByType(base->object, eModifierType_Smoke); - if (smd2 && (((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) || ((smd->type & MOD_SMOKE_TYPE_COLL) && smd2->coll))) { + if (smd2 && (((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) || ((smd2->type & MOD_SMOKE_TYPE_COLL) && smd2->coll))) { DagNode *curNode = dag_get_node(forest, base->object); - dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Smoke Flow"); + dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Smoke Flow/Coll"); } } } -- cgit v1.2.3