[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16399] trunk/blender/source/gameengine/ Converter/BL_BlenderDataConversion.cpp: BGE patch: break parent relationship when child and parent are not active/ inactive at the same time.
Benoit Bolsee
benoit.bolsee at online.be
Sun Sep 7 00:06:43 CEST 2008
Revision: 16399
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16399
Author: ben2610
Date: 2008-09-07 00:06:01 +0200 (Sun, 07 Sep 2008)
Log Message:
-----------
BGE patch: break parent relationship when child and parent are not active/inactive at the same time. This unusual situation is used in Apricot for test purposes.
Modified Paths:
--------------
trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2008-09-06 17:49:26 UTC (rev 16398)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2008-09-06 22:06:01 UTC (rev 16399)
@@ -2144,7 +2144,6 @@
gameobj->NodeUpdateGS(0,true);
gameobj->AddMeshUser();
-
}
else
{
@@ -2209,6 +2208,24 @@
{
struct Object* blenderchild = pcit->m_blenderchild;
+ struct Object* blenderparent = blenderchild->parent;
+ KX_GameObject* parentobj = converter->FindGameObject(blenderparent);
+ KX_GameObject* childobj = converter->FindGameObject(blenderchild);
+
+ assert(childobj);
+
+ if (!parentobj || objectlist->SearchValue(childobj) != objectlist->SearchValue(parentobj))
+ {
+ // special case: the parent and child object are not in the same layer.
+ // This weird situation is used in Apricot for test purposes.
+ // Resolve it by breaking the parent relationship
+ childobj->GetSGNode()->DisconnectFromParent();
+ delete pcit->m_gamechildnode;
+ // This leave the child object is an incorrect position: its local position becomes
+ // the global position but we don't care: the child should be in an invisble layer
+ continue;
+ }
+
switch (blenderchild->partype)
{
case PARVERT1:
@@ -2248,12 +2265,7 @@
break;
}
- struct Object* blenderparent = blenderchild->parent;
- KX_GameObject* parentobj = converter->FindGameObject(blenderparent);
- if (parentobj)
- {
- parentobj-> GetSGNode()->AddChild(pcit->m_gamechildnode);
- }
+ parentobj-> GetSGNode()->AddChild(pcit->m_gamechildnode);
}
vec_parent_child.clear();
More information about the Bf-blender-cvs
mailing list