BGE: Cleaning up BL_ShapeDeformer's use of Blender's Key. This also fixes a bug with...
authorMitchell Stokes <mogurijin@gmail.com>
Sun, 14 Apr 2013 18:54:06 +0000 (18:54 +0000)
committerMitchell Stokes <mogurijin@gmail.com>
Sun, 14 Apr 2013 18:54:06 +0000 (18:54 +0000)
source/gameengine/Converter/BL_ShapeDeformer.cpp
source/gameengine/Converter/BL_ShapeDeformer.h

index f262532e7e2e8e70340010d5faaba62205bf19d3..59cf10d326a422a8bca83d87858e8307732fd536 100644 (file)
@@ -52,6 +52,7 @@
 #include "BKE_main.h"
 #include "BKE_key.h"
 #include "BKE_ipo.h"
+#include "BKE_library.h"
 #include "MT_Point3.h"
 
 extern "C"{
@@ -73,8 +74,7 @@ BL_ShapeDeformer::BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
       m_useShapeDrivers(false),
       m_lastShapeUpdate(-1)
 {
-       m_key = m_bmesh->key;
-       m_bmesh->key = BKE_key_copy(m_key);
+       m_key = BKE_key_copy(m_bmesh->key);
 };
 
 /* this second constructor is needed for making a mesh deformable on the fly. */
@@ -90,18 +90,14 @@ BL_ShapeDeformer::BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
                                        m_useShapeDrivers(false),
                                        m_lastShapeUpdate(-1)
 {
-       m_key = m_bmesh->key;
-       m_bmesh->key = BKE_key_copy(m_key);
+       m_key = BKE_key_copy(m_bmesh->key);
 };
 
 BL_ShapeDeformer::~BL_ShapeDeformer()
 {
-       if (m_key && m_bmesh->key && m_key != m_bmesh->key)
+       if (m_key)
        {
-               BKE_key_free(m_bmesh->key);
-               BLI_remlink_safe(&G.main->key, m_bmesh->key);
-               MEM_freeN(m_bmesh->key);
-               m_bmesh->key = m_key;
+               BKE_libblock_free(&G.main->key, m_key);
                m_key = NULL;
        }
 };
@@ -119,6 +115,8 @@ void BL_ShapeDeformer::ProcessReplica()
 {
        BL_SkinDeformer::ProcessReplica();
        m_lastShapeUpdate = -1;
+
+       m_key = BKE_key_copy(m_key);
 }
 
 bool BL_ShapeDeformer::LoadShapeDrivers(Object* arma)
@@ -165,12 +163,12 @@ bool BL_ShapeDeformer::Update(void)
                m_pMeshObject->CheckWeightCache(blendobj);
 
                /* we will blend the key directly in m_transverts array: it is used by armature as the start position */
-               /* m_bmesh->key can be NULL in case of Modifier deformer */
-               if (m_bmesh->key) {
+               /* m_key can be NULL in case of Modifier deformer */
+               if (m_key) {
                        /* store verts locally */
                        VerifyStorage();
 
-                       BKE_key_evaluate_relative(0, m_bmesh->totvert, m_bmesh->totvert, (char *)(float *)m_transverts, m_bmesh->key, NULL, 0); /* last arg is ignored */
+                       BKE_key_evaluate_relative(0, m_bmesh->totvert, m_bmesh->totvert, (char *)(float *)m_transverts, m_key, NULL, 0); /* last arg is ignored */
                        m_bDynamic = true;
                }
 
@@ -199,15 +197,11 @@ bool BL_ShapeDeformer::Update(void)
 #endif
                bSkinUpdate = true;
        }
+
        return bSkinUpdate;
 }
 
 Key *BL_ShapeDeformer::GetKey()
 {
-       return m_bmesh->key;
-}
-
-void BL_ShapeDeformer::SetKey(Key *key)
-{
-       m_bmesh->key = key;
+       return m_key;
 }
index 60f27c85e4f6ccc73e300cc3bb49e718c27215c9..a506fb9c7f6ecf3cf464cbec2e59f26962d87f11 100644 (file)
@@ -65,7 +65,6 @@ public:
        bool ExecuteShapeDrivers(void);
 
        struct Key *GetKey();
-       void SetKey(struct Key *key);
 
        void ForceUpdate()
        {