BsOctreeSceneManager.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "BsOctreeSceneManager.h"
  2. #include "CmComponent.h"
  3. #include "CmException.h"
  4. #include "CmSceneObject.h"
  5. #include "BsRenderable.h"
  6. #include "BsCamera.h"
  7. using namespace CamelotFramework;
  8. namespace BansheeEngine
  9. {
  10. Vector<HRenderable>::type OctreeSceneManager::getVisibleRenderables(const HCamera& camera) const
  11. {
  12. // TODO - Cull invisible objects
  13. Vector<HRenderable>::type renderables;
  14. Stack<HSceneObject>::type todo;
  15. todo.push(mRootNode);
  16. while(!todo.empty())
  17. {
  18. HSceneObject currentGO = todo.top();
  19. todo.pop();
  20. HRenderable curRenderable = currentGO->getComponent<Renderable>();
  21. if(curRenderable != nullptr)
  22. renderables.push_back(curRenderable);
  23. for(UINT32 i = 0; i < currentGO->getNumChildren(); i++)
  24. todo.push(currentGO->getChild(i));
  25. }
  26. return renderables;
  27. }
  28. void OctreeSceneManager::notifyComponentAdded(const HComponent& component)
  29. {
  30. if(component->getTypeId() == TID_Camera)
  31. {
  32. HCamera camera = static_object_cast<Camera>(component);
  33. auto findIter = std::find(mCachedCameras.begin(), mCachedCameras.end(), camera);
  34. if(findIter != mCachedCameras.end())
  35. {
  36. CM_EXCEPT(InternalErrorException, "Trying to add an already existing camera!");
  37. }
  38. mCachedCameras.push_back(camera);
  39. }
  40. }
  41. void OctreeSceneManager::notifyComponentRemoved(const HComponent& component)
  42. {
  43. if(component->getTypeId() == TID_Camera)
  44. {
  45. HCamera camera = static_object_cast<Camera>(component);
  46. auto findIter = std::find(mCachedCameras.begin(), mCachedCameras.end(), camera);
  47. if(findIter == mCachedCameras.end())
  48. {
  49. CM_EXCEPT(InternalErrorException, "Cannot find specified camera!");
  50. }
  51. mCachedCameras.erase(findIter);
  52. }
  53. }
  54. }