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:
authorMitchell Stokes <mogurijin@gmail.com>2011-08-07 08:57:23 +0400
committerMitchell Stokes <mogurijin@gmail.com>2011-08-07 08:57:23 +0400
commit5cc0bb0d1b3dbdc8494fe2ff444c683b82b7d15f (patch)
tree62393da2ea43acc0eb08d72c5f58a8f7c7b89919 /source/gameengine
parentc334bf69a7282254bb80bb2896bd8716930a4adf (diff)
BGE Animations: The IPO conversion code relied on objects having an adt, but this isn't always the case. object->adt can be NULL, which causes a crash. Now BL_InterpolatorLists are cached by action instead of adt.
Diffstat (limited to 'source/gameengine')
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.cpp10
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.h4
-rw-r--r--source/gameengine/Converter/KX_IpoConvert.cpp18
3 files changed, 16 insertions, 16 deletions
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index 58089cc4b2d..3dd12cf6c8f 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -566,18 +566,18 @@ void KX_BlenderSceneConverter::RegisterPolyMaterial(RAS_IPolyMaterial *polymat)
void KX_BlenderSceneConverter::RegisterInterpolatorList(
- BL_InterpolatorList *adtList,
- struct AnimData *for_adt)
+ BL_InterpolatorList *actList,
+ struct bAction *for_act)
{
- m_map_blender_to_gameAdtList.insert(CHashedPtr(for_adt), adtList);
+ m_map_blender_to_gameAdtList.insert(CHashedPtr(for_act), actList);
}
BL_InterpolatorList *KX_BlenderSceneConverter::FindInterpolatorList(
- struct AnimData *for_adt)
+ struct bAction *for_act)
{
- BL_InterpolatorList **listp = m_map_blender_to_gameAdtList[CHashedPtr(for_adt)];
+ BL_InterpolatorList **listp = m_map_blender_to_gameAdtList[CHashedPtr(for_act)];
return listp?*listp:NULL;
}
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h
index 2340e44d288..ba919eb9592 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.h
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h
@@ -113,8 +113,8 @@ public:
void RegisterBlenderMaterial(BL_Material *mat);
- void RegisterInterpolatorList(BL_InterpolatorList *adtList, struct AnimData *for_adt);
- BL_InterpolatorList *FindInterpolatorList(struct AnimData *for_adt);
+ void RegisterInterpolatorList(BL_InterpolatorList *actList, struct bAction *for_act);
+ BL_InterpolatorList *FindInterpolatorList(struct bAction *for_act);
void RegisterGameActuator(SCA_IActuator *act, struct bActuator *for_actuator);
SCA_IActuator *FindGameActuator(struct bActuator *for_actuator);
diff --git a/source/gameengine/Converter/KX_IpoConvert.cpp b/source/gameengine/Converter/KX_IpoConvert.cpp
index 27ae857f45c..0e526bc818d 100644
--- a/source/gameengine/Converter/KX_IpoConvert.cpp
+++ b/source/gameengine/Converter/KX_IpoConvert.cpp
@@ -73,12 +73,12 @@
#include "STR_HashedString.h"
-static BL_InterpolatorList *GetAdtList(struct AnimData *for_adt, KX_BlenderSceneConverter *converter) {
- BL_InterpolatorList *adtList= converter->FindInterpolatorList(for_adt);
+static BL_InterpolatorList *GetAdtList(struct bAction *for_act, KX_BlenderSceneConverter *converter) {
+ BL_InterpolatorList *adtList= converter->FindInterpolatorList(for_act);
if (!adtList) {
- adtList = new BL_InterpolatorList(for_adt->action);
- converter->RegisterInterpolatorList(adtList, for_adt);
+ adtList = new BL_InterpolatorList(for_act);
+ converter->RegisterInterpolatorList(adtList, for_act);
}
return adtList;
@@ -128,7 +128,7 @@ SG_Controller *BL_CreateIPO(struct bAction *action, KX_GameObject* gameobj, KX_B
drotmode = "delta_rotation_euler";
}
- BL_InterpolatorList *adtList= GetAdtList(blenderobject->adt, converter);
+ BL_InterpolatorList *adtList= GetAdtList(action, converter);
// For each active channel in the adtList add an
// interpolator to the game object.
@@ -222,7 +222,7 @@ void BL_ConvertLampIpos(struct Lamp* blenderlamp, KX_GameObject *lightobj,KX_Ble
ipocontr->m_col_rgb[2] = blenderlamp->b;
ipocontr->m_dist = blenderlamp->dist;
- BL_InterpolatorList *adtList= GetAdtList(blenderlamp->adt, converter);
+ BL_InterpolatorList *adtList= GetAdtList(blenderlamp->adt->action, converter);
// For each active channel in the adtList add an
// interpolator to the game object.
@@ -268,7 +268,7 @@ void BL_ConvertCameraIpos(struct Camera* blendercamera, KX_GameObject *cameraobj
ipocontr->m_clipstart = blendercamera->clipsta;
ipocontr->m_clipend = blendercamera->clipend;
- BL_InterpolatorList *adtList= GetAdtList(blendercamera->adt, converter);
+ BL_InterpolatorList *adtList= GetAdtList(blendercamera->adt->action, converter);
// For each active channel in the adtList add an
// interpolator to the game object.
@@ -316,7 +316,7 @@ void BL_ConvertWorldIpos(struct World* blenderworld,KX_BlenderSceneConverter *co
ipocontr->m_mist_rgb[1] = blenderworld->horg;
ipocontr->m_mist_rgb[2] = blenderworld->horb;
- BL_InterpolatorList *adtList= GetAdtList(blenderworld->adt, converter);
+ BL_InterpolatorList *adtList= GetAdtList(blenderworld->adt->action, converter);
// For each active channel in the adtList add an
// interpolator to the game object.
@@ -358,7 +358,7 @@ static void ConvertMaterialIpos(
gameobj->GetSGNode()->AddSGController(ipocontr);
ipocontr->SetObject(gameobj->GetSGNode());
- BL_InterpolatorList *adtList= GetAdtList(blendermaterial->adt, converter);
+ BL_InterpolatorList *adtList= GetAdtList(blendermaterial->adt->action, converter);
ipocontr->m_rgba[0] = blendermaterial->r;