diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-02-22 15:25:58 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-02-22 15:25:58 +0300 |
commit | 4ef1fd1078bbdb8ecb905fc9cd3db60c378408b0 (patch) | |
tree | 408bbfb210658cae5a9075791d59dc4c7a4623a9 /source/gameengine/Converter | |
parent | dd03793f4edd455c09a1a2273e5e991dd3bd702b (diff) |
game engine support for recording animation back & some other minor changes.
Diffstat (limited to 'source/gameengine/Converter')
-rw-r--r-- | source/gameengine/Converter/KX_BlenderSceneConverter.cpp | 79 | ||||
-rw-r--r-- | source/gameengine/Converter/KX_BlenderSceneConverter.h | 4 |
2 files changed, 27 insertions, 56 deletions
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index 411ddc58c92..3ee4248343c 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -82,13 +82,16 @@ extern "C" #include "MEM_guardedalloc.h" //XXX #include "BSE_editipo.h" //XXX #include "BSE_editipo_types.h" -#include "DNA_ipo_types.h" +// #include "DNA_ipo_types.h" #include "BKE_global.h" +#include "BKE_animsys.h" #include "BKE_library.h" #include "BKE_ipo.h" // eval_icu #include "BKE_material.h" // copy_material #include "BKE_mesh.h" // copy_mesh #include "DNA_space_types.h" +#include "DNA_anim_types.h" +#include "../../blender/editors/include/ED_keyframing.h" } /* Only for dynamic loading and merging */ @@ -621,57 +624,12 @@ void KX_BlenderSceneConverter::RegisterWorldInfo( m_worldinfos.push_back(pair<KX_Scene*,KX_WorldInfo*>(m_currentScene,worldinfo)); } -/* - * When deleting an IPO curve from Python, check if the IPO is being - * edited and if so clear the pointer to the old curve. - */ -void KX_BlenderSceneConverter::localDel_ipoCurve ( IpoCurve * icu ) -{ -#if 0 //XXX - if (!G.sipo) - return; - - int i; - EditIpo *ei= (EditIpo *)G.sipo->editipo; - if (!ei) return; - - for(i=0; i<G.sipo->totipo; i++, ei++) { - if ( ei->icu == icu ) { - ei->flag &= ~(IPO_SELECT | IPO_EDIT); - ei->icu= 0; - return; - } - } -#endif -} - //quick hack extern "C" { - Ipo *add_ipo( char *name, int idcode ); - //XXX char *getIpoCurveName( IpoCurve * icu ); - //XXX struct IpoCurve *verify_ipocurve(struct ID *, short, char *, char *, char *, int); - //XXX void testhandles_ipocurve(struct IpoCurve *icu); - void insert_vert_icu(struct IpoCurve *, float, float, short); - float eval_icu(struct IpoCurve *icu, float ipotime); - //void mat3_to_eul( float *eul,float tmat[][3]); void mat3_to_compatible_eul( float *eul, float *oldrot,float mat[][3]); } -IpoCurve* findIpoCurve(IpoCurve* first, const char* searchName) -{ - IpoCurve* icu1; - for( icu1 = first; icu1; icu1 = icu1->next ) - { - /*XXX char* curveName = getIpoCurveName( icu1 ); - if( !strcmp( curveName, searchName) ) - { - return icu1; - }*/ - } - return 0; -} - void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo) { @@ -695,6 +653,7 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo) Object* blenderObject = gameObj->GetBlenderObject(); if (blenderObject) { +#if 0 //erase existing ipo's Ipo* ipo = blenderObject->ipo;//findIpoForName(blenderObject->id.name+2); if (ipo) @@ -728,11 +687,7 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo) blenderObject->ipo = ipo; } - - - - - +#endif } } @@ -811,8 +766,28 @@ void KX_BlenderSceneConverter::WritePhysicsObjectToAnimationIpo(int frameNumber) //KX_IPhysicsController* physCtrl = gameObj->GetPhysicsController(); Object* blenderObject = gameObj->GetBlenderObject(); - if (blenderObject && blenderObject->ipo) + + if(blenderObject->adt==NULL) + BKE_id_add_animdata(&blenderObject->id); + + if (blenderObject && blenderObject->adt) { + const MT_Point3& position = gameObj->NodeGetWorldPosition(); + //const MT_Vector3& scale = gameObj->NodeGetWorldScaling(); + const MT_Matrix3x3& orn = gameObj->NodeGetWorldOrientation(); + + position.getValue(blenderObject->loc); + + float tmat[3][3]; + for (int r=0;r<3;r++) + for (int c=0;c<3;c++) + tmat[r][c] = orn[c][r]; + + mat3_to_compatible_eul(blenderObject->rot, blenderObject->rot, tmat); + + insert_keyframe(&blenderObject->id, NULL, NULL, "location", -1, frameNumber, INSERTKEY_FAST); + insert_keyframe(&blenderObject->id, NULL, NULL, "rotation_euler", -1, frameNumber, INSERTKEY_FAST); + #if 0 const MT_Point3& position = gameObj->NodeGetWorldPosition(); //const MT_Vector3& scale = gameObj->NodeGetWorldScaling(); diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h index e880c8b824c..3dd3afb5662 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.h +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h @@ -43,7 +43,6 @@ class RAS_MeshObject; class RAS_IPolyMaterial; class BL_InterpolatorList; class BL_Material; -struct IpoCurve; struct Main; struct Scene; @@ -74,9 +73,6 @@ class KX_BlenderSceneConverter : public KX_ISceneConverter bool m_usemat; bool m_useglslmat; - void localDel_ipoCurve ( IpoCurve * icu ); -// struct Ipo* findIpoForName(char* objName); - public: KX_BlenderSceneConverter( Main* maggie, |