BGE Animations: Shape drivers are now working again.
[blender.git] / source / gameengine / Converter / BL_ShapeDeformer.h
index 5f0188e3a42e145be2d4c24c1fe817a62bbfeb5b..655cc9d7aebc9d6e049597356ca5dd2ef2133e59 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * $Id$
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
  * ***** END GPL LICENSE BLOCK *****
  */
 
+/** \file BL_ShapeDeformer.h
+ *  \ingroup bgeconv
+ */
+
 #ifndef BL_SHAPEDEFORMER
 #define BL_SHAPEDEFORMER
 
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
 #pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
 #endif //WIN32
 
 #include "BL_DeformableGameObject.h"
 #include <vector>
 
-struct IpoCurve;
-
 class BL_ShapeDeformer : public BL_SkinDeformer  
 {
 public:
-       virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map)
-       {
-               void **h_obj = (*map)[m_gameobj];
-               if (h_obj){
-                       m_gameobj = (BL_DeformableGameObject*)(*h_obj);
-               }
-               else
-                       m_gameobj=NULL;
-               // relink the underlying skin deformer
-               BL_SkinDeformer::Relink(map);
-       };
        BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
                      Object *bmeshobj,
-                     BL_SkinMeshObject *mesh)
-                                       :       
-                                               BL_SkinDeformer(gameobj,bmeshobj, mesh),
-                                               m_lastShapeUpdate(-1)
-       {
-       };
+                     RAS_MeshObject *mesh);
 
        /* this second constructor is needed for making a mesh deformable on the fly. */
        BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
                                        struct Object *bmeshobj_old,
                                        struct Object *bmeshobj_new,
-                                       class BL_SkinMeshObject *mesh,
+                                       class RAS_MeshObject *mesh,
                                        bool release_object,
-                                       BL_ArmatureObject* arma = NULL)
-                                       :
-                                               BL_SkinDeformer(gameobj, bmeshobj_old, bmeshobj_new, mesh, release_object, arma),
-                                               m_lastShapeUpdate(-1)
-       {
-       };
+                                       bool recalc_normal,
+                                       BL_ArmatureObject* arma = NULL);
 
-       virtual void ProcessReplica();
        virtual RAS_Deformer *GetReplica();
+       virtual void ProcessReplica();
        virtual ~BL_ShapeDeformer();
 
        bool Update (void);
        bool LoadShapeDrivers(Object* arma);
        bool ExecuteShapeDrivers(void);
 
+       struct Key *GetKey();
+       void SetKey(struct Key *key);
+
        void ForceUpdate()
        {
                m_lastShapeUpdate = -1.0;
        };
 
 protected:
-       vector<IpoCurve*>                m_shapeDrivers;
-       double                                   m_lastShapeUpdate;
+       bool                    m_useShapeDrivers;      
+       double                  m_lastShapeUpdate;
+       struct Key*             m_key;
 
+
+#ifdef WITH_CXX_GUARDEDALLOC
+public:
+       void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:BL_ShapeDeformer"); }
+       void operator delete( void *mem ) { MEM_freeN(mem); }
+#endif
 };
 
 #endif