synched with trunk at revision 30243
[blender.git] / source / gameengine / Ketsji / KX_Scene.cpp
index 99bec81..950b1ea 100644 (file)
@@ -85,6 +85,7 @@
 #include "BL_DeformableGameObject.h"
 #include "KX_SoftBodyDeformer.h"
 
+#include "KX_ObstacleSimulation.h"
 // to get USE_BULLET!
 #include "KX_ConvertPhysicsObject.h"
 
@@ -94,7 +95,6 @@
 #endif
 
 #include "KX_Light.h"
-
 #include <stdio.h>
 
 void* KX_SceneReplicationFunc(SG_IObject* node,void* gameobj,void* scene)
@@ -210,7 +210,17 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
        m_rootnode = NULL;
 
        m_bucketmanager=new RAS_BucketManager();
+
+       switch (scene->gm.obstacleSimulation)
+       {
+       case OBSTSIMULATION_TOI:
+               m_obstacleSimulation = new KX_ObstacleSimulationTOI((MT_Scalar)scene->gm.levelHeight);
+               break;
+       default:
+               m_obstacleSimulation = NULL;
+       }
        
+
 #ifndef DISABLE_PYTHON
        m_attr_dict = PyDict_New(); /* new ref */
        m_draw_call_pre = NULL;
@@ -222,6 +232,9 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
 
 KX_Scene::~KX_Scene()
 {
+       if (m_obstacleSimulation)
+               delete m_obstacleSimulation;
+
        // The release of debug properties used to be in SCA_IScene::~SCA_IScene
        // It's still there but we remove all properties here otherwise some
        // reference might be hanging and causing late release of objects
@@ -1461,6 +1474,11 @@ void KX_Scene::LogicBeginFrame(double curtime)
                        // all object is the tempObjectList should have a clock
                }
        }
+
+       //prepare obstacle simulation for new frame
+       if (m_obstacleSimulation)
+               m_obstacleSimulation->UpdateObstacles();
+
        m_logicmgr->BeginFrame(curtime, 1.0/KX_KetsjiEngine::GetTicRate());
 }
 
@@ -1890,9 +1908,11 @@ PyMethodDef KX_Scene::Methods[] = {
        KX_PYMETHODTABLE(KX_Scene, replace),
        KX_PYMETHODTABLE(KX_Scene, suspend),
        KX_PYMETHODTABLE(KX_Scene, resume),
+       KX_PYMETHODTABLE(KX_Scene, drawObstacleSimulation),
        
        /* dict style access */
        KX_PYMETHODTABLE(KX_Scene, get),
+
        
        {NULL,NULL} //Sentinel
 };
@@ -2216,6 +2236,16 @@ KX_PYMETHODDEF_DOC(KX_Scene, resume,
        Py_RETURN_NONE;
 }
 
+KX_PYMETHODDEF_DOC(KX_Scene, drawObstacleSimulation,
+                                  "drawObstacleSimulation()\n"
+                                  "Draw debug visualization of obstacle simulation.\n")
+{
+       if (GetObstacleSimulation())
+               GetObstacleSimulation()->DrawObstacles();
+
+       Py_RETURN_NONE;
+}
+
 /* Matches python dict.get(key, [default]) */
 KX_PYMETHODDEF_DOC(KX_Scene, get, "")
 {