[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36968] branches/soc-2011-pepper/source/ gameengine: BGE Animation:

Mitchell Stokes mogurijin at gmail.com
Sat May 28 09:15:28 CEST 2011


Revision: 36968
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36968
Author:   moguri
Date:     2011-05-28 07:15:27 +0000 (Sat, 28 May 2011)
Log Message:
-----------
BGE Animation:
  * Adding IPOs to BL_Action
  * Adding a "speed" option to adjust the playback speed by some factor

Modified Paths:
--------------
    branches/soc-2011-pepper/source/gameengine/Converter/KX_BlenderScalarInterpolator.cpp
    branches/soc-2011-pepper/source/gameengine/Converter/KX_BlenderScalarInterpolator.h
    branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.cpp
    branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.h
    branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.cpp
    branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.h
    branches/soc-2011-pepper/source/gameengine/Ketsji/BL_ActionManager.cpp
    branches/soc-2011-pepper/source/gameengine/Ketsji/BL_ActionManager.h
    branches/soc-2011-pepper/source/gameengine/Ketsji/KX_GameObject.cpp
    branches/soc-2011-pepper/source/gameengine/SceneGraph/SG_IObject.cpp
    branches/soc-2011-pepper/source/gameengine/SceneGraph/SG_IObject.h

Modified: branches/soc-2011-pepper/source/gameengine/Converter/KX_BlenderScalarInterpolator.cpp
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/KX_BlenderScalarInterpolator.cpp	2011-05-28 06:18:05 UTC (rev 36967)
+++ branches/soc-2011-pepper/source/gameengine/Converter/KX_BlenderScalarInterpolator.cpp	2011-05-28 07:15:27 UTC (rev 36968)
@@ -47,11 +47,11 @@
 	return evaluate_fcurve(m_fcu, currentTime);
 }
 
-BL_InterpolatorList::BL_InterpolatorList(struct AnimData *adt) {
-	if(adt->action==NULL)
+BL_InterpolatorList::BL_InterpolatorList(bAction *action) {
+	if(action==NULL)
 		return;
 	
-	for(FCurve *fcu= (FCurve *)adt->action->curves.first; fcu; fcu= (FCurve *)fcu->next) {
+	for(FCurve *fcu= (FCurve *)action->curves.first; fcu; fcu= (FCurve *)fcu->next) {
 		if(fcu->rna_path) {
 			BL_ScalarInterpolator *new_ipo = new BL_ScalarInterpolator(fcu); 
 			//assert(new_ipo);

Modified: branches/soc-2011-pepper/source/gameengine/Converter/KX_BlenderScalarInterpolator.h
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/KX_BlenderScalarInterpolator.h	2011-05-28 06:18:05 UTC (rev 36967)
+++ branches/soc-2011-pepper/source/gameengine/Converter/KX_BlenderScalarInterpolator.h	2011-05-28 07:15:27 UTC (rev 36968)
@@ -66,7 +66,7 @@
 
 class BL_InterpolatorList : public std::vector<KX_IScalarInterpolator *> {
 public:
-	BL_InterpolatorList(struct AnimData *adt);
+	BL_InterpolatorList(struct bAction *action);
 	~BL_InterpolatorList();
 
 	KX_IScalarInterpolator *GetScalarInterpolator(const char *rna_path, int array_index);	

Modified: branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.cpp
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.cpp	2011-05-28 06:18:05 UTC (rev 36967)
+++ branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.cpp	2011-05-28 07:15:27 UTC (rev 36968)
@@ -54,6 +54,7 @@
 
 #include "DNA_object_types.h"
 #include "DNA_action_types.h"
+#include "DNA_anim_types.h"
 #include "DNA_ipo_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_world_types.h"
@@ -76,135 +77,136 @@
 	BL_InterpolatorList *adtList= converter->FindInterpolatorList(for_adt);
 
 	if (!adtList) {		
-		adtList = new BL_InterpolatorList(for_adt);
+		adtList = new BL_InterpolatorList(for_adt->action);
 		converter->RegisterInterpolatorList(adtList, for_adt);
 	}
 			
 	return adtList;	
 }
 
-void BL_ConvertIpos(struct Object* blenderobject,KX_GameObject* gameobj,KX_BlenderSceneConverter *converter)
+SG_Controller *BL_CreateIPO(struct bAction *action, KX_GameObject* gameobj, KX_BlenderSceneConverter *converter)
 {
-	if (blenderobject->adt) {
+	KX_IpoSGController* ipocontr = new KX_IpoSGController();
+	ipocontr->SetGameObject(gameobj);
 
-		KX_IpoSGController* ipocontr = new KX_IpoSGController();
-		gameobj->GetSGNode()->AddSGController(ipocontr);
-		ipocontr->SetObject(gameobj->GetSGNode());
-		
-		// For ipo_as_force, we need to know which SM object and Scene the
-		// object associated with this ipo is in. Is this already known here?
-		// I think not.... then it must be done later :(
-//		ipocontr->SetSumoReference(gameobj->GetSumoScene(), 
-//								   gameobj->GetSumoObject());
+	Object* blenderobject = gameobj->GetBlenderObject();
 
-		ipocontr->SetGameObject(gameobj);
+	ipocontr->GetIPOTransform().SetPosition(
+		MT_Point3(
+		blenderobject->loc[0]/*+blenderobject->dloc[0]*/,
+		blenderobject->loc[1]/*+blenderobject->dloc[1]*/,
+		blenderobject->loc[2]/*+blenderobject->dloc[2]*/
+		)
+	);
+	ipocontr->GetIPOTransform().SetEulerAngles(
+		MT_Vector3(
+		blenderobject->rot[0],
+		blenderobject->rot[1],
+		blenderobject->rot[2]
+		)
+	);
+	ipocontr->GetIPOTransform().SetScaling(
+		MT_Vector3(
+		blenderobject->size[0],
+		blenderobject->size[1],
+		blenderobject->size[2]
+		)
+	);
 
-		ipocontr->GetIPOTransform().SetPosition(
-			MT_Point3(
-			blenderobject->loc[0]/*+blenderobject->dloc[0]*/,
-			blenderobject->loc[1]/*+blenderobject->dloc[1]*/,
-			blenderobject->loc[2]/*+blenderobject->dloc[2]*/
-			)
-		);
-		ipocontr->GetIPOTransform().SetEulerAngles(
-			MT_Vector3(
-			blenderobject->rot[0],
-			blenderobject->rot[1],
-			blenderobject->rot[2]
-			)
-		);
-		ipocontr->GetIPOTransform().SetScaling(
-			MT_Vector3(
-			blenderobject->size[0],
-			blenderobject->size[1],
-			blenderobject->size[2]
-			)
-		);
+	const char *rotmode, *drotmode;
 
-		const char *rotmode, *drotmode;
+	switch(blenderobject->rotmode)
+	{
+	case ROT_MODE_AXISANGLE:
+		rotmode = "rotation_axis_angle";
+		drotmode = "delta_rotation_axis_angle";
+	case ROT_MODE_QUAT:
+		rotmode = "rotation_quaternion";
+		drotmode = "delta_rotation_quaternion";
+	default:
+		rotmode = "rotation_euler";
+		drotmode = "delta_rotation_euler";
+	}
 
-		switch(blenderobject->rotmode)
-		{
-		case ROT_MODE_AXISANGLE:
-			rotmode = "rotation_axis_angle";
-			drotmode = "delta_rotation_axis_angle";
-		case ROT_MODE_QUAT:
-			rotmode = "rotation_quaternion";
-			drotmode = "delta_rotation_quaternion";
-		default:
-			rotmode = "rotation_euler";
-			drotmode = "delta_rotation_euler";
-		}
-
-		BL_InterpolatorList *adtList= GetAdtList(blenderobject->adt, converter);
+	BL_InterpolatorList *adtList= GetAdtList(blenderobject->adt, converter);
 		
-		// For each active channel in the adtList add an
-		// interpolator to the game object.
+	// For each active channel in the adtList add an
+	// interpolator to the game object.
 		
-		KX_IInterpolator *interpolator;
-		KX_IScalarInterpolator *interp;
+	KX_IInterpolator *interpolator;
+	KX_IScalarInterpolator *interp;
 		
-		for(int i=0; i<3; i++) {
-			if ((interp = adtList->GetScalarInterpolator("location", i))) {
-				interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetPosition()[i]), interp);
-				ipocontr->AddInterpolator(interpolator);
-				ipocontr->SetIPOChannelActive(OB_LOC_X+i, true);
-			}
+	for(int i=0; i<3; i++) {
+		if ((interp = adtList->GetScalarInterpolator("location", i))) {
+			interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetPosition()[i]), interp);
+			ipocontr->AddInterpolator(interpolator);
+			ipocontr->SetIPOChannelActive(OB_LOC_X+i, true);
 		}
-		for(int i=0; i<3; i++) {
-			if ((interp = adtList->GetScalarInterpolator("delta_location", i))) {
-				interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetDeltaPosition()[i]), interp);
-				ipocontr->AddInterpolator(interpolator);
-				ipocontr->SetIPOChannelActive(OB_DLOC_X+i, true);
-			}
+	}
+	for(int i=0; i<3; i++) {
+		if ((interp = adtList->GetScalarInterpolator("delta_location", i))) {
+			interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetDeltaPosition()[i]), interp);
+			ipocontr->AddInterpolator(interpolator);
+			ipocontr->SetIPOChannelActive(OB_DLOC_X+i, true);
 		}
-		for(int i=0; i<3; i++) {
-			if ((interp = adtList->GetScalarInterpolator(rotmode, i))) {
-				interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetEulerAngles()[i]), interp);
-				ipocontr->AddInterpolator(interpolator);
-				ipocontr->SetIPOChannelActive(OB_ROT_X+i, true);
-			}
+	}
+	for(int i=0; i<3; i++) {
+		if ((interp = adtList->GetScalarInterpolator(rotmode, i))) {
+			interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetEulerAngles()[i]), interp);
+			ipocontr->AddInterpolator(interpolator);
+			ipocontr->SetIPOChannelActive(OB_ROT_X+i, true);
 		}
-		for(int i=0; i<3; i++) {
-			if ((interp = adtList->GetScalarInterpolator(drotmode, i))) {
-				interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetDeltaEulerAngles()[i]), interp);
-				ipocontr->AddInterpolator(interpolator);
-				ipocontr->SetIPOChannelActive(OB_DROT_X+i, true);
-			}
+	}
+	for(int i=0; i<3; i++) {
+		if ((interp = adtList->GetScalarInterpolator(drotmode, i))) {
+			interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetDeltaEulerAngles()[i]), interp);
+			ipocontr->AddInterpolator(interpolator);
+			ipocontr->SetIPOChannelActive(OB_DROT_X+i, true);
 		}
-		for(int i=0; i<3; i++) {
-			if ((interp = adtList->GetScalarInterpolator("scale", i))) {
-				interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetScaling()[i]), interp);
-				ipocontr->AddInterpolator(interpolator);
-				ipocontr->SetIPOChannelActive(OB_SIZE_X+i, true);
-			}
+	}
+	for(int i=0; i<3; i++) {
+		if ((interp = adtList->GetScalarInterpolator("scale", i))) {
+			interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetScaling()[i]), interp);
+			ipocontr->AddInterpolator(interpolator);
+			ipocontr->SetIPOChannelActive(OB_SIZE_X+i, true);
 		}
-		for(int i=0; i<3; i++) {
-			if ((interp = adtList->GetScalarInterpolator("delta_scale", i))) {
-				interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetDeltaScaling()[i]), interp);
-				ipocontr->AddInterpolator(interpolator);
-				ipocontr->SetIPOChannelActive(OB_DSIZE_X+i, true);
-			}
+	}
+	for(int i=0; i<3; i++) {
+		if ((interp = adtList->GetScalarInterpolator("delta_scale", i))) {
+			interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetDeltaScaling()[i]), interp);
+			ipocontr->AddInterpolator(interpolator);
+			ipocontr->SetIPOChannelActive(OB_DSIZE_X+i, true);
 		}
+	}
 		
-		{
-			KX_ObColorIpoSGController* ipocontr_obcol=NULL;
+	{
+		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);
+		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;
 }
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list