BsHandleManager.cpp 1.4 KB

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