CmSceneManager.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "CmSceneManager.h"
  2. #include "CmGameObject.h"
  3. #include "CmComponent.h"
  4. #include "CmCamera.h"
  5. namespace CamelotEngine
  6. {
  7. SceneManager::SceneManager()
  8. {
  9. mRootNode = GameObject::createInternal("SceneRoot");
  10. }
  11. SceneManager::~SceneManager()
  12. {
  13. if(mRootNode != nullptr)
  14. mRootNode->destroy();
  15. }
  16. vector<RenderablePtr>::type SceneManager::getVisibleRenderables(const CameraPtr camera) const
  17. {
  18. // TODO - Actually iterate over all game objects and find visible renderables
  19. return vector<RenderablePtr>::type();
  20. }
  21. void SceneManager::registerNewGO(GameObjectPtr node)
  22. {
  23. if(mRootNode) // If root node is null, then this new node is the root node
  24. node->setParent(mRootNode);
  25. }
  26. void SceneManager::notifyComponentAdded(ComponentPtr component)
  27. {
  28. if(component->getTypeId() == TID_Camera)
  29. {
  30. CameraPtr camera = std::static_pointer_cast<Camera>(component);
  31. auto findIter = std::find(mCachedCameras.begin(), mCachedCameras.end(), camera);
  32. if(findIter != mCachedCameras.end())
  33. {
  34. CM_EXCEPT(InternalErrorException, "Trying to add an already existing camera!");
  35. }
  36. mCachedCameras.push_back(camera);
  37. }
  38. }
  39. void SceneManager::notifyComponentRemoved(ComponentPtr component)
  40. {
  41. if(component->getTypeId() == TID_Camera)
  42. {
  43. CameraPtr camera = std::static_pointer_cast<Camera>(component);
  44. auto findIter = std::find(mCachedCameras.begin(), mCachedCameras.end(), camera);
  45. if(findIter == mCachedCameras.end())
  46. {
  47. CM_EXCEPT(InternalErrorException, "Cannot find specified camera!");
  48. }
  49. mCachedCameras.erase(findIter);
  50. }
  51. }
  52. SceneManager& gSceneManager()
  53. {
  54. return SceneManager::instance();
  55. }
  56. }