[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54766] trunk/blender/source/gameengine: BGE: (partial?) fix for #34330 "Action Actuator "caching" the previous ran actions" reported by Dalai.

Mitchell Stokes mogurijin at gmail.com
Sat Feb 23 00:55:07 CET 2013


Revision: 54766
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54766
Author:   moguri
Date:     2013-02-22 23:55:06 +0000 (Fri, 22 Feb 2013)
Log Message:
-----------
BGE: (partial?) fix for #34330 "Action Actuator "caching" the previous ran actions" reported by Dalai. The test file now works if all of the actions are using the same layer, but multiple layers can still cause problems. However, I am unsure as to what the "correct" behavior should be with multiple layers. They should probably blend somehow...

Modified Paths:
--------------
    trunk/blender/source/gameengine/Converter/KX_IpoConvert.cpp
    trunk/blender/source/gameengine/Converter/KX_IpoConvert.h
    trunk/blender/source/gameengine/Ketsji/BL_Action.cpp

Modified: trunk/blender/source/gameengine/Converter/KX_IpoConvert.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_IpoConvert.cpp	2013-02-22 22:24:38 UTC (rev 54765)
+++ trunk/blender/source/gameengine/Converter/KX_IpoConvert.cpp	2013-02-22 23:55:06 UTC (rev 54766)
@@ -162,23 +162,29 @@
 		}
 	}
 		
-	{
-		KX_ObColorIpoSGController* ipocontr_obcol=NULL;
-			
-		for (int i=0; i<4; i++) {
-			if ((interp = adtList->GetScalarInterpolator("color", i))) {
-				if (!ipocontr_obcol) {
-					ipocontr_obcol = new KX_ObColorIpoSGController();
-					gameobj->GetSGNode()->AddSGController(ipocontr_obcol);
-					ipocontr_obcol->SetObject(gameobj->GetSGNode());
-				}
-				interpolator= new KX_ScalarInterpolator(&ipocontr_obcol->m_rgba[i], interp);
-				ipocontr_obcol->AddInterpolator(interpolator);
+
+	return ipocontr;
+}
+
+
+SG_Controller *BL_CreateObColorIPO(struct bAction *action, KX_GameObject* gameobj, KX_BlenderSceneConverter *converter)
+{
+	KX_ObColorIpoSGController* ipocontr_obcol=NULL;
+	KX_IInterpolator *interpolator;
+	KX_IScalarInterpolator *interp;
+	BL_InterpolatorList *adtList= GetAdtList(action, converter);
+
+	for (int i=0; i<4; i++) {
+		if ((interp = adtList->GetScalarInterpolator("color", i))) {
+			if (!ipocontr_obcol) {
+				ipocontr_obcol = new KX_ObColorIpoSGController();
 			}
+			interpolator= new KX_ScalarInterpolator(&ipocontr_obcol->m_rgba[i], interp);
+			ipocontr_obcol->AddInterpolator(interpolator);
 		}
 	}
 
-	return ipocontr;
+	return ipocontr_obcol;
 }
 
 void BL_ConvertIpos(struct Object* blenderobject,KX_GameObject* gameobj,KX_BlenderSceneConverter *converter)
@@ -187,6 +193,12 @@
 		SG_Controller *ipocontr = BL_CreateIPO(blenderobject->adt->action, gameobj, converter);
 		gameobj->GetSGNode()->AddSGController(ipocontr);
 		ipocontr->SetObject(gameobj->GetSGNode());
+
+		SG_Controller *ipocontr_obcol = BL_CreateObColorIPO(blenderobject->adt->action, gameobj, converter);
+		if (ipocontr_obcol) {
+			gameobj->GetSGNode()->AddSGController(ipocontr_obcol);
+			ipocontr_obcol->SetObject(gameobj->GetSGNode());
+		}
 	}
 }
 

Modified: trunk/blender/source/gameengine/Converter/KX_IpoConvert.h
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_IpoConvert.h	2013-02-22 22:24:38 UTC (rev 54765)
+++ trunk/blender/source/gameengine/Converter/KX_IpoConvert.h	2013-02-22 23:55:06 UTC (rev 54766)
@@ -37,7 +37,9 @@
 class SG_Controller *BL_CreateIPO(struct bAction *action,
 	class KX_GameObject* gameobj,
 	class KX_BlenderSceneConverter *converter);
-
+class SG_Controller *BL_CreateObColorIPO(struct bAction *action,
+		class KX_GameObject* gameobj,
+		class KX_BlenderSceneConverter *converter);
 void BL_ConvertIpos(struct Object* blenderobject,
 	class KX_GameObject* gameobj, 
 	class KX_BlenderSceneConverter *converter);

Modified: trunk/blender/source/gameengine/Ketsji/BL_Action.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/BL_Action.cpp	2013-02-22 22:24:38 UTC (rev 54765)
+++ trunk/blender/source/gameengine/Ketsji/BL_Action.cpp	2013-02-22 23:55:06 UTC (rev 54766)
@@ -162,6 +162,14 @@
 		m_obj->GetSGNode()->AddSGController(sg_contr);
 		sg_contr->SetObject(m_obj->GetSGNode());
 
+		// Try obcolor
+		sg_contr = BL_CreateObColorIPO(m_action, m_obj, KX_GetActiveScene()->GetSceneConverter());
+		if (sg_contr) {
+			m_sg_contr_list.push_back(sg_contr);
+			m_obj->GetSGNode()->AddSGController(sg_contr);
+			sg_contr->SetObject(m_obj->GetSGNode());
+		}
+
 		// Extra controllers
 		if (m_obj->GetGameObjectType() == SCA_IObject::OBJ_LIGHT)
 		{




More information about the Bf-blender-cvs mailing list