Fix T38929: BGE: Strange behaving from addObject after trying to add an nonexisting overlay scene

If bge.logic.addScene() could not find the scene to add it would add the
first scene again, which is just silly. Now, if no scene is found, a warning
is printed and nothing is added.
This commit is contained in:
Mitchell Stokes 2014-03-24 17:57:02 -07:00
parent a2c002acb9
commit b66a9543bb
2 changed files with 16 additions and 8 deletions

@ -233,8 +233,7 @@ Scene *KX_BlenderSceneConverter::GetBlenderSceneForName(const STR_String& name)
Scene *sce;
/**
* Find the specified scene by name, or the first
* scene if nothing matches (shouldn't happen).
* Find the specified scene by name, or NULL if nothing matches.
*/
if ((sce= (Scene *)BLI_findstring(&m_maggie->scene, name.ReadPtr(), offsetof(ID, name) + 2)))
return sce;
@ -246,7 +245,7 @@ Scene *KX_BlenderSceneConverter::GetBlenderSceneForName(const STR_String& name)
return sce;
}
return (Scene*)m_maggie->scene.first;
return NULL;
}

@ -1702,6 +1702,8 @@ KX_Scene* KX_KetsjiEngine::CreateScene(Scene *scene, bool libloading)
KX_Scene* KX_KetsjiEngine::CreateScene(const STR_String& scenename)
{
Scene *scene = m_sceneconverter->GetBlenderSceneForName(scenename);
if (!scene)
return NULL;
return CreateScene(scene);
}
@ -1717,8 +1719,12 @@ void KX_KetsjiEngine::AddScheduledScenes()
{
STR_String scenename = *scenenameit;
KX_Scene* tmpscene = CreateScene(scenename);
m_scenes.push_back(tmpscene);
PostProcessScene(tmpscene);
if (tmpscene) {
m_scenes.push_back(tmpscene);
PostProcessScene(tmpscene);
} else {
printf("warning: scene %s could not be found, not added!\n",scenename.ReadPtr());
}
}
m_addingOverlayScenes.clear();
}
@ -1731,9 +1737,12 @@ void KX_KetsjiEngine::AddScheduledScenes()
{
STR_String scenename = *scenenameit;
KX_Scene* tmpscene = CreateScene(scenename);
m_scenes.insert(m_scenes.begin(),tmpscene);
PostProcessScene(tmpscene);
if (tmpscene) {
m_scenes.insert(m_scenes.begin(),tmpscene);
PostProcessScene(tmpscene);
} else {
printf("warning: scene %s could not be found, not added!\n",scenename.ReadPtr());
}
}
m_addingBackgroundScenes.clear();
}