Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/gameengine/Converter/KX_BlenderSceneConverter.cpp')
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.cpp118
1 files changed, 39 insertions, 79 deletions
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index a20ebb3a081..09cc74d717f 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -69,6 +69,7 @@
#include "DNA_scene_types.h"
#include "DNA_world_types.h"
#include "BKE_main.h"
+#include "BKE_fcurve.h"
#include "BLI_math.h"
@@ -87,6 +88,7 @@ extern "C"
#include "BKE_mesh.h" // BKE_mesh_copy
#include "DNA_space_types.h"
#include "DNA_anim_types.h"
+#include "DNA_action_types.h"
#include "RNA_define.h"
#include "../../blender/editors/include/ED_keyframing.h"
}
@@ -527,76 +529,59 @@ void KX_BlenderSceneConverter::CacheBlenderMaterial(KX_Scene *scene, struct Mate
m_mat_cache[scene][mat] = blmat;
}
+
BL_Material *KX_BlenderSceneConverter::FindCachedBlenderMaterial(KX_Scene *scene, struct Material *mat)
{
return (m_use_mat_cache) ? m_mat_cache[scene][mat] : NULL;
}
-void KX_BlenderSceneConverter::RegisterInterpolatorList(
- BL_InterpolatorList *actList,
- struct bAction *for_act)
+
+void KX_BlenderSceneConverter::RegisterInterpolatorList(BL_InterpolatorList *actList, struct bAction *for_act)
{
m_map_blender_to_gameAdtList.insert(CHashedPtr(for_act), actList);
}
-
-
-BL_InterpolatorList *KX_BlenderSceneConverter::FindInterpolatorList(
- struct bAction *for_act)
+BL_InterpolatorList *KX_BlenderSceneConverter::FindInterpolatorList(struct bAction *for_act)
{
BL_InterpolatorList **listp = m_map_blender_to_gameAdtList[CHashedPtr(for_act)];
-
return listp?*listp:NULL;
}
-
-void KX_BlenderSceneConverter::RegisterGameActuator(
- SCA_IActuator *act,
- struct bActuator *for_actuator)
+void KX_BlenderSceneConverter::RegisterGameActuator(SCA_IActuator *act, struct bActuator *for_actuator)
{
m_map_blender_to_gameactuator.insert(CHashedPtr(for_actuator), act);
}
-
-
-SCA_IActuator *KX_BlenderSceneConverter::FindGameActuator(
- struct bActuator *for_actuator)
+SCA_IActuator *KX_BlenderSceneConverter::FindGameActuator(struct bActuator *for_actuator)
{
SCA_IActuator **actp = m_map_blender_to_gameactuator[CHashedPtr(for_actuator)];
-
return actp?*actp:NULL;
}
-
-void KX_BlenderSceneConverter::RegisterGameController(
- SCA_IController *cont,
- struct bController *for_controller)
+void KX_BlenderSceneConverter::RegisterGameController(SCA_IController *cont, struct bController *for_controller)
{
m_map_blender_to_gamecontroller.insert(CHashedPtr(for_controller), cont);
}
-
-
-SCA_IController *KX_BlenderSceneConverter::FindGameController(
- struct bController *for_controller)
+SCA_IController *KX_BlenderSceneConverter::FindGameController(struct bController *for_controller)
{
SCA_IController **contp = m_map_blender_to_gamecontroller[CHashedPtr(for_controller)];
-
return contp?*contp:NULL;
}
-void KX_BlenderSceneConverter::RegisterWorldInfo(
- KX_WorldInfo *worldinfo)
+void KX_BlenderSceneConverter::RegisterWorldInfo(KX_WorldInfo *worldinfo)
{
m_worldinfos.push_back(pair<KX_Scene*,KX_WorldInfo*>(m_currentScene,worldinfo));
}
void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
{
+ //TODO this entire function is deprecated, written for 2.4x
+ //the functionality should be rewritten, currently it does nothing
KX_SceneList* scenes = m_ketsjiEngine->CurrentScenes();
int numScenes = scenes->size();
@@ -612,7 +597,7 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
{
KX_GameObject* gameObj = (KX_GameObject*)parentList->GetValue(g);
if (gameObj->IsRecordAnimation()) {
-
+
Object* blenderObject = gameObj->GetBlenderObject();
if (blenderObject)
{
@@ -623,21 +608,21 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
{ //clear the curve data
if (clearIpo) {//rcruiz
IpoCurve *icu1;
-
+
int numCurves = 0;
for ( icu1 = (IpoCurve*)ipo->curve.first; icu1; ) {
-
+
IpoCurve* tmpicu = icu1;
-
+
/*int i;
BezTriple *bezt;
for ( bezt = tmpicu->bezt, i = 0; i < tmpicu->totvert; i++, bezt++) {
printf("(%f,%f,%f),(%f,%f,%f),(%f,%f,%f)\n",bezt->vec[0][0],bezt->vec[0][1],bezt->vec[0][2],bezt->vec[1][0],bezt->vec[1][1],bezt->vec[1][2],bezt->vec[2][0],bezt->vec[2][1],bezt->vec[2][2]);
}*/
-
+
icu1 = icu1->next;
numCurves++;
-
+
BLI_remlink( &( blenderObject->ipo->curve ), tmpicu );
if ( tmpicu->bezt )
MEM_freeN( tmpicu->bezt );
@@ -655,8 +640,8 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
}
}
-
-
+
+
}
@@ -665,45 +650,7 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
void KX_BlenderSceneConverter::resetNoneDynamicObjectToIpo()
{
- if (addInitFromFrame) {
- KX_SceneList* scenes = m_ketsjiEngine->CurrentScenes();
- int numScenes = scenes->size();
- if (numScenes>=0) {
- KX_Scene* scene = scenes->at(0);
- CListValue* parentList = scene->GetRootParentList();
- for (int ix=0;ix<parentList->GetCount();ix++) {
- KX_GameObject* gameobj = (KX_GameObject*)parentList->GetValue(ix);
- if (!gameobj->IsRecordAnimation()) {
- Object* blenderobject = gameobj->GetBlenderObject();
- if (!blenderobject)
- continue;
- if (blenderobject->type==OB_ARMATURE)
- continue;
- float eu[3];
- mat4_to_eul(eu,blenderobject->obmat);
- MT_Point3 pos = MT_Point3(
- blenderobject->obmat[3][0],
- blenderobject->obmat[3][1],
- blenderobject->obmat[3][2]
- );
- MT_Vector3 eulxyz = MT_Vector3(
- eu[0],
- eu[1],
- eu[2]
- );
- MT_Vector3 scale = MT_Vector3(
- blenderobject->size[0],
- blenderobject->size[1],
- blenderobject->size[2]
- );
- gameobj->NodeSetLocalPosition(pos);
- gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
- gameobj->NodeSetLocalScale(scale);
- gameobj->NodeUpdateGS(0);
- }
- }
- }
- }
+ //TODO the functionality should be rewritten
}
@@ -843,13 +790,26 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo()
{
KX_GameObject* gameObj = (KX_GameObject*)parentList->GetValue(g);
if (gameObj->IsRecordAnimation()) {
-#if 0
Object* blenderObject = gameObj->GetBlenderObject();
- if (blenderObject && blenderObject->ipo)
+ if (blenderObject && blenderObject->adt)
{
+ bAction *act = verify_adt_action(&blenderObject->id, false);
+ FCurve *fcu;
+
+ if (!act) {
+ continue;
+ }
+
+ /* for now, not much choice but to run this on all curves... */
+ for (fcu = (FCurve *)act->curves.first; fcu; fcu = fcu->next) {
+ /* Note: calling `sort_time_fcurve()` here is not needed, since
+ * all keys have been added in 'right' order. */
+ calchandles_fcurve(fcu);
+ }
+#if 0
// XXX animato
Ipo* ipo = blenderObject->ipo;
-
+
//create the curves, if not existing
//testhandles_ipocurve checks for NULL
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"LocX"));
@@ -858,8 +818,8 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo()
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"RotX"));
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"RotY"));
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"RotZ"));
- }
#endif
+ }
}
}
}