Revision: 14846
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14846
Author:   ben2610
Date:     2008-05-14 22:22:57 +0200 (Wed, 14 May 2008)

Log Message:
-----------
Fix BGE bug #7532: TrackTo Actuator does not work correctly if it has a Vertex 
Parent.  This is only a partial fix: the user must put the parent vertex at the 
center of the parent object and disable the physics on the tracking object (use 
empty or collision free object).

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Ketsji/KX_SG_NodeRelationships.h
    trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp
    trunk/blender/source/gameengine/SceneGraph/SG_Node.cpp
    trunk/blender/source/gameengine/SceneGraph/SG_Node.h
    trunk/blender/source/gameengine/SceneGraph/SG_ParentRelation.h

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h      2008-05-14 
20:01:22 UTC (rev 14845)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h      2008-05-14 
20:22:57 UTC (rev 14846)
@@ -368,7 +368,15 @@
        { 
                return m_bDyna; 
        }
-       
+
+       /**
+        * Check if this object has a vertex parent relationship
+        */
+       bool IsVertexParent( )
+       {
+               return (m_pSGNode && m_pSGNode->GetSGParent() && 
m_pSGNode->GetSGParent()->IsVertexParent());
+       }
+
        bool RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, 
MT_Vector3& hit_normal, void * const data);
 
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_SG_NodeRelationships.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_SG_NodeRelationships.h    
2008-05-14 20:01:22 UTC (rev 14845)
+++ trunk/blender/source/gameengine/Ketsji/KX_SG_NodeRelationships.h    
2008-05-14 20:22:57 UTC (rev 14846)
@@ -129,6 +129,12 @@
        ~KX_VertexParentRelation(
        );
 
+               bool
+       IsVertexRelation(
+       ) { 
+               return true;
+       }
+
 private :
 
        KX_VertexParentRelation(

Modified: trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp       
2008-05-14 20:01:22 UTC (rev 14845)
+++ trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp       
2008-05-14 20:22:57 UTC (rev 14846)
@@ -69,13 +69,19 @@
        m_upflag = upflag;
        m_parentobj = 0;
        
-       if (m_object){
+       if (m_object)
                m_object->RegisterActuator(this);
-               KX_GameObject* curobj = (KX_GameObject*) GetParent();
 
-               m_parentobj = curobj->GetParent(); // check if the object is 
parented 
-               if (m_parentobj) {  // if so, store the initial local rotation
-                       m_parentlocalmat = 
m_parentobj->GetSGNode()->GetLocalOrientation();
+       if (gameobj->isA(&KX_GameObject::Type))
+       {
+               // if the object is vertex parented, don't check parent 
orientation as the link is broken
+               if (!((KX_GameObject*)gameobj)->IsVertexParent()){
+                       m_parentobj = ((KX_GameObject*)gameobj)->GetParent(); 
// check if the object is parented 
+                       if (m_parentobj) {  
+                               // if so, store the initial local rotation
+                               // this is needed to revert the effect of the 
parent inverse node (TBC)
+                               m_parentlocalmat = 
m_parentobj->GetSGNode()->GetLocalOrientation();
+                       }
                }
        }
 
@@ -180,6 +186,8 @@
 {
        if (m_object)
                m_object->UnregisterActuator(this);
+       if (m_parentobj)
+               m_parentobj->Release();
 } /* end of destructor */
 
 void KX_TrackToActuator::ProcessReplica()

Modified: trunk/blender/source/gameengine/SceneGraph/SG_Node.cpp
===================================================================
--- trunk/blender/source/gameengine/SceneGraph/SG_Node.cpp      2008-05-14 
20:01:22 UTC (rev 14845)
+++ trunk/blender/source/gameengine/SceneGraph/SG_Node.cpp      2008-05-14 
20:22:57 UTC (rev 14846)
@@ -148,6 +148,16 @@
        return (m_SGparent ? (const SG_Node*) m_SGparent->GetRootSGParent() : 
(const SG_Node*) this);
 }
 
+       bool
+SG_Node::
+IsVertexParent()
+{
+       if (m_parent_relation)
+       {
+               return m_parent_relation->IsVertexRelation();
+       }
+       return false;
+}
 
        void 
 SG_Node::

Modified: trunk/blender/source/gameengine/SceneGraph/SG_Node.h
===================================================================
--- trunk/blender/source/gameengine/SceneGraph/SG_Node.h        2008-05-14 
20:01:22 UTC (rev 14845)
+++ trunk/blender/source/gameengine/SceneGraph/SG_Node.h        2008-05-14 
20:22:57 UTC (rev 14846)
@@ -152,6 +152,14 @@
        ) ;
 
 
+       /**
+        * Return vertex parent status.
+        */
+
+               bool    
+       IsVertexParent(
+       ) ;
+
        /**             
         * Update the spatial data of this node. Iterate through
         * the children of this node and update their world data.

Modified: trunk/blender/source/gameengine/SceneGraph/SG_ParentRelation.h
===================================================================
--- trunk/blender/source/gameengine/SceneGraph/SG_ParentRelation.h      
2008-05-14 20:01:22 UTC (rev 14845)
+++ trunk/blender/source/gameengine/SceneGraph/SG_ParentRelation.h      
2008-05-14 20:22:57 UTC (rev 14846)
@@ -90,6 +90,15 @@
        NewCopy(
        ) = 0;
 
+       /**
+        * Vertex Parent Relation are special: they don't propagate rotation
+        */
+       virtual
+               bool
+       IsVertexRelation(
+       ) { 
+               return false;
+       }
 protected :
 
        /** 


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to