Index: source/gameengine/Ketsji/KX_KetsjiEngine.cpp =================================================================== --- source/gameengine/Ketsji/KX_KetsjiEngine.cpp (revision 49742) +++ source/gameengine/Ketsji/KX_KetsjiEngine.cpp (working copy) @@ -1589,11 +1589,11 @@ { if (overlay) { - m_addingOverlayScenes.insert(scenename); + m_addingOverlayScenes.push(scenename); } else { - m_addingBackgroundScenes.insert(scenename); + m_addingBackgroundScenes.push(scenename); } } } @@ -1663,37 +1663,27 @@ return CreateScene(scene); } + void KX_KetsjiEngine::AddScheduledScenes() { - set::iterator scenenameit; + while (!m_addingOverlayScenes.empty()) { + + STR_String scenename = m_addingOverlayScenes.front(); + KX_Scene* tmpscene = CreateScene(scenename); + m_scenes.push_back(tmpscene); + PostProcessScene(tmpscene); - if (m_addingOverlayScenes.size()) - { - for (scenenameit = m_addingOverlayScenes.begin(); - scenenameit != m_addingOverlayScenes.end(); - scenenameit++) - { - STR_String scenename = *scenenameit; - KX_Scene* tmpscene = CreateScene(scenename); - m_scenes.push_back(tmpscene); - PostProcessScene(tmpscene); - } - m_addingOverlayScenes.clear(); + m_addingOverlayScenes.pop(); } - - if (m_addingBackgroundScenes.size()) - { - for (scenenameit = m_addingBackgroundScenes.begin(); - scenenameit != m_addingBackgroundScenes.end(); - scenenameit++) - { - STR_String scenename = *scenenameit; - KX_Scene* tmpscene = CreateScene(scenename); - m_scenes.insert(m_scenes.begin(),tmpscene); - PostProcessScene(tmpscene); - } - m_addingBackgroundScenes.clear(); + while (!m_addingBackgroundScenes.empty()) { + + STR_String scenename = m_addingBackgroundScenes.front(); + KX_Scene* tmpscene = CreateScene(scenename); + m_scenes.insert(m_scenes.begin(),tmpscene); + PostProcessScene(tmpscene); + + m_addingBackgroundScenes.pop(); } } Index: source/gameengine/Ketsji/KX_KetsjiEngine.h =================================================================== --- source/gameengine/Ketsji/KX_KetsjiEngine.h (revision 49742) +++ source/gameengine/Ketsji/KX_KetsjiEngine.h (working copy) @@ -42,6 +42,7 @@ #include "KX_WorldInfo.h" #include #include +#include class KX_TimeCategoryLogger; @@ -86,13 +87,13 @@ class SCA_IInputDevice* m_mousedevice; class KX_Dome* m_dome; // dome stereo mode - /** Lists of scenes scheduled to be removed at the end of the frame. */ + // Lists of scenes scheduled to be removed at the end of the frame. std::set m_removingScenes; - /** Lists of overley scenes scheduled to be added at the end of the frame. */ - std::set m_addingOverlayScenes; - /** Lists of background scenes scheduled to be added at the end of the frame. */ - std::set m_addingBackgroundScenes; - /** Lists of scenes scheduled to be replaced at the end of the frame. */ + // Lists of overlay scenes scheduled to be added at the end of the frame. + std::queue m_addingOverlayScenes; + // Lists of background scenes scheduled to be added at the end of the frame. + std::queue m_addingBackgroundScenes; + // Lists of scenes scheduled to be replaced at the end of the frame. std::set > m_replace_scenes; /* The current list of scenes. */