Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Genrich <daniel.genrich@gmx.net>2012-03-20 21:51:14 +0400
committerDaniel Genrich <daniel.genrich@gmx.net>2012-03-20 21:51:14 +0400
commit8186c5e429304e7dbca8bcfc45a712bcbe00adc0 (patch)
treeebadb4fd643bfc791bc7b74d73a1ed6c8d8eca9a /source/blender/modifiers/intern/MOD_smoke.c
parente89642ef99c092a16c11a23928f47d3e67902c20 (diff)
Smoke bugfix: Fix copy paste + bad "if's" resulting in missing releation in depsgraph (smoke collision groups not working, collision object relations wrong).
Diffstat (limited to 'source/blender/modifiers/intern/MOD_smoke.c')
-rw-r--r--source/blender/modifiers/intern/MOD_smoke.c38
1 files changed, 26 insertions, 12 deletions
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");
}
}
}