[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