2
0

BsCoreSceneManager.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "BsCoreSceneManager.h"
  2. #include "BsSceneObject.h"
  3. #include "BsComponent.h"
  4. #include "BsGameObjectManager.h"
  5. namespace BansheeEngine
  6. {
  7. CoreSceneManager::CoreSceneManager()
  8. {
  9. mRootNode = SceneObject::createInternal("SceneRoot");
  10. }
  11. CoreSceneManager::~CoreSceneManager()
  12. {
  13. if (mRootNode != nullptr && !mRootNode.isDestroyed())
  14. mRootNode->destroy(true);
  15. }
  16. void CoreSceneManager::clearScene()
  17. {
  18. GameObjectManager::instance().destroyQueuedObjects();
  19. mRootNode->destroy(true);
  20. }
  21. void CoreSceneManager::_update()
  22. {
  23. Stack<HSceneObject> todo;
  24. todo.push(mRootNode);
  25. while(!todo.empty())
  26. {
  27. HSceneObject currentGO = todo.top();
  28. todo.pop();
  29. const Vector<HComponent>& components = currentGO->getComponents();
  30. for(auto iter = components.begin(); iter != components.end(); ++iter)
  31. {
  32. (*iter)->update();
  33. }
  34. for(UINT32 i = 0; i < currentGO->getNumChildren(); i++)
  35. todo.push(currentGO->getChild(i));
  36. }
  37. GameObjectManager::instance().destroyQueuedObjects();
  38. }
  39. void CoreSceneManager::registerNewSO(const HSceneObject& node)
  40. {
  41. if(mRootNode) // If root node is null, then this new node is the root node
  42. node->setParent(mRootNode);
  43. }
  44. void CoreSceneManager::notifyComponentAdded(const HComponent& component) { }
  45. void CoreSceneManager::notifyComponentRemoved(const HComponent& component) { }
  46. CoreSceneManager& gCoreSceneManager()
  47. {
  48. return CoreSceneManager::instance();
  49. }
  50. }