BsCoreSceneManager.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "BsCoreSceneManager.h"
  2. #include "BsSceneObject.h"
  3. #include "BsComponent.h"
  4. #include "BsGameObjectManager.h"
  5. namespace BansheeEngine
  6. {
  7. std::function<void()> SceneManagerFactory::mFactoryMethod;
  8. CoreSceneManager::CoreSceneManager()
  9. {
  10. mRootNode = SceneObject::createInternal("SceneRoot");
  11. }
  12. CoreSceneManager::~CoreSceneManager()
  13. {
  14. if (mRootNode != nullptr && !mRootNode.isDestroyed())
  15. mRootNode->destroy(true);
  16. }
  17. void CoreSceneManager::clearScene()
  18. {
  19. UINT32 numChildren = mRootNode->getNumChildren();
  20. for (UINT32 i = 0; i < numChildren; i++)
  21. {
  22. HSceneObject child = mRootNode->getChild(0);
  23. child->destroy();
  24. }
  25. GameObjectManager::instance().destroyQueuedObjects();
  26. }
  27. void CoreSceneManager::_update()
  28. {
  29. Stack<HSceneObject> todo;
  30. todo.push(mRootNode);
  31. while(!todo.empty())
  32. {
  33. HSceneObject currentGO = todo.top();
  34. todo.pop();
  35. const Vector<HComponent>& components = currentGO->getComponents();
  36. for(auto iter = components.begin(); iter != components.end(); ++iter)
  37. {
  38. (*iter)->update();
  39. }
  40. for(UINT32 i = 0; i < currentGO->getNumChildren(); i++)
  41. todo.push(currentGO->getChild(i));
  42. }
  43. GameObjectManager::instance().destroyQueuedObjects();
  44. }
  45. void CoreSceneManager::registerNewSO(const HSceneObject& node)
  46. {
  47. if(mRootNode)
  48. node->setParent(mRootNode);
  49. }
  50. CoreSceneManager& gCoreSceneManager()
  51. {
  52. return CoreSceneManager::instance();
  53. }
  54. void SceneManagerFactory::create()
  55. {
  56. if (mFactoryMethod != nullptr)
  57. mFactoryMethod();
  58. else
  59. BS_EXCEPT(InvalidStateException, "Failed to initialize scene manager because no valid factory method is set.");
  60. }
  61. }