BsHandleManager.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "BsHandleManager.h"
  2. #include "BsHandleDrawManager.h"
  3. #include "BsHandleSliderManager.h"
  4. #include "BsSceneEditorWidget.h"
  5. #include "BsCamera.h"
  6. #include "BsSceneObject.h"
  7. namespace BansheeEngine
  8. {
  9. HandleManager::HandleManager()
  10. :mSliderManager(nullptr), mDrawManager(nullptr)
  11. {
  12. mSliderManager = bs_new<HandleSliderManager>();
  13. mDrawManager = bs_new<HandleDrawManager>();
  14. }
  15. HandleManager::~HandleManager()
  16. {
  17. bs_delete(mSliderManager);
  18. bs_delete(mDrawManager);
  19. }
  20. bool HandleManager::isHandleActive() const
  21. {
  22. return mSliderManager->isSliderActive();
  23. }
  24. void HandleManager::update()
  25. {
  26. SceneEditorWidget* sceneView = SceneViewLocator::instance();
  27. if (sceneView != nullptr)
  28. {
  29. HCamera sceneCamera = sceneView->getSceneCamera();
  30. queueDrawCommands();
  31. mDrawManager->draw(sceneCamera);
  32. }
  33. }
  34. void HandleManager::handleInput(const Vector2I& inputPos, const Ray& inputRay, bool pressed)
  35. {
  36. SceneEditorWidget* sceneView = SceneViewLocator::instance();
  37. if (sceneView != nullptr)
  38. {
  39. HCamera sceneCamera = sceneView->getSceneCamera();
  40. refreshHandles();
  41. mSliderManager->handleInput(sceneCamera, inputPos, inputRay, pressed);
  42. triggerHandles();
  43. }
  44. }
  45. float HandleManager::getHandleSize(const HCamera& camera, const Vector3& handlePos) const
  46. {
  47. HSceneObject cameraSO = camera->SO();
  48. Vector3 cameraPos = camera->SO()->getWorldPosition();
  49. Vector3 diff = handlePos - cameraPos;
  50. float distAlongViewDir = diff.dot(cameraSO->getForward());
  51. return mDefaultHandleSize / std::max(distAlongViewDir, 0.0001f);
  52. }
  53. }