Revision: 37990
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37990
Author:   moguri
Date:     2011-06-30 19:33:13 +0000 (Thu, 30 Jun 2011)
Log Message:
-----------
BGE Animations: Shape drivers are now working again.

Modified Paths:
--------------
    branches/soc-2011-pepper/source/gameengine/Converter/BL_ShapeDeformer.cpp
    branches/soc-2011-pepper/source/gameengine/Converter/BL_ShapeDeformer.h

Modified: 
branches/soc-2011-pepper/source/gameengine/Converter/BL_ShapeDeformer.cpp
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/BL_ShapeDeformer.cpp   
2011-06-30 18:24:45 UTC (rev 37989)
+++ branches/soc-2011-pepper/source/gameengine/Converter/BL_ShapeDeformer.cpp   
2011-06-30 19:33:13 UTC (rev 37990)
@@ -44,13 +44,12 @@
 #include "RAS_MeshObject.h"
 
 //#include "BL_ArmatureController.h"
+#include "DNA_anim_types.h"
 #include "DNA_armature_types.h"
 #include "DNA_action_types.h"
 #include "DNA_key_types.h"
 #include "DNA_mesh_types.h"
 #include "DNA_meshdata_types.h"
-#include "DNA_ipo_types.h"
-#include "DNA_curve_types.h"
 #include "BKE_armature.h"
 #include "BKE_action.h"
 #include "BKE_key.h"
@@ -59,6 +58,7 @@
 
 extern "C"{
        #include "BKE_lattice.h"
+       #include "BKE_animsys.h"
 }
  
 
@@ -73,7 +73,8 @@
                     RAS_MeshObject *mesh)
                                :       
                                        BL_SkinDeformer(gameobj,bmeshobj, mesh),
-                                       m_lastShapeUpdate(-1)
+                                       m_lastShapeUpdate(-1),
+                                       m_useShapeDrivers(false)
 {
        m_key = m_bmesh->key;
        m_bmesh->key = copy_key(m_key);
@@ -89,7 +90,8 @@
                                BL_ArmatureObject* arma)
                                :
                                        BL_SkinDeformer(gameobj, bmeshobj_old, 
bmeshobj_new, mesh, release_object, recalc_normal, arma),
-                                       m_lastShapeUpdate(-1)
+                                       m_lastShapeUpdate(-1),
+                                       m_useShapeDrivers(false)
 {
        m_key = m_bmesh->key;
        m_bmesh->key = copy_key(m_key);
@@ -121,45 +123,23 @@
 
 bool BL_ShapeDeformer::LoadShapeDrivers(Object* arma)
 {
-       IpoCurve *icu;
+       // This used to check if we had drivers from this armature,
+       // now we just assume we want to use shape drivers
+       // and let the animsys handle things.
+       m_useShapeDrivers = true;
 
-       m_shapeDrivers.clear();
-       // check if this mesh has armature driven shape keys
-       if (m_bmesh->key && m_bmesh->key->ipo) {
-               for(icu= (IpoCurve*)m_bmesh->key->ipo->curve.first; icu; icu= 
(IpoCurve*)icu->next) {
-                       if(icu->driver && 
-                               (icu->flag & IPO_MUTE) == 0 &&
-                               icu->driver->type == IPO_DRIVER_TYPE_NORMAL &&
-                               icu->driver->ob == arma &&
-                               icu->driver->blocktype == ID_AR) {
-                               // this shape key ipo curve has a driver on the 
parent armature
-                               // record this curve in the shape deformer so 
that the corresponding
-                               m_shapeDrivers.push_back(icu);
-                       }
-               }
-       }
-       return !m_shapeDrivers.empty();
+       return true;
 }
 
 bool BL_ShapeDeformer::ExecuteShapeDrivers(void)
 {
-       if (!m_shapeDrivers.empty() && PoseUpdated()) {
-               vector<IpoCurve*>::iterator it;
-//             void *poin;
-//             int type;
-
+       if (m_useShapeDrivers && PoseUpdated()) {
                // the shape drivers use the bone matrix as input. Must 
                // update the matrix now
                m_armobj->ApplyPose();
 
-               for (it=m_shapeDrivers.begin(); it!=m_shapeDrivers.end(); it++) 
{
-                       // no need to set a specific time: this curve has a 
driver
-                       // XXX IpoCurve *icu = *it;
-                       //calc_icu(icu, 1.0f);
-                       //poin = get_ipo_poin((ID*)m_bmesh->key, icu, &type);
-                       //if (poin) 
-                       //      write_ipo_poin(poin, type, icu->curval);
-               }
+               // We don't need an actual time, just use 0
+               BKE_animsys_evaluate_animdata(&GetKey()->id, GetKey()->adt, 
0.f, ADT_RECALC_DRIVERS);
 
                ForceUpdate();
                m_armobj->RestorePose();

Modified: 
branches/soc-2011-pepper/source/gameengine/Converter/BL_ShapeDeformer.h
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/BL_ShapeDeformer.h     
2011-06-30 18:24:45 UTC (rev 37989)
+++ branches/soc-2011-pepper/source/gameengine/Converter/BL_ShapeDeformer.h     
2011-06-30 19:33:13 UTC (rev 37990)
@@ -42,8 +42,6 @@
 #include "BL_DeformableGameObject.h"
 #include <vector>
 
-struct IpoCurve;
-
 class BL_ShapeDeformer : public BL_SkinDeformer  
 {
 public:
@@ -77,9 +75,9 @@
        };
 
 protected:
-       vector<IpoCurve*>                m_shapeDrivers;
-       double                                   m_lastShapeUpdate;
-       struct Key*                              m_key;
+       bool                    m_useShapeDrivers;      
+       double                  m_lastShapeUpdate;
+       struct Key*             m_key;
 
 
 #ifdef WITH_CXX_GUARDEDALLOC

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

Reply via email to