BsHandleManager.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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(const HCamera& camera)
  25. {
  26. queueDrawCommands();
  27. mDrawManager->draw(camera);
  28. }
  29. bool HandleManager::hasHitHandle(const HCamera& camera, const Vector2I& inputPos) const
  30. {
  31. return mSliderManager->hasHitSlider(camera, inputPos);
  32. }
  33. void HandleManager::handleInput(const HCamera& camera, const Vector2I& inputPos, bool pressed)
  34. {
  35. refreshHandles();
  36. mSliderManager->handleInput(camera, inputPos, pressed);
  37. triggerHandles();
  38. }
  39. float HandleManager::getHandleSize(const HCamera& camera, const Vector3& handlePos) const
  40. {
  41. HSceneObject cameraSO = camera->SO();
  42. Vector3 cameraPos = camera->SO()->getWorldPosition();
  43. Vector3 diff = handlePos - cameraPos;
  44. float distAlongViewDir = diff.dot(cameraSO->getForward());
  45. return mDefaultHandleSize / std::max(distAlongViewDir, 0.0001f);
  46. }
  47. }