BGE: Fix for [#32218] "logic.addScene() Not Adding Scenes in Order" reported by Josia...
authorMitchell Stokes <mogurijin@gmail.com>
Tue, 18 Jun 2013 04:15:27 +0000 (04:15 +0000)
committerMitchell Stokes <mogurijin@gmail.com>
Tue, 18 Jun 2013 04:15:27 +0000 (04:15 +0000)
Adding scenes now uses a vector instead of a set to maintain order. This fix is partly based off of patch #32297 by Pavel Sadikov (sigmat).

source/gameengine/Ketsji/KX_KetsjiEngine.cpp
source/gameengine/Ketsji/KX_KetsjiEngine.h

index 01b726a8e3f7e997030b7e3de65f7bec43c3e2cd..f02e842ad2e8bbbe65fddc257a06e99b0493beed 100644 (file)
@@ -1649,10 +1649,10 @@ void KX_KetsjiEngine::ConvertAndAddScene(const STR_String& scenename,bool overla
        }
        else {
                if (overlay) {
-                       m_addingOverlayScenes.insert(scenename);
+                       m_addingOverlayScenes.push_back(scenename);
                }
                else {
-                       m_addingBackgroundScenes.insert(scenename);
+                       m_addingBackgroundScenes.push_back(scenename);
                }
        }
 }
@@ -1664,7 +1664,7 @@ void KX_KetsjiEngine::RemoveScene(const STR_String& scenename)
 {
        if (FindScene(scenename))
        {
-               m_removingScenes.insert(scenename);
+               m_removingScenes.push_back(scenename);
        }
        else
        {
@@ -1679,7 +1679,7 @@ void KX_KetsjiEngine::RemoveScheduledScenes()
 {
        if (m_removingScenes.size())
        {
-               set<STR_String>::iterator scenenameit;
+               vector<STR_String>::iterator scenenameit;
                for (scenenameit=m_removingScenes.begin();scenenameit != m_removingScenes.end();scenenameit++)
                {
                        STR_String scenename = *scenenameit;
@@ -1725,7 +1725,7 @@ KX_Scene* KX_KetsjiEngine::CreateScene(const STR_String& scenename)
 
 void KX_KetsjiEngine::AddScheduledScenes()
 {
-       set<STR_String>::iterator scenenameit;
+       vector<STR_String>::iterator scenenameit;
 
        if (m_addingOverlayScenes.size())
        {
@@ -1761,7 +1761,7 @@ void KX_KetsjiEngine::AddScheduledScenes()
 
 void KX_KetsjiEngine::ReplaceScene(const STR_String& oldscene,const STR_String& newscene)
 {
-       m_replace_scenes.insert(std::make_pair(oldscene,newscene));
+       m_replace_scenes.push_back(std::make_pair(oldscene,newscene));
 }
 
 // replace scene is not the same as removing and adding because the
@@ -1772,7 +1772,7 @@ void KX_KetsjiEngine::ReplaceScheduledScenes()
 {
        if (m_replace_scenes.size())
        {
-               set<pair<STR_String,STR_String> >::iterator scenenameit;
+               vector<pair<STR_String,STR_String> >::iterator scenenameit;
                
                for (scenenameit = m_replace_scenes.begin();
                        scenenameit != m_replace_scenes.end();
index 0d7e41d7568a48218db60dc4a74e758ed927e3c2..3cba3558db30b5357bf821f639f84873a891731d 100644 (file)
@@ -41,7 +41,6 @@
 #include "KX_Python.h"
 #include "KX_WorldInfo.h"
 #include <vector>
-#include <set>
 
 class KX_TimeCategoryLogger;
 
@@ -88,13 +87,13 @@ private:
        class KX_Dome*                                          m_dome; // dome stereo mode
 
        /** Lists of scenes scheduled to be removed at the end of the frame. */
-       std::set<STR_String> m_removingScenes;
+       std::vector<STR_String> m_removingScenes;
        /** Lists of overley scenes scheduled to be added at the end of the frame. */
-       std::set<STR_String> m_addingOverlayScenes;
+       std::vector<STR_String> m_addingOverlayScenes;
        /** Lists of background scenes scheduled to be added at the end of the frame. */
-       std::set<STR_String> m_addingBackgroundScenes;
+       std::vector<STR_String> m_addingBackgroundScenes;
        /** Lists of scenes scheduled to be replaced at the end of the frame. */
-       std::set<std::pair<STR_String,STR_String> >     m_replace_scenes;
+       std::vector<std::pair<STR_String,STR_String> >  m_replace_scenes;
 
        /* The current list of scenes. */
        KX_SceneList            m_scenes;