[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39484] branches/soc-2011-pepper/source/ gameengine: BGE Animations: Lamp and Camera IPOs are now handled like object IPOs, which means lamps and cameras are no longer stuck to just their active action .

Mitchell Stokes mogurijin at gmail.com
Wed Aug 17 11:38:50 CEST 2011


Revision: 39484
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39484
Author:   moguri
Date:     2011-08-17 09:38:50 +0000 (Wed, 17 Aug 2011)
Log Message:
-----------
BGE Animations: Lamp and Camera IPOs are now handled like object IPOs, which means lamps and cameras are no longer stuck to just their active action. However, the Blender UI seems a little restrictive in this area.

Modified Paths:
--------------
    branches/soc-2011-pepper/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    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

Modified: branches/soc-2011-pepper/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2011-08-17 07:51:11 UTC (rev 39483)
+++ branches/soc-2011-pepper/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2011-08-17 09:38:50 UTC (rev 39484)
@@ -1682,8 +1682,6 @@
 
 	gamelight = new KX_LightObject(kxscene, KX_Scene::m_callbacks, rendertools,
 		lightobj, glslmat);
-
-	BL_ConvertLampIpos(la, gamelight, converter);
 	
 	return gamelight;
 }
@@ -1696,8 +1694,6 @@
 	gamecamera= new KX_Camera(kxscene, KX_Scene::m_callbacks, camdata);
 	gamecamera->SetName(ca->id.name + 2);
 	
-	BL_ConvertCameraIpos(ca, gamecamera, converter);
-	
 	return gamecamera;
 }
 
@@ -2092,8 +2088,7 @@
 			gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
 			gameobj->NodeSetLocalScale(scale);
 			gameobj->NodeUpdateGS(0);
-			
-			BL_ConvertIpos(blenderobject,gameobj,converter);
+
 			BL_ConvertMaterialIpos(blenderobject, gameobj, converter);
 			
 			sumolist->Add(gameobj->AddRef());
@@ -2282,8 +2277,7 @@
 							gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
 							gameobj->NodeSetLocalScale(scale);
 							gameobj->NodeUpdateGS(0);
-							
-							BL_ConvertIpos(blenderobject,gameobj,converter);
+	
 							BL_ConvertMaterialIpos(blenderobject,gameobj, converter);	
 					
 							sumolist->Add(gameobj->AddRef());

Modified: branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.cpp
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.cpp	2011-08-17 07:51:11 UTC (rev 39483)
+++ branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.cpp	2011-08-17 09:38:50 UTC (rev 39484)
@@ -207,93 +207,108 @@
 	}
 }
 
-void BL_ConvertLampIpos(struct Lamp* blenderlamp, KX_GameObject *lightobj,KX_BlenderSceneConverter *converter)
+SG_Controller *BL_CreateLampIPO(struct bAction *action, KX_GameObject*  lightobj, KX_BlenderSceneConverter *converter)
 {
+	KX_LightIpoSGController* ipocontr = new KX_LightIpoSGController();
 
-	if (blenderlamp->adt) {
+	Lamp *blenderlamp = (Lamp*)lightobj->GetBlenderObject()->data;
 
-		KX_LightIpoSGController* ipocontr = new KX_LightIpoSGController();
-		lightobj->GetSGNode()->AddSGController(ipocontr);
-		ipocontr->SetObject(lightobj->GetSGNode());
-		
-		ipocontr->m_energy = blenderlamp->energy;
-		ipocontr->m_col_rgb[0] = blenderlamp->r;
-		ipocontr->m_col_rgb[1] = blenderlamp->g;
-		ipocontr->m_col_rgb[2] = blenderlamp->b;
-		ipocontr->m_dist = blenderlamp->dist;
+	ipocontr->m_energy = blenderlamp->energy;
+	ipocontr->m_col_rgb[0] = blenderlamp->r;
+	ipocontr->m_col_rgb[1] = blenderlamp->g;
+	ipocontr->m_col_rgb[2] = blenderlamp->b;
+	ipocontr->m_dist = blenderlamp->dist;
 
-		BL_InterpolatorList *adtList= GetAdtList(blenderlamp->adt->action, converter);
+	BL_InterpolatorList *adtList= GetAdtList(action, 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;
 		
-		if ((interp= adtList->GetScalarInterpolator("energy", 0))) {
-			interpolator= new KX_ScalarInterpolator(&ipocontr->m_energy, interp);
-			ipocontr->AddInterpolator(interpolator);
-			ipocontr->SetModifyEnergy(true);
-		}
+	if ((interp= adtList->GetScalarInterpolator("energy", 0))) {
+		interpolator= new KX_ScalarInterpolator(&ipocontr->m_energy, interp);
+		ipocontr->AddInterpolator(interpolator);
+		ipocontr->SetModifyEnergy(true);
+	}
 
-		if ((interp = adtList->GetScalarInterpolator("distance", 0))) {
-			interpolator= new KX_ScalarInterpolator(&ipocontr->m_dist, interp);
+	if ((interp = adtList->GetScalarInterpolator("distance", 0))) {
+		interpolator= new KX_ScalarInterpolator(&ipocontr->m_dist, interp);
+		ipocontr->AddInterpolator(interpolator);
+		ipocontr->SetModifyDist(true);
+	}
+		
+	for(int i=0; i<3; i++) {
+		if ((interp = adtList->GetScalarInterpolator("color", i))) {
+			interpolator= new KX_ScalarInterpolator(&ipocontr->m_col_rgb[i], interp);
 			ipocontr->AddInterpolator(interpolator);
-			ipocontr->SetModifyDist(true);
+			ipocontr->SetModifyColor(true);
 		}
-		
-		for(int i=0; i<3; i++) {
-			if ((interp = adtList->GetScalarInterpolator("color", i))) {
-				interpolator= new KX_ScalarInterpolator(&ipocontr->m_col_rgb[i], interp);
-				ipocontr->AddInterpolator(interpolator);
-				ipocontr->SetModifyColor(true);
-			}
-		}
 	}
+
+	return ipocontr;
 }
 
+void BL_ConvertLampIpos(struct Lamp* blenderlamp, KX_GameObject *lightobj,KX_BlenderSceneConverter *converter)
+{
 
+	if (blenderlamp->adt) {
 
+		SG_Controller* ipocontr = BL_CreateLampIPO(blenderlamp->adt->action, lightobj, converter);
+		lightobj->GetSGNode()->AddSGController(ipocontr);
+		ipocontr->SetObject(lightobj->GetSGNode());
+		
+		
+	}
+}
 
-void BL_ConvertCameraIpos(struct Camera* blendercamera, KX_GameObject *cameraobj,KX_BlenderSceneConverter *converter)
+SG_Controller *BL_CreateCameraIPO(struct bAction *action, KX_GameObject*  cameraobj, KX_BlenderSceneConverter *converter)
 {
+	KX_CameraIpoSGController* ipocontr = new KX_CameraIpoSGController();
 
-	if (blendercamera->adt) {
+	Camera *blendercamera = (Camera*)cameraobj->GetBlenderObject()->data;
 
-		KX_CameraIpoSGController* ipocontr = new KX_CameraIpoSGController();
-		cameraobj->GetSGNode()->AddSGController(ipocontr);
-		ipocontr->SetObject(cameraobj->GetSGNode());
-		
-		ipocontr->m_lens = blendercamera->lens;
-		ipocontr->m_clipstart = blendercamera->clipsta;
-		ipocontr->m_clipend = blendercamera->clipend;
+	ipocontr->m_lens = blendercamera->lens;
+	ipocontr->m_clipstart = blendercamera->clipsta;
+	ipocontr->m_clipend = blendercamera->clipend;
 
-		BL_InterpolatorList *adtList= GetAdtList(blendercamera->adt->action, converter);
+	BL_InterpolatorList *adtList= GetAdtList(blendercamera->adt->action, 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;
 		
-		if ((interp = adtList->GetScalarInterpolator("lens", 0))) {
-			interpolator= new KX_ScalarInterpolator(&ipocontr->m_lens, interp);
-			ipocontr->AddInterpolator(interpolator);
-			ipocontr->SetModifyLens(true);
-		}
+	if ((interp = adtList->GetScalarInterpolator("lens", 0))) {
+		interpolator= new KX_ScalarInterpolator(&ipocontr->m_lens, interp);
+		ipocontr->AddInterpolator(interpolator);
+		ipocontr->SetModifyLens(true);
+	}
 
-		if ((interp = adtList->GetScalarInterpolator("clip_start", 0))) {
-			interpolator= new KX_ScalarInterpolator(&ipocontr->m_clipstart, interp);
-			ipocontr->AddInterpolator(interpolator);
-			ipocontr->SetModifyClipStart(true);
-		}
+	if ((interp = adtList->GetScalarInterpolator("clip_start", 0))) {
+		interpolator= new KX_ScalarInterpolator(&ipocontr->m_clipstart, interp);
+		ipocontr->AddInterpolator(interpolator);
+		ipocontr->SetModifyClipStart(true);
+	}
 
-		if ((interp = adtList->GetScalarInterpolator("clip_end", 0))) {
-			interpolator= new KX_ScalarInterpolator(&ipocontr->m_clipend, interp);
-			ipocontr->AddInterpolator(interpolator);
-			ipocontr->SetModifyClipEnd(true);
-		}
+	if ((interp = adtList->GetScalarInterpolator("clip_end", 0))) {
+		interpolator= new KX_ScalarInterpolator(&ipocontr->m_clipend, interp);
+		ipocontr->AddInterpolator(interpolator);
+		ipocontr->SetModifyClipEnd(true);
+	}
 
+	return ipocontr;
+}
+
+void BL_ConvertCameraIpos(struct Camera* blendercamera, KX_GameObject *cameraobj,KX_BlenderSceneConverter *converter)
+{
+
+	if (blendercamera->adt) {
+		SG_Controller* ipocontr = BL_CreateCameraIPO(blendercamera->adt->action, cameraobj, converter);
+		cameraobj->GetSGNode()->AddSGController(ipocontr);
+		ipocontr->SetObject(cameraobj->GetSGNode());
 	}
 }
 

Modified: branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.h
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.h	2011-08-17 07:51:11 UTC (rev 39483)
+++ branches/soc-2011-pepper/source/gameengine/Converter/KX_IpoConvert.h	2011-08-17 09:38:50 UTC (rev 39484)
@@ -44,6 +44,10 @@
 	class KX_GameObject* gameobj, 
 	class KX_BlenderSceneConverter *converter);
 
+class SG_Controller *BL_CreateLampIPO(struct bAction *action,
+	class KX_GameObject* lightobj,
+	class KX_BlenderSceneConverter *converter);
+
 void BL_ConvertLampIpos(struct Lamp* blenderlight,
 	class KX_GameObject* lightobj, 
 	class KX_BlenderSceneConverter *converter);
@@ -51,6 +55,10 @@
 void BL_ConvertWorldIpos(struct World* blenderworld, 
 	class KX_BlenderSceneConverter *converter);
 
+class SG_Controller *BL_CreateCameraIPO(struct bAction *action,
+	class KX_GameObject* cameraobj,
+	class KX_BlenderSceneConverter *converter);
+
 void BL_ConvertCameraIpos(struct Camera* blendercamera,
 	class KX_GameObject* cameraobj, 
 	class KX_BlenderSceneConverter *converter);

Modified: branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.cpp
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.cpp	2011-08-17 07:51:11 UTC (rev 39483)
+++ branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.cpp	2011-08-17 09:38:50 UTC (rev 39484)
@@ -54,7 +54,6 @@
 	m_blendpose(NULL),
 	m_blendinpose(NULL),
 	m_ptrrna(NULL),
-	m_sg_contr(NULL),
 	m_obj(gameobj),
 	m_startframe(0.f),
 	m_endframe(0.f),
@@ -98,15 +97,24 @@
 		game_free_pose(m_blendpose);
 	if (m_blendinpose)
 		game_free_pose(m_blendinpose);
-	if (m_sg_contr)
-	{
-		m_obj->GetSGNode()->RemoveSGController(m_sg_contr);
-		delete m_sg_contr;
-	}
 	if (m_ptrrna)
 		delete m_ptrrna;
+	ClearControllerList();
 }
 
+void BL_Action::ClearControllerList()
+{
+	// Clear out the controller list
+	std::vector<SG_Controller*>::iterator it;
+	for (it = m_sg_contr_list.begin(); it != m_sg_contr_list.end(); it++)
+	{
+		m_obj->GetSGNode()->RemoveSGController((*it));
+		delete *it;
+	}
+
+	m_sg_contr_list.clear();
+}
+
 bool BL_Action::Play(const char* name,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list