Index: source/gameengine/Ketsji/KX_Scene.cpp =================================================================== --- source/gameengine/Ketsji/KX_Scene.cpp (r‚vision 13521) +++ source/gameengine/Ketsji/KX_Scene.cpp (copie de travail) @@ -266,7 +266,7 @@ -set* KX_Scene::GetCameras() +list* KX_Scene::GetCameras() { return &m_cameras; } @@ -850,7 +850,7 @@ KX_Camera* KX_Scene::FindCamera(KX_Camera* cam) { - set::iterator it = m_cameras.begin(); + list::iterator it = m_cameras.begin(); while ( (it != m_cameras.end()) && ((*it) != cam) ) { @@ -863,7 +863,7 @@ KX_Camera* KX_Scene::FindCamera(STR_String& name) { - set::iterator it = m_cameras.begin(); + list::iterator it = m_cameras.begin(); while ( (it != m_cameras.end()) && ((*it)->GetName() != name) ) { @@ -875,7 +875,7 @@ void KX_Scene::AddCamera(KX_Camera* cam) { - m_cameras.insert(cam); + m_cameras.push_back(cam); } KX_Camera* KX_Scene::GetActiveCamera() @@ -896,6 +896,17 @@ m_active_camera = cam; } +void KX_Scene::SetCameraOnTop(KX_Camera* cam) +{ + if (!FindCamera(cam)){ + // adding is always done at the back, so that's all that needs to be done + AddCamera(cam); + if (cam) std::cout << "Added cam " << cam->GetName() << std::endl; + } else { + m_cameras.remove(cam); + m_cameras.push_back(cam); + } +} void KX_Scene::UpdateMeshTransformations() Index: source/gameengine/Ketsji/KX_KetsjiEngine.cpp =================================================================== --- source/gameengine/Ketsji/KX_KetsjiEngine.cpp (r‚vision 13521) +++ source/gameengine/Ketsji/KX_KetsjiEngine.cpp (copie de travail) @@ -631,10 +631,10 @@ RenderFrame(scene, cam); } - set* cameras = scene->GetCameras(); + list* cameras = scene->GetCameras(); // Draw the scene once for each camera with an enabled viewport - set::iterator it = cameras->begin(); + list::iterator it = cameras->begin(); while(it != cameras->end()) { if((*it)->GetViewport()) Index: source/gameengine/Ketsji/KX_Camera.cpp =================================================================== --- source/gameengine/Ketsji/KX_Camera.cpp (r‚vision 13521) +++ source/gameengine/Ketsji/KX_Camera.cpp (copie de travail) @@ -32,7 +32,8 @@ */ #include "KX_Camera.h" - +#include "KX_Scene.h" +#include "KX_PythonInit.h" #include "KX_Python.h" #include "KX_PyMath.h" #ifdef HAVE_CONFIG_H @@ -391,6 +392,7 @@ KX_PYMETHODTABLE(KX_Camera, setProjectionMatrix), KX_PYMETHODTABLE(KX_Camera, enableViewport), KX_PYMETHODTABLE(KX_Camera, setViewport), + KX_PYMETHODTABLE(KX_Camera, setOnTop), {NULL,NULL} //Sentinel }; @@ -759,3 +761,15 @@ } Py_Return; } + +KX_PYMETHODDEF_DOC(KX_Camera, setOnTop, +"setOnTop()\n" +"Sets this camera's viewport on top\n") +{ + class KX_Scene* scene; + + scene = PHY_GetActiveScene(); + MT_assert(scene); + scene->SetCameraOnTop(this); + Py_Return; +} Index: source/gameengine/Ketsji/KX_Camera.h =================================================================== --- source/gameengine/Ketsji/KX_Camera.h (r‚vision 13521) +++ source/gameengine/Ketsji/KX_Camera.h (copie de travail) @@ -251,6 +251,7 @@ KX_PYMETHOD_DOC(KX_Camera, enableViewport); KX_PYMETHOD_DOC(KX_Camera, setViewport); + KX_PYMETHOD_DOC(KX_Camera, setOnTop); virtual PyObject* _getattr(const STR_String& attr); /* lens, near, far, projection_matrix */ virtual int _setattr(const STR_String& attr, PyObject *pyvalue); Index: source/gameengine/Ketsji/KX_PythonInit.h =================================================================== --- source/gameengine/Ketsji/KX_PythonInit.h (r‚vision 13521) +++ source/gameengine/Ketsji/KX_PythonInit.h (copie de travail) @@ -53,6 +53,7 @@ void dictionaryClearByHand(PyObject *dict); void PHY_SetActiveScene(class KX_Scene* scene); +class KX_Scene* PHY_GetActiveScene(); #include "MT_Vector3.h" void KX_RasterizerDrawDebugLine(const MT_Vector3& from,const MT_Vector3& to,const MT_Vector3& color); Index: source/gameengine/Ketsji/KX_PythonInit.cpp =================================================================== --- source/gameengine/Ketsji/KX_PythonInit.cpp (r‚vision 13521) +++ source/gameengine/Ketsji/KX_PythonInit.cpp (copie de travail) @@ -1159,3 +1159,8 @@ { gp_KetsjiScene = scene; } + +class KX_Scene* PHY_GetActiveScene() +{ + return gp_KetsjiScene; +} Index: source/gameengine/Ketsji/KX_Scene.h =================================================================== --- source/gameengine/Ketsji/KX_Scene.h (r‚vision 13521) +++ source/gameengine/Ketsji/KX_Scene.h (copie de travail) @@ -39,6 +39,7 @@ #include #include +#include #include "GEN_Map.h" #include "GEN_HashedPtr.h" @@ -119,7 +120,7 @@ /** * The set of cameras for this scene */ - set m_cameras; + list m_cameras; /** * Various SCA managers used by the scene @@ -330,7 +331,7 @@ GetTimeEventManager( ); - set* + list* GetCameras( ); @@ -368,6 +369,15 @@ class KX_Camera* ); + /** + * Move this camera to the end of the list so that it is rendered last. + * If the camera is not on the list, it will be added + */ + void + SetCameraOnTop( + class KX_Camera* + ); + /** Return the viewmatrix as used by the last frame. */ MT_CmMatrix4x4& GetViewMatrix(